最后一次更新日期: 2019/4/20
Matplotlib 是一個(gè) Python 的 2D繪圖庫(kù),它以各種硬拷貝格式和跨平臺(tái)的交互式環(huán)境生成出版質(zhì)量級(jí)別的圖形。
按需導(dǎo)入以下模塊:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
1. 圖像figure
In [71]: fig=plt.figure(1)
<Figure size 432x288 with 0 Axes>
In [72]: fig=plt.figure(2,figsize=(5,3))
<Figure size 360x216 with 0 Axes>
In [73]: fig.suptitle('title')
Out[73]: Text(0.5,0.98,'title')
Figure
是所有繪圖元素的頂級(jí)容器汁针,可以認(rèn)為是一張畫布聊疲,第一個(gè)參數(shù)num
設(shè)置圖像的編號(hào)休傍,第二個(gè)figsize
參數(shù)設(shè)置圖像大小毫蚓。
Figure.suptitle
方法用于設(shè)置圖像的總標(biāo)題(也可通過(guò)plt.suptitle
設(shè)置)占键,fontsize
參數(shù)可以設(shè)置字體大小昔善,x
和y
參數(shù)設(shè)置位置坐標(biāo)元潘,取值為0.~1.的相對(duì)于Figure
的寬和高的比例。
Figure
上無(wú)法直接繪圖君仆,需要至少添加一個(gè)Axes
翩概,在調(diào)用plt
的靜態(tài)方法繪圖時(shí),會(huì)繪制在最近聲明的一個(gè)Figure
上返咱,不顯示聲明則會(huì)自動(dòng)按默認(rèn)配置創(chuàng)建Figure
和Axes
钥庇,plt.gcf()
方法可以獲取當(dāng)前正在繪制的Figure
。
Figure.axes
可以獲取圖像下的所有Axes
咖摹;
Figure.clf()
方法可以清空?qǐng)D像评姨。
Artist
是matplotlib中所有繪圖對(duì)象的基類,Figure
也是繼承自該類萤晴,可在官方文檔查看到完整的繼承關(guān)系吐句。
2. 坐標(biāo)軸axes
x=np.arange(0,720,1)
y1=np.sin(x*np.pi/180)
y2=np.cos(x*np.pi/180)
#方法1
fig=plt.figure(figsize=(7.5,3))
fig.suptitle('sin/cos',fontsize=16)
ax=fig.add_axes((0,0,0.5,0.8),title='ax1')
ax.plot(x,y1)
ax=fig.add_axes((0.6,0,0.5,0.8),title='ax2')
ax.plot(x,y2)
plt.show(fig)
#方法2
fig=plt.figure(figsize=(10.5,3))
fig.suptitle('sin/cos',fontsize=16)
ax=fig.add_subplot(121,title='ax1', projection='3d')
ax.plot(x,y1)
ax=fig.add_subplot(122,title='ax2', projection='3d')
ax.plot(x,y2)
plt.show(fig)
Axes
的意思是用于繪圖的坐標(biāo)軸,AxesSubplot
是封裝了Axes
的子圖店读,通過(guò)不同的方法創(chuàng)建嗦枢,子圖在布局上更方便,繪圖時(shí)則沒(méi)有明顯的區(qū)別屯断,下面會(huì)將Axes
也稱作子圖文虏。
繪制不同圖像會(huì)使用不同軸類型,最常用的xy坐標(biāo)軸和xyz坐標(biāo)軸分別為Axes
和Axes3D
殖演。如果只需要一個(gè)Axes
氧秘,可以不顯示聲明,直接調(diào)用plt
的靜態(tài)方法繪制趴久,Axes
會(huì)被自動(dòng)創(chuàng)建(通過(guò)add_subplot(111)
)丸相。當(dāng)存在多個(gè)Axes
時(shí),可以調(diào)用Axes
的方法繪圖以保證圖像被繪制在正確的子圖上朋鞍,調(diào)用靜態(tài)方法繪制時(shí)實(shí)際上是通過(guò)plt.gca()
獲取了最后聲明的Axes
已添。
Axes.plot
是繪圖方法妥箕,用于繪制曲線圖。
Axes
在繪圖時(shí)需要提供x,y兩個(gè)軸的坐標(biāo)更舞,而Axes3D
需要提供x,y,z三個(gè)軸的坐標(biāo)畦幢,上方的例子中沒(méi)有提供z軸坐標(biāo)所以圖像被繪制在高度為0的一個(gè)平面上。
Axes
是綁定在Figure
上的缆蝉,可通過(guò)調(diào)用Figure
的add_axes
或add_subplot
方法創(chuàng)建新的Axes
或是將已有Axes
添加到Figure
上宇葱。兩種方法在子圖的大小和位置的設(shè)置上有所區(qū)別,需要相應(yīng)的調(diào)整參數(shù)刊头。
add_axes
方法的第一個(gè)參數(shù)rect
通過(guò)一個(gè)浮點(diǎn)數(shù)序列設(shè)置Axes
的位置和大小黍瞧,格式為(left,bottom,width,height)
,值均為0.~1.的相對(duì)于Figure
的寬和高的比例原杂。
add_subplot
方法的前三個(gè)參數(shù)分別設(shè)置區(qū)間劃分的行數(shù)印颤、列數(shù)、以及子圖的索引穿肄,例如2,3,5
表示將Figure
劃分為2行3列年局,在其中第5個(gè)區(qū)間上添加子圖;前三個(gè)參數(shù)可以替換為單個(gè)3位整數(shù)表示同一含義咸产,但每位的值不得超過(guò)10矢否,例如2,3,5
對(duì)應(yīng)235
。
title
參數(shù)用于設(shè)置子圖的標(biāo)題脑溢,也可通過(guò)Axes.set_title
或plt.title
方法設(shè)置僵朗;
projection
參數(shù)設(shè)置投影類型,即坐標(biāo)軸類型屑彻,其中验庙,'rectilinear'
表示直線(xy)坐標(biāo)軸,也是默認(rèn)值酱酬,'3d'
表示3D(xyz)坐標(biāo)軸壶谒。
除以上兩種方法,還可使用fig,ax_list = plt.subplots(figsize=(10.5,3),ncols=2,nrows=1)
快速規(guī)劃畫布膳沽,只需要指定畫布大小汗菜、列劃分?jǐn)?shù)量和行劃分?jǐn)?shù)量,省去寫循環(huán)的時(shí)間挑社。
get_children
方法能夠獲取Axes
下的所有繪圖元素陨界;
collections
屬性能夠獲取所有繪圖元素集合;
如想獲取指定類型的元素痛阻,可使用get_xlabel
等方法菌瘪;
cla
方法可以清除當(dāng)前軸的內(nèi)容。
3. 顯示show
plt.plot(x,y1)
plt.plot(x,y2)
plt.show()
plt.plot(x,y1)
plt.show()
plt.plot(x,y2)
plt.show()
plt.show()
方法用于顯示已繪制的圖像,一般配合plt
的靜態(tài)繪圖方法使用(即不顯示聲明Figure
的情況)俏扩。在使用靜態(tài)方法繪圖時(shí)糜工,如果不調(diào)用show
,則代碼段的中所有繪圖元素將會(huì)繪制在自動(dòng)創(chuàng)建的同一Figure
的同一Axes
上录淡。
在ipython中捌木,直接輸入Figure
的變量名也可以將其圖像顯示出來(lái);在執(zhí)行一段含繪圖語(yǔ)句的代碼段后嫉戚,也會(huì)自動(dòng)顯示圖像刨裆。
4. 保存save
fig.savefig('D:\\test.jpg')
Figure
的savefig
方法可以保存圖片至指定路徑,也可調(diào)用plt
的靜態(tài)方法保存彬檀,但必須和繪圖的代碼一起執(zhí)行帆啃,且必須在show
方法之前執(zhí)行。
ipython中直接右鍵顯示出來(lái)的圖片也有保存的選項(xiàng)窍帝。