matplotlib 使用簡明教程(五)-畫布、圖表、元素基礎操作
- 通過 `plt` 庫進行畫布(figure)相關操作
- 創建一個新的畫布或引用一個已有的畫布
- 更新當前的畫布(figure)
- 繪製畫布(figure)
- 將畫布保存成文件
- 清除當前的畫布(figure)
- 關閉某個畫布
- 獲取畫布信息:
- 爲畫布(Figure)添加標題
- 使用建議
- 通過 `plt` 庫進行多圖表操作
- `plt.subplot()`
- `plt.subplot2grid(shape, loc, rowspan=1, colspan=1, fig=None, **kwargs)`
- `plt.subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)`
- `plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)`
- `plt.twinx(ax=None)` 和 `plt.twiny(ax=None)`
- 圖表(Axes)基本操作
通過 plt
庫進行畫布(figure)相關操作
創建一個新的畫布或引用一個已有的畫布
plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, clear=False)
重要參數包括:
- num:Figure 的編號,可選。如果這個 num 的 figure 已經存在,那麼激活這個 figure 並引用,否則生成一個新的 figure
- figsize:設置畫布的尺寸,默認 [6.4, 4.8],單位英寸
- dpi:分辨率,默認 100
- facecolor:背景顏色
- edgecolor:邊線顏色
- clear:如果 num 代表的 figure 已經存在,是否要將這個畫布清空
更新當前的畫布(figure)
plt.draw()
對於支持交互類型(interactive model)的 backend,如果已經開啓了交互類型(ion()),則不需要每次調用。
繪製畫布(figure)
plt.show()
繪製畫布,對於支持交互類型的 backend,沒有作用;對於非交互類型(non-interactive model)的 backend,則立即顯示畫布,直至畫布被關閉。
將畫布保存成文件
plt.savefig(fname, dpi=None, facecolor='w', edgecolor='w', orientation='portrait', papertype=None, format=None, transparent=False, metadata=None)
重要參數包括:
- fname:一個文件路徑或者一個 file 類型的對象
- dpi:分辨率,一個整數或者 ‘figure’ 指定使用 figure 的分辨率
- facecolor:背景顏色
- edgecolor:邊線顏色
- orientation:方向,‘landscape’ 或 ‘portrait’
- papertype:紙張類型,‘letter’, ‘legal’, ‘executive’, ‘ledger’, ‘a0’ 到 ‘a10’, ‘b0’ 到 ‘b10’
- format:格式,可能是 ‘png’,‘pdf’,‘ps’,‘eps’,‘svg’ 等,具體取決於當前 backend 所支持的格式
- transparent:是否透明
- metadata:一些參數,kv 格式的參數
清除當前的畫布(figure)
plt.clf()
關閉某個畫布
plt.close()
參數可以是:
- 空,即關閉當前畫布
- Figure 實例
- 整數,Figure 編號
- 字符串,Figure 名稱
- ‘all’,所有畫布
獲取畫布信息:
作用 | 函數 |
---|---|
獲取當前的畫布(figure) | plt.gcf() |
返回當前所有畫布的標籤列表 | plt.get_figlabels() |
返回當前所有畫布的編號 | plt.get_fignums() |
爲畫布(Figure)添加標題
plt.suptitle(t, **kwargs)
重要參數說明:
- t:標題內容
- x,y:座標位置,默認 x = 0.5,y = 0.98
- ha:水平對齊方式,‘center’, ‘left’, ‘right’
- va:豎直對齊方式,‘top’, ‘center’, ‘bottom’, ‘baseline’
使用建議
matplotlib.figure.Figure
就是 matplotlib 的畫布類,通過這個類的對象其實可以完成 plt
中封裝的畫布相關的所有功能。
感興趣的朋友可以通過 https://matplotlib.org/api/_as_gen/matplotlib.figure.Figure.html#matplotlib.figure.Figure 來了解詳情。但是爲了突出“實用”,減少學習成本,建議還是主要通過 plt
來操作畫布,唯一需要解決的問題就是如何切換當前畫布,如下舉例說明:
>>> f1 = plt.figure() # 創建畫布 1
>>> f2 = plt.figure() # 創建畫布 2
>>> f3 = plt.figure() # 創建畫布 3
>>> f3 == plt.gcf() # 當前畫布是 f3
True
>>> plt.get_fignums() # 獲取畫布編號列表
[1, 2, 3]
>>> f = plt.figure(num = 1) # 通過 figure(num = 編號) 引用編號爲 1 的畫布
>>> f1 == f # f1 和 f 指向了同一 Figure 對象
True
>>> f1 == plt.gcf() # 當前畫布已經切換成了 f1
True
通過 plt
庫進行多圖表操作
plt.subplot()
將畫布(Figure)分割成若干塊,並選擇其中的一塊作爲繪製的區域。有兩種基本調用方式:
subplot(行, 列, 序號)
其中的行、列即行數和列數,序號從左上角開始向右再向下,起始於 1subplot(位置信息)
一個三位數,三位的含義分別爲行、列、序號
其他參數:
- sharex, sharey:Axes 對象,是否要和這個 Axes 共享 x 或 y 軸
- label:爲返回的 label 添加標籤
plt.subplot2grid(shape, loc, rowspan=1, colspan=1, fig=None, **kwargs)
將畫布(Figure)分割成特定的 MxN 的若干小格,並指定其中某些格子作爲繪製的區域。重要參數說明:
- shape:一個元組,畫布分割的方式,第一個是行數,第二個列數
- loc:一個元組,指定繪製區域的左上角微智,第一個是行數,第二個是列數
- rowspan:向右擴展的格子數量
- colspan:向下擴展的格子數量
plt.subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
創建一個畫布(Figure)和一系列的子圖表,重要參數說明:
- nrows, ncols:子圖表的的行數和列數
- sharex, sharey:是否共享 x 或 y 軸,可選參數包括:
- True 或 ‘all’:所有的子圖表共享座標
- False 或 ‘none’:所有的子圖表獨立
- ‘row’:每行的子圖表共享座標
- ‘col’:每列的子圖表共享座標
- squeeze:是否根據畫布的分割情況調整返回數據的格式,默認(False)返回一個二維數組,如果勾選該選項爲(True),則 1x1 的會返回一個單獨的變量,Nx1 和 1xM 會返回一個一維數組
- num:設置返回畫布(figure)的編號
返回值包括:
- fig:返回的畫布(Figure)
- ax:返回的子圖表變量或列表
plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)
調整子圖表的一些佈局:
- left,right,bottom,top:子圖表到畫布邊緣的間隙
- wspace,hspzce:子圖表之間的間隙的寬度、高度
plt.twinx(ax=None)
和 plt.twiny(ax=None)
創建一個共用 x 或 y 軸的圖表,新的圖表會疊加在 ax 上(如果 ax 爲 None 即疊加到當前的圖表上),新圖表的 y 或 x 軸 會放在右側或頂部
圖表(Axes)基本操作
向當前畫布添加圖表,並作爲當前的圖表
plt.axes(arg=None, **kwargs)
調用方式:
plt.axes()
plt.axes(rect, projection=None, **kwargs)
plt.axes(ax)
重要參數說明:
- arg:定義了具體行爲,可選值爲:
- None:等價於
plt.subplot(111, **kwargs)
- 數組:格式爲 [左, 下, 寬, 高],說明圖表的位置和大小,使用歸一化的實數
- Axes 對象:設置當前圖表爲該圖表
- None:等價於
- sharex,sharey:是否共用 x 或 y 軸
- label:設置圖表的標籤
- projection:指定投影類型,可選,可以是’aitoff’, ‘hammer’, ‘lambert’, ‘mollweide’, ‘polar’, ‘rectilinear’ 或者自定義字符串
獲取當前畫布中的圖表列表
plt.gca(**kwargs)
獲取當前畫布中的圖表列表,如果設置了 kwargs,則根據這些參數進行過濾。如果過濾結果爲空,那麼就創建一個符合條件的圖表並返回
重設當前圖表
plt.sca(ax)
設置當前圖表爲 ax,並把 ax 所屬的畫布設爲當前畫布
刪除圖表
plt.delaxes(ax = None)
如果參數爲空,刪除當前圖表,否則刪除 ax 定義的圖表
系列文章:
matplotlib 使用簡明教程(一)-基礎概念:
https://blog.csdn.net/fenghuizhidao/article/details/79352882
matplotlib 使用簡明教程(二)-常用圖表
https://blog.csdn.net/fenghuizhidao/article/details/83090043
matplotlib 使用簡明教程(三)-一些專業圖表簡介
https://blog.csdn.net/fenghuizhidao/article/details/83090165
matplotlib 使用簡明教程(四)-輔助性元件
https://blog.csdn.net/fenghuizhidao/article/details/83090249
matplotlib 使用簡明教程(五)-畫布、圖表、元素基礎操作
https://blog.csdn.net/fenghuizhidao/article/details/83090320
matplotlib 使用簡明教程(六)-圖像、動畫相關
https://blog.csdn.net/fenghuizhidao/article/details/83090512
matplotlib 使用簡明教程(七)-樣式定義
https://blog.csdn.net/fenghuizhidao/article/details/83090553