編輯
前言
博客:【紅目香薰的博客_CSDN博客-計算機理論,2022年藍橋杯,MySQL領域博主】
本文由在下【紅目香薰】原創,首發於CSDN
2022年最大願望:【服務百萬技術人次】
Python初始環境地址:【Python可視化數據分析01、python環境搭建】
環境需求
環境:win10
開發工具:PyCharm Community Edition 2021.2
數據庫:MySQL5.6
目錄
Python可視化數據分析10、Matplotlib庫
前言
環境需求
前置環境
前言
繪制直線
plot函數
繪制柱狀圖
堆積柱狀圖
繪制並列柱狀圖
繪制直方圖
繪制餅圖
繪制分裂式餅圖
繪制散點圖
繪制3D圖像
3D曲面圖
3D散點圖
3D條狀圖
pip3 config set global.index-url https://repo.huaweicloud.com/repository/pypi/simplepip3 config listpip3 install --upgrade pippip3 install numpypip3 install matplotlib
編輯東西比較大引入的慢一些,別急。
Matplotlib是Python中最常用的可視化工具之一,可以非常方便地創建海量2D圖表和一些基本的3D圖表。
Matplotlib首次發表於2007年,在開源和社區的推動下,現在基於Python的各個科學計算領域都得到了廣泛應用。
Matplotlib中應用最廣的模塊是pyplot模塊,pyplot模塊中的每個繪圖函數都可以對圖形進行一些更改。
import numpy as npfrom matplotlib import pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號x = np.arange(1, 11)y = 2 * xplt.title("我是標題")plt.xlabel("我是X軸")plt.ylabel("我是Y軸")plt.plot(x, y)plt.show()
編輯
不規律數值
import numpy as npfrom matplotlib import pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號x = np.arange(1, 11)y = 2 * xplt.title("我是標題")plt.xlabel("我是X軸")plt.ylabel("我是Y軸")plt.plot((1, 5, 1, 5, 7, 5, 5, 9, 1, 5), y)plt.show()
編輯
plot()函數可以傳入多個參數,其中第3個參數表示線條的顏色以及類型,第4個參數表示線條的寬度
字符
含義
-
實線樣式
--
短橫線樣式
-.
點劃線樣式
:
虛線樣式
.
點標記
,
像素標記
o
圓標記
v
倒三角標記
^
正三角標記
<
左三角標記
>
右三角標記
1
下箭頭標記
2
上箭頭標記
3
左箭頭標記
4
右箭頭標記
s
正方形標記
p
五邊形標記
*
星形標記
h
六邊形標記1
'H'
六邊形標記2
+
加號標記
x
X標記
D
菱形標記
'd'
窄菱形標記
|
豎直線標記
_
水平線標記
b
藍色
g
綠色
r
紅色
c
青色
m
品紅色
y
黃色
k
黑色
w
白色
import numpy as npfrom matplotlib import pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號x = np.arange(1, 11)y = 2 * xplt.title("我是標題")plt.xlabel("我是X軸")plt.ylabel("我是Y軸")plt.plot(x, y, "^m")plt.show()
編輯
import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號x = ['2018年', '2019年', '2020年', '2021年', '2022年']y = np.random.randint(0, 100, 5)plt.bar(x, y)plt.title("產量變化")plt.show()
編輯
import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號x = ['2018年', '2019年', '2020年', '2021年', '2022年']y1 = np.random.randint(10, 20, 5)y2 = np.random.randint(10, 20, 5)plt.bar(x, y1)plt.bar(x, y2, bottom=y1)plt.ylabel("產量(萬億噸)")plt.legend(labels=["糧食", "小麥"], loc="upper left")plt.show()
編輯
import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號x1 = np.arange(5)y1 = np.random.randint(10, 20, 5)y2 = np.random.randint(10, 20, 5)bar_width = 0.35plt.bar(x1, y1, bar_width)plt.bar(x1 + bar_width, y2, bar_width)plt.ylabel("產量(萬億噸)")tick_label = ['2018年', '2019年', '2020年', '2021年', '2022年']plt.xticks(x1 + bar_width / 2, tick_label)plt.legend(labels=["糧食", "小麥"], loc="upper left")plt.show()
編輯
import numpy as npimport matplotlib.pyplot as pltimport randomplt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號a = [random.randint(80, 150) for i in range(250)]print(a)print(max(a) - min(a))# 計算組數d = 3 # 組距num_bins = (max(a) - min(a)) // d# 設置圖形大小plt.figure(figsize=(20, 8), dpi=80)plt.hist(a, num_bins)# 設置x軸刻度plt.xticks(range(min(a), max(a) + d, d))# 設置網格plt.grid(alpha=0.4)plt.show()
編輯
import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號labels =['2018年', '2019年', '2020年', '2021年', '2022年']y = np.random.rand(5)plt.pie(y, labels=labels, autopct="%3.1f%%", startangle=45, # 第一個餅片旋轉角度 shadow=True, pctdistance=0.8, labeldistance=1.2)plt.show()
編輯
import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號labels =['2018年', '2019年', '2020年', '2021年', '2022年']y = np.random.rand(5)plt.pie(y, explode=(0.1, 0.1, 0.1, 0.1, 0.1), # 邊緣偏離直徑的百分比 labels=labels, autopct="%3.1f%%", startangle=45, # 第一個餅片旋轉角度 shadow=True, pctdistance=0.8, labeldistance=1.2)plt.show()
編輯
散點圖又稱為散點分布圖,它以一個特征為橫坐標,以另一個特征為縱坐標,利用坐標點(散點)的分布形態反映特征間的統計關系。
散點圖可以提供兩類關鍵信息:
特征之間是否存在數值或者數量的關聯趨勢,關聯趨勢是線性的還是非線性的
如果某一個點或者某幾個點偏離大多數點,則這些點就是離群值,可以進一步分析這些離群值是否在建模分析中產生很大的影響
import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號x = np.arange(0, 100)y = np.random.normal(1, 20, 100)plt.scatter(x, y, label='坐標點', color='k', s=25, marker="o")plt.xlabel('X軸')plt.ylabel('Y軸')plt.title('標題')plt.legend()plt.show()
編輯
import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dplt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號fig = plt.figure() # 使用figure對象ax = Axes3D(fig) # 創建3D軸對象X = np.arange(-2, 2, 0.1) # X坐標數據Y = np.arange(-2, 2, 0.1) # Y坐標數據X, Y = np.meshgrid(X, Y) # 計算3維曲面分格線坐標# 用於計算X/Y對應的Z值def f(x, y): return (1 - y ** 5 + x ** 5) * np.exp(-x ** 2 - y ** 2)# plot_surface()函數繪制對應的曲面ax.plot_surface(X, Y, f(X, Y), rstride=1, cstride=1)plt.show() # 顯示圖形
編輯
import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dplt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號xs = np.random.randint(30, 40, 100)ys = np.random.randint(20, 30, 100)zs = np.random.randint(10, 20, 100)xs2 = np.random.randint(50, 60, 100)ys2 = np.random.randint(30, 40, 100)zs2 = np.random.randint(50, 70, 100)xs3 = np.random.randint(10, 30, 100)ys3 = np.random.randint(40, 50, 100)zs3 = np.random.randint(40, 50, 100)fig = plt.figure()ax = Axes3D(fig)ax.scatter(xs, ys, zs)ax.scatter(xs2, ys2, zs2, c='r', marker='^')ax.scatter(xs3, ys3, zs3, c='g', marker='*')ax.set_xlabel('X label')ax.set_ylabel('Y label')ax.set_zlabel('Z label')plt.show()
編輯
import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dplt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號x = np.arange(8)y = np.random.randint(0, 10, 8)y2 = y + np.random.randint(0, 3, 8)y3 = y2 + np.random.randint(0, 3, 8)y4 = y3 + np.random.randint(0, 3, 8)y5 = y4 + np.random.randint(0, 3, 8)clr = ['red', 'green', 'blue', 'black', 'white', 'yellow', 'orange', 'pink']fig = plt.figure()ax = Axes3D(fig)ax.bar(x, y, 0, zdir='y', color=clr)ax.bar(x, y2, 10, zdir='y', color=clr)ax.bar(x, y3, 20, zdir='y', color=clr)ax.bar(x, y4, 30, zdir='y', color=clr)ax.bar(x, y5, 40, zdir='y', color=clr)ax.set_xlabel('X label')ax.set_ylabel('Y label')ax.set_zlabel('Z label')plt.show()
編輯