Matplotlib——绘制图表
文章目錄
- 通過figure()函數創建畫布
- 通過subplot()函數創建單個子圖
- 通過subplots()函數創建多個子圖
- 通過add_subplot()方法添加和選中子圖
- 添加各類標簽
- 繪制常見圖表
- 繪制直方圖——hist()函數
- 繪制散點圖——scatter()函數
- 繪制柱狀圖——bar()函數
- 設定線條的相關參數
- 本地保存圖片
通過figure()函數創建畫布
在pyolot模塊中,默認擁有一個Figure對象,該對象可以理解為一張空白的畫布,用于容納圖標的各種組件,比如圖例、坐標軸等。
figure(num=None, # autoincrement if None, else integer from 1-N
figsize=None, # defaults to rc figure.figsize
dpi=None, # defaults to rc figure.dpi
facecolor=None, # defaults to rc figure.facecolor
edgecolor=None, # defaults to rc figure.edgecolor
frameon=True,
FigureClass=Figure,
clear=False,
**kwargs
)
部分參數表示的含義如下:
創建新的畫布并返回Figure實例
figure_obj = plt.figure() print(type(figure_obj))輸出結果:
<class 'matplotlib.figure.Figure'>用type()查看figure_obj對象的類型,可以看出其是一個Figure類的對象。
創建的新畫布:
嘗試另創建一個背景顏色為灰色的新畫布,并在畫布上繪制一張折線圖:
import matplotlib.pyplot as plt import numpy as npdata = np.arange(100, 201) plt.figure(facecolor='gray') plt.plot(data) plt.show()輸出結果:
從輸出結果可以看出x軸的刻度范圍為0~100,y軸的刻度范圍為指定的數值區間。這是因為在調用plot()函數時,如果傳入了單個列表或數組,則會將其設為y軸序列,且自動生成x軸的序列。x軸的序列從0開始,與y軸序列具有相同的長度。
通過subplot()函數創建單個子圖
在同一個畫布上繪制多個圖形,Figure對象允許劃分為多個繪圖區域,每個繪圖區域都是一個Axes對象,它擁有屬于自己的坐標系統,被稱為子圖。
subplot(nrows, ncols, index, **kwargs)
參數表示的含義如下:
subplot()函數會將整個繪圖區域等分為“nrows(行)× ncols(列)”的矩陣區域,之后按照從左到右、從上到下的順序對每個區域進行編號。從一開始依次遞增。
如果nrows, ncols, index這三個參數的值都小于10,則可以把它們簡寫為一個實數,如subplot(2,2,3)可以寫成subplot(223)。
創建單個子圖并在其上繪制簡單的圖形:
data = np.arange(100, 201) plt.subplot(221) plt.plot(data, data) plt.subplot(2, 2, 2) plt.plot(data, -data) plt.subplot(212) plt.plot(data, data*2) plt.show()輸出結果:
通過subplot()函數可以規劃Figure對象劃分為多少個字圖,但每調用一次該函數只會創建單個子圖。
通過subplots()函數創建多個子圖
如果希望一次性創建一組子圖,則可以通過subplots()函數進行實現。
subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True,
subplot_kw=None, gridspec_kw=None, **fig_kw):
上述函數常用的參數含義如下:
subplots()函數會返回一個元組,元組的第一個元素為Figure對象(畫布),第二個元素為Axes對象(子圖,包含坐標軸和畫的圖)或Axes對象數。如果創建的是單個子圖,則返回的是一個Axes對象,否則返回的是一個Axes對象數組。
創建4個子圖,并在每個子圖上繪制一些簡單的圖形:
# 生成包括100~200之間所有整數的數組 data = np.arange(100, 201)# 分成2*2的矩陣區域,返回子圖數組axes fig, axes = plt.subplots(2, 2) ax1 = axes[0, 0] ax2 = axes[0, 1] ax3 = axes[1, 0] ax4 = axes[1, 1] # 再選中的子圖上作圖 ax1.plot(data, data) ax2.plot(data, -data) ax3.plot(data, data**2) ax4.plot(data, np.log(data)) plt.show()輸出結果:
通過add_subplot()方法添加和選中子圖
想要創建子圖,除了使用pyplot模塊的函數之外, 還可以通過Figure類的add_subplot()方法添加和選中子圖。
add_subplot(self, *args, **kwargs)
上述方法中,*args參數表示一個三位數的實數或三個獨立的實數,用于描述子圖的位置。(具體用法類似于subplot()函數中的nrows, ncols, index參數。)
注意: 每調用一次add_subplot()方法會規劃畫布劃分子圖,但只會添加一個子圖。當調用plot()函數繪制圖形時,會畫在最后一次指定子圖的位置上。
創建具有兩行兩列的矩陣區域,且在編號為2的子圖上繪制圖形:
# 通過add_subplot()方法添加和選中子圖 fig = plt.figure() # 添加子圖 fig.add_subplot(2, 2, 1) fig.add_subplot(2, 2, 4) fig.add_subplot(223) fig.add_subplot(2, 2, 2) # 在子圖上作圖,randn函數返回一個或一組樣本,具有標準正態分布。 random_arr = np.random.randn(100) # 默認是在最后一次使用subplot的位置上作圖,即編號為3的位置 plt.plot(random_arr) plt.show()輸出結果:
上述示例中,首先創建了Figure類對象fig,然后調用add_subplot()方法將fig對象化分為一個2行2列的矩陣區域,且將圖形繪制在最后選中的編號為2的子區域上,調用plot()函數根據創建的隨機數組繪制折線圖。
添加各類標簽
圖表添加標簽和圖例的常用函數
| title() | 設置當前軸的標題 |
| xlabel() | 設置當前圖形x軸的標簽名稱 |
| ylabel() | 設置當前圖形y軸的標簽名稱 |
| xticks() | 指定x軸刻度的數目與取值 |
| yticks() | 指定y軸刻度的數目與取值 |
| xlim() | 設置或獲取當前圖形x軸的范圍 |
| ylim() | 設置或獲取當前圖形y軸的范圍 |
| legend() | 在軸上放置一個圖例 |
表中的函數之間是并列關系,沒有先后順序,既可以先繪制圖形,也可以先添加標簽。當然,添加圖例只能在繪制完成之后。
在使用Matplotlib繪圖時,如果要設置的圖標標題中有中文字符,則會變成方格子而無法正確顯示。
實際上Matplotlib是支持中文編碼的,出現這種情況主要是因為Matplotlib庫的配置信息里面沒有中文字體的相關信息,這是可以采用以下方式進行解決:
代碼實現:
# 添加各類標簽 mpl.rcParams['font.sans-serif'] = ['SimHei'] # 設置顯示中文字體 mpl.rcParams['axes.unicode_minus'] = False # 設置正常顯示符號 data1 = np.arange(0, 1.8, 0.1) plt.title("陳丑丑的身高體重數據") # 添加標題 plt.xlabel("length") # x軸名稱 plt.ylabel("weight") # y軸名稱 plt.xticks(np.arange(0, 1.8, step=0.1)) plt.yticks(np.arange(0, 66, step=4)) plt.plot(data1, (data1**2)*20) # 繪制y=(x^2)*20曲線 plt.legend(["y=(x^2)*20"]) # 添加圖例 plt.show()輸出結果:
繪制常見圖表
繪制直方圖——hist()函數
hist(
x, bins=None, range=None, density=False, weights=None,
cumulative=False, bottom=None, histtype=‘bar’, align=‘mid’,
orientation=‘vertical’, rwidth=None, log=False, color=None,
label=None, stacked=False, *, data=None, **kwargs)
上述函數中常用參數表示的含義如下:
代碼實現:
arr_random = np.random.randn(100) plt.hist(arr_random, bins=8, color='m', alpha=0.5) # alpha用于設置顏色深度——透明度 plt.show()輸出結果:
上述示例中,首先創建了一個包含100個隨機數的數組,用來表示繪制圖形使用的數據,接著調用hist()函數繪制一個直方圖,這個直方圖共有8個條柱,每個條柱的顏色為品紅,透明度alpha為0.5。
繪制散點圖——scatter()函數
scatter(
x, y, s=None, c=None, marker=None, cmap=None, norm=None,
vmin=None, vmax=None, alpha=None, linewidths=None,
verts=cbook.deprecation._deprecated_parameter,
edgecolors=None, *, plotnonfinite=False, data=None, **kwargs)
上述函數中常用參數表示的含義如下:
代碼實現:
# 繪制散點圖 x = np.arange(21) y = np.random.rand(21)*10 plt.scatter(x, y, c='g', marker='*') plt.show()輸出結果:
上述示例中,首先創建了一個包含整數0 ~ 20的數組,這些數值將作為散點圖中x軸對應的數據。其次創建了含有21個0 ~ 1之間的隨機數的數組,將它們乘以10的結果作為y軸對應的數據。散點的類型為星形。【關于線條的相關參數設置在本篇篇尾】
繪制柱狀圖——bar()函數
bar(
x, height, width=0.8, bottom=None, *, align=‘center’,
data=None, **kwargs)
上述函數中常用參數表示的含義如下:
代碼實現:
# 繪制柱狀圖 x1 = np.arange(5) # 從上下限范圍內隨機選取整數,創建兩個2行5列的數組 y1, y2 = np.random.randint(1, 91, size=(2, 5)) ax = plt.subplot(222) # 創建一個子圖 width = 0.25 # 條形的寬度 ax.bar(x1, y1, width=width, color='r') # 繪制紅色的柱形圖 ax.bar(x1+width, y2, width=width, color='g') # 繪制另一個綠色的柱形圖 ax.set_xticks(x1+0.1) # 設置x軸的刻度 ax.set_xticklabels(['a', 'b', 'c', 'd', 'e']) # 設置x軸的標簽 plt.show()輸出結果:
上述示例中,首先創建了包含整數0 ~ 4的數組,將其作為x軸的數據;接著又創建了兩個2行5列的二維數組,它們的數據是從1 ~ 30內隨機選取的整數,然后再指定編號為2的子圖上,調用bar()函數繪制了兩個柱形圖。第一個柱形圖x,y軸的數據設為x1、y1,顏色為紅色。第二個柱形圖x,y軸使用的數據為x+width和y2,顏色為綠色,最后設置了x軸的刻度標簽為“a、b、c、d、e”。
設定線條的相關參數
線條顏色使用color參數控制
| b(blue) | 藍色 |
| g(green) | 綠色 |
| r(red) | 紅色 |
| c(cyan) | 青色 |
| m(magenta) | 品紅 |
| y(yellow) | 黃色 |
| k(black) | 黑色 |
| w(white) | 白色 |
標記風格使用marker參數控制
| o | 實心圓圈 |
| D | 菱形 |
| h | 六邊形1 |
| H | 六邊形2 |
| 8 | 八邊形 |
| p | 五邊形 |
| + | 加號 |
| . | 點 |
| s | 正方形 |
| * | 星形 |
| v | 倒三角形 |
| ^ | 正三角形 |
| > | 一角朝右的三角形 |
| < | 一角朝左的三角形 |
線型使用linestyle參數控制
| - | 實線 |
| – | 長虛線 |
| -. | 短點相間線 |
| : | 短虛線 |
代碼示例:
data2 = np.arange(1, 3, 0.3) plt.plot(data2, marker="x", linestyle='--') plt.plot(data2+1, marker='o', linestyle=':') plt.plot(data2+2, color='k', marker='s', linestyle='-.')輸出結果:
代碼示例:
# 等價于 plt.plot(data2, 'x--', data2+1, 'o:', data2+2, 'ks-.')輸出結果:
本地保存圖片
想要保存當前生成的圖表,可以調用savefig()函數進行保存。
savefig(*args, **kwargs)
上述函數中,有fname參數——一個包含文件名路徑的字符串,或者是一個類似于Python文件的對象。
如果format參數設為None且fname參數是一個字符串,則輸出格式將根據文件名的擴展名推導出來。
使用savefig()函數將圖片保存在指定的目錄下,具體代碼實現如下(在show()函數錢插入):
data2 = np.arange(1, 3, 0.3) plt.plot(data2, marker="x", linestyle='--') plt.plot(data2+1, marker='o', linestyle=':') plt.plot(data2+2, color='k', marker='s', linestyle='-.') # 等價于 plt.plot(data2, 'x--', data2+1, 'o:', data2+2, 'ks-.')# 本地保存圖片 plt.savefig(r"D:\數據分析\demo.png") plt.show() print("over!")輸出結果:
在操作完成后使用print(“over!”)輸出上圖結果作為執行結束提示。
可以從相應路徑中打開文件以檢查是否成功保存。
總結
以上是生活随笔為你收集整理的Matplotlib——绘制图表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小米真蓝牙耳机说明书_小米真无线蓝牙耳机
- 下一篇: Pandas索引操作及高级索引——rei