1. 程式人生 > >matplotlib基礎知識全面解析

matplotlib基礎知識全面解析

大小 創建 summary imshow idt plt 並不會 tab per

圖像基本知識:

通常情況下,我們可以將一副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=None)

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基礎知識全面解析