最後一次更新日期: 2019/4/20html
Matplotlib 是一個 Python 的 2D繪圖庫,它以各類硬拷貝格式和跨平臺的交互式環境生成出版質量級別的圖形。python
按需導入如下模塊:api
import matplotlib.pyplot as plt
數組
from mpl_toolkits.mplot3d import Axes3D
bash
import numpy as np
app
點擊下方連接可前往各小節dom
使用指南1 - 繪圖結構 (圖像,座標軸/子圖,顯示,保存)ide
使用指南2 - 繪圖設置 (投影類型,字體,顏色,標題,座標軸,圖例,標記樣式,線條樣式,透明度,旋轉,子圖佈局)函數
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
是全部繪圖元素的頂級容器,能夠認爲是一張畫布,第一個參數num
設置圖像的編號,第二個figsize
參數設置圖像大小。
Figure.suptitle
方法用於設置圖像的總標題(也可經過plt.suptitle
設置),fontsize
參數能夠設置字體大小,x
和y
參數設置位置座標,取值爲0.~1.的相對於Figure
的寬和高的比例。
Figure
上沒法直接繪圖,須要至少添加一個Axes
,在調用plt
的靜態方法繪圖時,會繪製在最近聲明的一個Figure
上,不顯示聲明則會自動按默認配置建立Figure
和Axes
,plt.gcf()
方法能夠獲取當前正在繪製的Figure
。
Figure.axes
能夠獲取圖像下的全部Axes
; Figure.clf()
方法能夠清空圖像。
Artist
是matplotlib中全部繪圖對象的基類,Figure
也是繼承自該類,可在官方文檔查看到完整的繼承關係。
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
的意思是用於繪圖的座標軸,AxesSubplot
是封裝了Axes
的子圖,經過不一樣的方法建立,子圖在佈局上更方便,繪圖時則沒有明顯的區別,下面會將Axes
也稱做子圖。
繪製不一樣圖像會使用不一樣軸類型,最經常使用的xy座標軸和xyz座標軸分別爲Axes
和Axes3D
。若是隻須要一個Axes
,能夠不顯示聲明,直接調用plt
的靜態方法繪製,Axes
會被自動建立(經過add_subplot(111)
)。當存在多個Axes
時,能夠調用Axes
的方法繪圖以保證圖像被繪製在正確的子圖上,調用靜態方法繪製時其實是經過plt.gca()
獲取了最後聲明的Axes
。
Axes.plot
是繪圖方法,用於繪製曲線圖。 Axes
在繪圖時須要提供x,y兩個軸的座標,而Axes3D
須要提供x,y,z三個軸的座標,上方的例子中沒有提供z軸座標因此圖像被繪製在高度爲0的一個平面上。
Axes
是綁定在Figure
上的,可經過調用Figure
的add_axes
或add_subplot
方法建立新的Axes
或是將已有Axes
添加到Figure
上。兩種方法在子圖的大小和位置的設置上有所區別,須要相應的調整參數。 add_axes
方法的第一個參數rect
經過一個浮點數序列設置Axes
的位置和大小,格式爲(left,bottom,width,height)
,值均爲0.~1.的相對於Figure
的寬和高的比例。 add_subplot
方法的前三個參數分別設置區間劃分的行數、列數、以及子圖的索引,例如2,3,5
表示將Figure
劃分爲2行3列,在其中第5個區間上添加子圖;前三個參數能夠替換爲單個3位整數表示同一含義,但每位的值不得超過10,例如2,3,5
對應235
。 title
參數用於設置子圖的標題,也可經過Axes.set_title
或plt.title
方法設置; projection
參數設置投影類型,即座標軸類型,其中,'rectilinear'
表示直線(xy)座標軸,也是默認值,'3d'
表示3D(xyz)座標軸。
除以上兩種方法,還可以使用fig,ax_list = plt.subplots(figsize=(10.5,3),ncols=2,nrows=1)
快速規劃畫布,只須要指定畫布大小、列劃分數量和行劃分數量,省去寫循環的時間。
get_children
方法可以獲取Axes
下的全部繪圖元素; collections
屬性可以獲取全部繪圖元素集合; 如想獲取指定類型的元素,可以使用get_xlabel
等方法; cla
方法能夠清除當前軸的內容。
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
的靜態繪圖方法使用(即不顯示聲明
Figure
的狀況)。在使用靜態方法繪圖時,若是不調用
show
,則代碼段的中全部繪圖元素將會繪製在自動建立的同一
Figure
的同一
Axes
上。
在ipython中,直接輸入Figure
的變量名也能夠將其圖像顯示出來;在執行一段含繪圖語句的代碼段後,也會自動顯示圖像。
fig.savefig('D:\\test.jpg')
複製代碼
Figure
的savefig
方法能夠保存圖片至指定路徑,也可調用plt
的靜態方法保存,但必須和繪圖的代碼一塊兒執行,且必須在show
方法以前執行。
ipython中直接右鍵顯示出來的圖片也有保存的選項。
projection
參數用於設置生成的Axes
類型,在add_axes
、add_subplot
等方法中可以使用。
經常使用的幾個類型: 'rectilinear'
:直線座標軸,即2d的xy座標軸,默認值; '3d'
:3D的xyz座標軸,繪製3d圖像會使用這個,注意,使用該類型前必須先導入Axes3D
; 'polar'
:極座標軸。
plt.rcParams['font.sans-serif']
屬性用於設置默認字體,當圖像中中文顯示存在問題時,可經過該項將字體設置爲支持中文的字體,例如['SimHei']
黑體; plt.rcParams['font.size']
屬性用於設置默認字體大小。
也能夠僅在特定文本上應用字體,fontsize
參數設置字體大小,fontproperties
參數設置字體,在suptitle
、set_title
、text
等用於定義文字顯示的方法中可以使用。
當負號沒法正常顯示時,設置plt.rcParams['axes.unicode_minus']=False
。
多以color
或colors
參數設置主體顏色或顏色序列,簡寫形式c
,也有單獨設置某個部分顏色的參數:facecolor
設置填充顏色,簡寫形式fc
;edgecolor
設置邊緣顏色,簡寫形式ec
。
支持多種標識顏色的方式: (1). 以tuple
表示的RGB或RGBA值,取值範圍在0.~1.,例如(0.1,0.2,0.5)
; (2). 以str
表示的16進制的RGB或RGBA值,取值範圍00~FF,例如'#0F0F0F'
; (3). 以str
表示的顏色標籤,可參考下圖(官方示例)。
除了單個顏色外,matplotlib還提供了colormap,是特定主題的顏色集合,通常經過cmap
參數設置,而預約義的colormap在plt.cm
下,可用種類詳見官方文檔。
Figure.suptitle
或plt.suptitle
方法用於設置總標題; Axes.set_title
或plt.title
方法以及建立Axes
時的title
參數用於設置子標題。
xlabel
、ylabel
、zlabel
等方法用於設置座標軸的標籤; xticks
、yticks
、zticks
等方法用於設置座標軸的刻度,傳入參數爲刻度值列表和刻度標籤列表,第二個參數能夠省略,會以刻度值做爲標籤文字; xlim
、ylim
、zlim
等方法用於設置座標軸的範圍,傳入參數爲開始值和結束值;
axis('off')
能夠關閉座標軸顯示; 以上方法都可經過Axes
或plt
調用。
plt.plot(x,y1,label='sin')
plt.plot(x,y2,label='cos')
plt.legend()
plt.show()
複製代碼
legend
方法用於顯示圖例,繪圖元素必須有標籤才能正常生成圖例,可在繪製圖像時經過label
參數設置標籤,或是調用legend
方法時傳入標籤列表。 loc
參數設置圖例的位置,默認'best'
自動選擇。
參數marker
設置標記樣式,可選的樣式參考官方文檔-markers; 參數s
或markersize
設置標記大小。
標記樣式可在散點圖、曲線圖等中設置。
參數linestyle
設置線條樣式,通常默認'-'
實線,可選的樣式見下方表格; 參數linewidth
設置線的寬度,簡寫形式lw
。
linestyle | 說明 |
---|---|
'-' or 'solid' | 實線 |
'--' or 'dashed' | 虛線 |
'-.' or 'dashdot' | 點劃線 |
':' or 'dotted' | 點虛線 |
'None' or '' | 不繪製 |
線條樣式在全部含線條的繪圖對象中幾乎均可以設置。
參數alpha
設置點的透明度,通常默認1.
,值越小透明度越高。
透明度在全部含平面的繪圖對象中幾乎均可以設置。
fig=plt.figure(figsize=(4.5,3))
ax=fig.add_axes((0,0,1,1))
ax.plot(x,y1)
for tick in ax.get_xticklabels():
tick.set_rotation(90)
複製代碼
部分繪圖元素是支持旋轉的,可經過set_rotation
方法設置或是建立時經過rotation
參數設置,也有經過angle
參數控制旋轉的。
fig=plt.figure(figsize=(12,3))
ax=fig.add_subplot(131,title='ax1',projection='3d')
ax.plot(x,y1)
ax=fig.add_subplot(132,title='ax2',projection='3d')
ax.view_init(30,80)
ax.plot(x,y1)
ax=fig.add_subplot(133,title='ax3',projection='3d')
ax.view_init(60,120)
ax.plot(x,y1)
複製代碼
Axes3D
的旋轉經過
view_init
方法實現,第一個參數
elev
控制縱向的旋轉角度,默認值30;第二個參數
azim
控制橫向的旋轉角度,默認值120。
#自動收縮佈局
fig.tight_layout()
#調整子圖分佈
fig.subplots_adjust(left=0.1, bottom=0.1, right=0.9, top=0.9, wspace=0.1, hspace=0.1)
複製代碼
n = 100
x = np.random.randn(n)
y = np.random.randn(n)
z = np.random.randn(n)
fig=plt.figure(figsize=(9,3))
ax=fig.add_subplot(121,title='2d scatter')
ax.scatter(x,y,s=100,c=['g','r','y'],marker='*',alpha=0.5,linewidths=1,edgecolor='k')
ax=fig.add_subplot(122,title='3d scatter',projection='3d')
ax.scatter(x,y,z)
plt.show()
複製代碼
scatter
方法用於繪製散點圖: 參數s
設置點的大小(面積),默認20
; 參數c
設置點的顏色,能夠是單個也能夠多個,默認'b'
藍色; 參數marker
設置點的樣式,默認'o'
圓; 參數alpha
設置點的透明度,默認1.
,值越小透明度越高; 參數linewidths
設置邊緣線的寬度,默認None
; 參數edgecolor
設置邊緣線的顏色,默認None
。
n = 100
x = np.arange(0,8*n,8)
y = np.sin(x*np.pi/180)
z = np.cos(x*np.pi/180)
fig=plt.figure(figsize=(9,3))
ax=fig.add_subplot(121,title='2d plot')
ax.plot(x,y,'g<-',alpha=0.5,linewidth=2, markersize=8)
ax=fig.add_subplot(122,title='3d plot',projection='3d')
ax.plot(x,y,z)
plt.show()
複製代碼
plot
方法用於繪製散點圖: 參數
fmt
設置總體樣式,緊跟座標參數以後,是
c
、
marker
、
linestyle
三個參數的整合,用於快速設置,也可選擇單獨設置這三個參數; 參數
c
設置線和標記的顏色,只能是單個顏色,默認
'b'
藍色; 參數
marker
設置標記樣式,默認
None
; 參數
linestyle
設置線條樣式,默認
'-'
實線; 參數
alpha
設置點的透明度,默認
1.
,值越小透明度越高; 參數
linewidth
設置線的寬度; 參數
markersize
設置標記的大小。
#曲面圖
n = 480
x = np.arange(n)
y = np.arange(n)
x,y = np.meshgrid(x,y)
z = np.cos(x*np.pi/180)+np.sin(y*np.pi/180)
fig=plt.figure()
ax=fig.add_subplot(111,title='3d surface',projection='3d')
ax.plot_surface(x,y,z,rstride=10,cstride=10,cmap=plt.cm.winter)
plt.show()
複製代碼
plot_surface
方法用於繪製曲面圖: 參數
rstride
和
cstride
設置x、y軸方向上的採樣步長,被採樣的數據纔會用於曲面的繪製,值越小表示採樣精度越高,繪製的圖像越精細,繪製時間也更長,與
rcount
和
ccount
參數不兼容; 參數
rcount
和
ccount
設置x、y軸方向上的採樣總數,默認50; 參數
cmap
設置曲面顏色集,須要是
colormap
,默認藍色單色漸變; 參數
alpha
設置點的透明度,默認1.,值越小透明度越高。
繪製曲面圖須要構造xy平面上的網格數據以及對應的z值,可以使用numpy的mgrid
索引器或meshgrid
方法實現。
x = np.array([1,2,3,4])
y1 = np.array([4,3,3,1])
y2 = np.array([2,5,1,3])
tick_label = ['a','b','c','d']
fig=plt.figure(figsize=(10,3))
ax=fig.add_subplot(131,title='2d bar')
ax.bar(x+0.15,y1,width=0.3,color='y',label='y1',alpha=0.7, tick_label=tick_label)
ax.bar(x-0.15,y2,width=0.3,color='g',label='y2',alpha=0.7, tick_label=tick_label)
ax.legend()
ax=fig.add_subplot(132,title='2d bar in 3d axes',projection='3d')
ax.bar(x,y1,0,'y',label='y1',edgecolor='k',linewidth=1)
ax.bar(x,y2,1,'y',label='y2',edgecolor='k',linewidth=1)
ax.legend(facecolor='none')
ax=fig.add_subplot(133,title='3d bar',projection='3d')
bar3d1=ax.bar3d(x,0,0,0.5,0.25,y1,label='y1')
bar3d2=ax.bar3d(x,1,0,0.5,0.25,y2,label='y2')
bar3d1._facecolors2d=bar3d1._facecolors3d
bar3d1._edgecolors2d=bar3d1._edgecolors3d
bar3d2._facecolors2d=bar3d2._facecolors3d
bar3d2._edgecolors2d=bar3d2._edgecolors3d
ax.legend()
plt.show()
複製代碼
bar
方法用於繪製條形圖(水平條形圖請使用barh
):
第一個參數x
是條形的橫座標,對齊的基準由align
參數設置,默認是與中心對齊; 第二個參數height
設置條形的高度; 第三個參數width
設置條形的寬度; 第四個參數bottom
設置條形底部的起始縱座標,默認0; 參數color
設置條形的顏色; 參數tick_label
設置橫座標刻度標籤; 參數edge_color
和linewidth
設置邊緣線的顏色和粗細; 參數label
設置這次繪製的類別標籤; 參數alpha
設置點的透明度,默認1.,值越小透明度越高。
2d條形圖在繪製時視須要調整x的值,否則屢次繪製的條形會重疊在一塊兒。
第一個參數left
設置條形的起始橫座標,至關於2d狀況下設置align='edge'
; 第二個參數height
設置條形的高度,與2d狀況下同樣; 第三個參數zs
設置z軸的取值; 第四個參數zdir
設置做爲z軸的軸,默認'z'
; 其他拓展參數和2d的同樣。
第1,2,3個參數x
,y
,z
設置條形的位置座標; 第4,5,6個參數dx
,dy
,dz
設置條形的長寬高; 其他拓展參數和2d的同樣。
3D條形圖須要顯示圖例時必須爲_facecolors2d
、_edgecolors2d
賦值,由於生成圖例使用的是2d的色彩設置,這應該是一個bug。
x = np.random.randn(1000)
y = np.random.randn(1000)
fig=plt.figure(figsize=(9,3))
ax=fig.add_subplot(121,title='hist')
result1=ax.hist(x,bins=20,color="g",edgecolor="k",alpha=0.5,density=True)
ax=fig.add_subplot(122,title='hist2d')
result2=ax.hist2d(x,y,bins=20)
plt.show()
複製代碼
hist
方法用於繪製直方圖: 第1個參數
x
設置須要統計的數據,
y
軸數據是統計頻次,自動計算不須要自行設置; 第2個參數
bins
設置分箱數量,即分紅多少個等間隔的統計區間,默認10; 參數
color
或
facecolor
設置條形的顏色;參數
edgecolor
設置邊緣線的顏色; 參數
density
設置是否歸一化,False時統計頻次,True時統計機率密度,默認False; 參數
alpha
設置點的透明度,默認1.,值越小透明度越高。
hist2d
方法用於繪製二維直方圖: 第1,2個參數x
,y
設置須要統計的數據,二維直方圖中統計頻次以顏色來體現; 第3個參數bins
設置分箱數量,即分紅多少個等間隔的統計區間,默認10,x
,y
能夠分別設置; 參數cmap
設置顏色集。
調用繪圖方法後會獲得返回值:頻次和頻率的統計結果。
x1 = np.array([1,2,3,4])
x1_labels = ['a','b','c','d']
x1_explode = [0.2,0,0,0]
x2 = np.array([2,2,1,5])
fig=plt.figure(figsize=(9,4))
ax=fig.add_subplot(121,title='pie')
ax.pie(x1,explode=x1_explode,labels=x1_labels,shadow=True,autopct='%1.1f%%')
ax=fig.add_subplot(122,title='ring')
ax.pie(x1,radius=1,wedgeprops=dict(width=0.3, edgecolor='w'))
ax.pie(x2,radius=0.7,wedgeprops=dict(width=0.3, edgecolor='w'))
plt.show()
複製代碼
pie
方法用於繪製餅圖: 第一個參數x
設置每一個扇形的比重,會自動計算x/sum(x)應用於繪製,但在sum(x)<1時,不會進行該計算; 第二個參數explode
設置每一個扇形偏離中心的距離,默認None; 第三個參數labels
設置每一個扇形的標籤; 第四個參數colors
設置顏色序列,繪製扇形時會輪流使用該序列中的顏色; 參數shadow
設置是否繪製陰影,默認False; 參數labeldistance
設置扇形標籤與中心的距離; 參數radius
設置扇形的半徑,默認爲1; 參數autopct
設置扇形上顯示的信息,能夠是一個字符串格式或是一個函數; 參數wedgeprops
設置扇形的樣式,其中width
是寬度,與radius
一致時繪製出來的就是餅圖,小於radius
則是環圖,edgecolor
和linewidth
能夠設置邊緣線的顏色和寬度; 參數center
設置餅圖的中心,默認(0,0)。
def test_data():
spread = np.random.rand(50)
center = np.ones(25) * 0.5
flier_high = np.random.rand(10)+1
flier_low = np.random.rand(10)-1
return np.r_[spread,center,flier_high,flier_low]
x1 = test_data()
x2 = test_data()
fig=plt.figure()
ax=fig.add_subplot(111,title='box')
ax.boxplot([x1,x2],labels=['x1','x2'],widths=0.3)
plt.show()
複製代碼
boxplot
方法用於繪製箱線圖: 第一個參數
x
設置用於繪圖的數據,當有多組時能夠放在一個list中傳入; 參數
labels
設置每組數據的類別標籤; 參數
width
設置圖形的寬度。
x = np.arange(-3,3,0.01)
y = np.arange(-3,3,0.01)
x,y = np.meshgrid(x,y)
z = (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)+1
fig=plt.figure(figsize=(13.5,3))
ax=fig.add_subplot(131,title='2d contourf')
c=ax.contour(x,y,z,colors='k',linewidths=0.5)
ax.clabel(c,fontsize=10)
cf=ax.contourf(x,y,z,cmap='YlOrRd')
cbar=fig.colorbar(cf)
ax=fig.add_subplot(132,title='3d contourf',projection='3d')
ax.contourf(x,y,z,cmap='YlOrRd')
ax.contour(x,y,z,colors='k',linewidths=0.2)
ax=fig.add_subplot(133,title='3d surface with contour',projection='3d')
ax.plot_surface(x,y,z,cmap='YlOrRd',alpha=0.7)
ax.contour(x,y,z,colors='k',linewidths=1)
plt.show()
複製代碼
contour
方法用於繪製等高線圖: 第1,2,3個參數x
,y
,z
設置用於繪圖的數據,z
是高度; 第4個參數levels
設置等高線的數量; 參數colors
設置等高線使用的顏色序列; 參數linewidths
設置等高線的寬度序列; 參數linestyles
設置等高線的樣式序列。
contourf
方法用於填充等高線圖: 第1,2,3個參數x
,y
,z
設置用於繪圖的數據,z
是高度; 第4個參數levels
設置等高線的數量; 參數cmap
設置用於填充的顏色集; 參數alpha
設置點的透明度,默認1.,值越小透明度越高。
clabel
方法用於設置等高線標籤; colorbar
方法用於設置參考顏色條;
theta=np.linspace(0,2*np.pi,100)
fig=plt.figure(figsize=(10,5))
ax=fig.add_subplot(121,title='polar1',projection='polar')
ax.plot(theta,theta,c='b',lw=2)
ax.set_rmax(theta.max())
ax=fig.add_subplot(122,title='polar2',projection='polar')
ax.plot(theta,theta,c='r',lw=2)
ax.set_rmax(theta.max())
ax.set_rlabel_position(90)
ax.set_theta_offset(np.pi)
ax.set_thetagrids(np.arange(0,360,15))
ax.set_rticks(np.arange(0,6.5,0.5))
ax.set_theta_direction(-1)
複製代碼
經過設置projection='polar'
建立PolarAxes
座標軸,便可實現極座標做圖: set_rmax
,set_rmin
,set_rlim
方法分別能夠設置極徑的最大值,最小值,以及範圍; set_rlabel_position
方法設置極徑標籤的位置,以角度表示; set_theta_offset
方法設置角度的偏移量,以弧度表示; set_thetagrids
方法設置角度刻度序列,會影響網格線; set_rticks
方法設置極徑刻度序列,會影響網格線; set_theta_direction
方法設置角度增加方向。
在調用plot
等方法繪圖時,本來的x
和y
分別對應到角度和極徑。
fig=plt.figure(figsize=(10,3.5))
ax=fig.add_subplot(121,title='annotate')
ax.scatter([-0.25],[-0.25],s=100)
ax.set_xlim([-1,1])
ax.set_ylim([-1,1])
bbox_style = dict(boxstyle="square", fc='white', ec='black',lw=1)
arrow_style = dict(arrowstyle='->',color='black',lw=2)
ax.annotate('This is a dot.',(-0.24,-0.24),(-0.14,0.16),
arrowprops=arrow_style,bbox=bbox_style,fontsize=15)
ax=fig.add_subplot(122,title='arrow+text')
ax.scatter([-0.25],[-0.25],s=100)
ax.set_xlim([-1,1])
ax.set_ylim([-1,1])
ax.arrow(0.09,0.06,-0.25,-0.23,fc='k',ec='k',
width=0.01,head_width=0.07,head_length=0.07)
ax.text(-0.14,0.16,'This is a dot.',fontsize=15,bbox=bbox_style)
複製代碼
annotate
方法用於向圖像上添加註解: 第一個參數
s
設置註釋的文本; 第二個參數
xy
設置要註釋的點位置,
tuple
類型表示的座標; 第三個參數
xytext
設置註釋文本的位置,
tuple
類型表示的座標; 參數
xycoords
和
textcoords
設置註釋點位置和文本位置所採用的座標系,默認
'data'
和數據的座標系一致; 參數
arrowprops
設置箭頭,
dict
類型,其中
arrowstyle
屬性設置樣式,
color
屬性設置顏色,
lw
屬性設置箭頭寬度; 以上三個參數具體信息建議參考
官方文檔-annotate; 參數
bbox
設置文本框樣式,
dict
類型,其中
boxstyle
屬性設置樣式,
fc
屬性設置填充顏色,
ec
屬性設置邊緣顏色,
lw
屬性設置邊緣線寬度;
bbox
中的詳細設置建議參考
官方文檔-Rectangle; 參數
fontsize
設置字體大小。
註解也可經過arrow
+text
實現。
arrow
方法用於添加箭頭: 第1,2個參數x
,y
設置箭頭的起始位置; 第3,4個參數dx
,dy
設置箭頭往xy方向延伸的長度; fc
參數設置填充顏色;ec
參數設置邊緣顏色; width
參數設置箭頭線寬度; head_width
參數設置箭頭頭部的寬度; head_length
參數設置箭頭頭部的長度。
text
方法用於添加文本: 第1,2個參數x
,y
設置文本的位置; 第3個參數s
設置要顯示的文本; 參數fontsize
設置字體大小; 參數bbox
設置文本框樣式,與annotate
相同。
arrow
繪製的箭頭在有所傾斜時沒法保證頭部的底部與線垂直,對此有要求只能使用annotate
。
x=np.arange(0,720,1)
y1=np.sin(x*np.pi/180)
y2=np.cos(x*np.pi/180)
fig=plt.figure(figsize=(10,3.5))
ax=fig.add_subplot(121,title='fill')
ax.plot(x,y1)
ax.plot(x,y2)
ax.fill(x,y1,color='g',alpha=0.3)
ax.fill(x,y2,color='b',alpha=0.3)
ax=fig.add_subplot(122,title='fill between')
ax.plot(x,y1)
ax.plot(x,y2)
ax.fill_between(x,y1,y2,color='g',alpha=0.3)
複製代碼
fill
方法用於填充多邊形: 第1,2個參數
x
,
y
設置邊的xy座標,該繪圖方法不適合填充不封閉的曲線,會如上圖出現沒法預估的繪製效果。
fill_between
方法用於填充兩條曲線中間的區域: 第1,2,3個參數x
,y1
,y2
設置x座標和兩條曲線的y座標; 第4個參數where
設置繪製的橫座標範圍,布爾數組類型,至關於對前三個參數執行索引篩選。
from PIL import Image
image1=Image.open('D:\\training_data\\used\\cifar-10-batches-py\\test\\1_貓.png')
image2=Image.open('D:\\training_data\\used\\cifar-10-batches-py\\test\\2_船.png')
fig=plt.figure(figsize=(8,4))
ax=fig.add_subplot(121,title='image1')
ax.imshow(image1)
ax=fig.add_subplot(122,title='image2')
ax.imshow(image2)
複製代碼
imshow
用於顯示圖片,默認是會顯示座標軸和刻度的,可經過Axes.axis('off')
關閉。
import matplotlib.patches as patches
from matplotlib.collections import PatchCollection
fig=plt.figure(figsize=(9,3))
ax=fig.add_subplot(121,title='Rectangle')
rects=[]
x=[1.5,3.5,5.5,]
y=[3,4.5,3]
for i in range(3):
rect=patches.Rectangle((x[i],y[i]),3,3)
rects.append(rect)
pc=PatchCollection(rects,linewidth=1,edgecolor='r',facecolor='none')
#ax.add_patch(rect)
ax.add_collection(pc)
ax.set_xlim([0,10])
ax.set_ylim([0,10])
ax=fig.add_subplot(122,title='Ellipse')
ells=[]
for i in range(5):
ell=patches.Ellipse((5,5),6,3,angle=i*36)
ells.append(ell)
pc=PatchCollection(ells,facecolor='g',alpha=0.5)
#ax.add_patch(ell)
ax.add_collection(pc)
ax.set_xlim([0,10])
ax.set_ylim([0,10])
複製代碼
繪製基本圖形和相應集合須要導入
patches
和
PatchCollection
。
patches
提供了各類圖形的構造: Rectangle
是矩形類,第1個參數xy
設置左下角頂點的座標,第2,3個參數width
,height
設置寬度和高度,第4個參數angle
設置旋轉角度; Ellipse
是橢圓類,第1個參數xy
設置橢圓中心的座標,第2,3個參數width
,height
設置橫軸和豎軸的長度(直徑),第4個參數angle
設置旋轉角度。
PatchCollection
用於構造patches
集合並設置通用的拓展參數: linewidth
參數設置邊緣線寬; edgecolor
參數設置邊緣顏色; facecolor
參數設置填充顏色,facecolor='none'
能夠設置不填充(在建立圖形類時,fill=False
也能設置不填充); alpha
參數設置透明度。
add_patch
用於向Axes
中添加單個圖形; add_collection
用於向Axes
中添加圖形集合; Axes.patches
能夠查看Axes
下的全部Patch
繪圖對象; Axes.collections
能夠查看Axes
下的全部繪圖集合。
data=np.array([[1,2,3],[4,5,6],[7,8,9]])
row_labels=['row1','row2','row3']
row_colors=plt.cm.BuPu(np.linspace(0, 0.5, len(row_labels)))
col_labels=['col1','col2','col3']
col_index=np.arange(3)
fig=plt.figure()
ax=fig.add_subplot(111,title='table')
for i in range(len(row_labels)-1,-1,-1):
ax.bar(col_index,data[i],color=row_colors[i],linewidth=0.5,edgecolor='k')
ax.table(cellText=data,
rowLabels=row_labels,
rowColours=row_colors,
colLabels=col_labels,
loc='bottom')
ax.set_xticks([])
複製代碼
table
方法用於添加表格: cellText
參數設置單元格數據,二維序列類型,默認None
; cellColors
參數設置單元格顏色,二維序列類型,默認None
; cellText
和cellColors
兩個參數至少有一個要賦值; cellLoc
參數設置單元格位置,默認'right'
; colWidths
參數設置列寬,一維序列類型,可選; rowLabels
參數設置行標籤,一維序列類型,可選; rowColors
參數設置行標籤顏色,一維序列類型,可選; rowLoc
參數設置行標籤位置,默認'left'
; colLabels
參數設置列標籤,一維序列類型,可選; colColors
參數設置列標籤顏色,一維序列類型,可選; colLoc
參數設置列標籤位置,默認'center'
; loc
參數設置表格位置,默認bottom
; bbox
參數設置方框樣式,可選。
更詳細的設置能夠自行建立Table
對象,經過Axes.add_table
方法添加; Axes.tables
能夠查看Axes
下的全部Table
繪圖對象。