matplotlib基礎知識全面解析
圖像基本知識:
通常情況下,我們可以將一副Matplotlib圖像分成三層結構:
1.第一層是底層的容器層,主要包括Canvas、Figure、Axes;
2.第二層是輔助顯示層,主要包括Axis、Spines、Tick、Grid、Legend、Title等,該層可通過set_axis_off()或set_frame_on(False)等方法設置不顯示;
3.第三層為圖像層,即通過plot、contour、scatter等方法繪制的圖像。
容器層:容器層主要由Canvas、Figure、Axes組成
Canvas是位於最底層的系統層,繪圖過程中充當畫板的角色,即放置畫布的工具。通常情況下,我們並不需要對Canvas特別的聲明,但是當我需要在其他模塊如PyQt中調用Matplotlib模塊繪圖時,就需要首先聲明Canvas,這就相當於我們在自家畫室畫畫不用強調要用畫板,出去寫生時要特意帶一塊畫板。
Figure(fig)是Canvas上方的第一層,也是需要用戶來操作的應用層的第一層,在繪圖的過程中充當畫布的角色。當我們對Figure大小、背景色彩等進行設置的時候,就相當於是選擇畫布大小、材質的過程。因此,每當我們繪圖的時候,寫的第一行就是創建Figure的代碼。
Axes(ax,坐標系)是應用層的第二層,在繪圖的過程中相當於畫布上繪圖區的角色。一個Figure對象可以包含多個Axes對象,每個Axes都是一個獨立的坐標系,繪圖過程中的所有圖像都是基於坐標系繪制的。
輔助顯示層:
輔助顯示層為Axes內的除了根據數據繪制出的圖像以外的內容,主要包括Axes外觀(facecolor)、邊框線(spines)、坐標軸(axis)、坐標軸名稱(axis label)、坐標軸刻度(tick)、坐標軸刻度標簽(tick label)、網格線(grid)、圖例(legend)、標題(title)等內容。該層的設置可使圖像顯示更加直觀更加容易被用戶理解,但又並不會對圖像產生實質的影響。
圖像層:
圖像層指Axes內通過plot、scatter、hist、contour、bar、barbs等函數根據數據繪制出的圖像。
保存圖表plt.savefig()
調用plt.savefig()將當前的Figure對象保存成圖像文件,圖像格式由圖像文件的擴展名決定。下面程序將當前的圖表保存為“test.png”,並且通過dpi指定圖像的分辨率為120,因此輸出圖像的寬度為“8X120 = 960”個像素。使用這種方法可以很容易編寫出批量輸出圖表的程序。plt.savefig("test.png",dpi=120)
plt.imshow()
imshow()函數格式為:matplotlib.pyplot.imshow
X: 要繪制的圖像或數組
cmap: 顏色圖譜(colormap), 默認繪制為RGB(A)顏色空間。其它可選的顏色圖譜如下列表:
顏色圖譜 |
描述 |
autumn |
紅-橙-黃 |
bone |
黑-白,x線 |
cool |
青-洋紅 |
copper |
黑-銅 |
flag |
紅-白-藍-黑 |
gray |
黑-白 |
hot |
黑-紅-黃-白 |
hsv |
hsv顏色空間, 紅-黃-綠-青-藍-洋紅-紅 |
inferno |
黑-紅-黃 |
jet |
藍-青-黃-紅 |
magma |
黑-紅-白 |
pink |
黑-粉-白 |
plasma |
綠-紅-黃 |
prism |
紅-黃-綠-藍-紫-...-綠模式 |
spring |
洋紅-黃 |
summer |
綠-黃 |
viridis |
藍-綠-黃 |
winter |
藍-綠 |
Plt.figure()
matplotlib.pyplot.figure
(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None)
所有參數都是可選的,都有默認值,因此調用該函數時可以不帶任何參數,其中:
num: 整型或字符型都可以。設置為整型,則該整型數字表示窗口序號。設置為字符型,則該字符串表示窗口名稱。用該參數來命名窗口,兩個窗口序號或名相同,則後一個窗口會覆蓋前一個窗口。
figsize: 設置窗口大小。是一個tuple型的整數,如figsize=(8,8)。
dpi: 整形數字,表示窗口的分辨率。
facecolor: 窗口的背景顏色。edgecolor: 窗口的邊框顏色。
用figure()函數創建的窗口,只能顯示一幅圖片,顯示多幅圖片,則需要將這個窗口再劃分為幾個子圖,在每個子圖中顯示不同的圖片。
可以使用subplot()函數來劃分子圖,函數格式為:
matplotlib.pyplot.subplot(nrows, ncols, plot_number)
nrows: 子圖的行數。
ncols: 子圖的列數。
plot_number: 當前子圖的編號。
ax.get_xlim()
獲得Axes的x坐標範圍,默認是 (0.0, 1.0)
ax.get_yscale()
獲得y軸的數據刻畫類型
ax.set_xscale(‘log‘)
將x軸設置為log
plt.tight_layout()
如果有多個子圖,我們可以使用tight_layout()函數來調整顯示的布局,該函數格式為:
matplotlib.pyplot.tight_layout
(pad=1.08, h_pad=None, w_pad=None, rect=None)
所有的參數都是可選的,調用該函數時可省略所有的參數:
pad: 主窗口邊緣和子圖邊緣間的間距,默認為1.08
h_pad, w_pad: 子圖邊緣之間的間距,默認為 pad_inches
rect: 一個矩形區域,如果設置這個值,則將所有的子圖調整到這個矩形區域內。
一般調用為:plt.tight_layout() #自動調整subplot間的參數
matplotlib基礎知識全面解析