最后一次更新日期: 2019/4/20
Matplotlib 是一個 Python 的 2D繪圖庫近迁,它以各種硬拷貝格式和跨平臺的交互式環(huán)境生成出版質量級別的圖形裂允。
按需導入以下模塊:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
此篇為匯總傲霸,點擊下方鏈接可前往各小節(jié)
簡要使用教程1 - 繪圖結構 (圖像拔稳,坐標軸/子圖割按,顯示吏夯,保存)
簡要使用教程2 - 繪圖設置 (投影類型玄糟,字體勿她,顏色,標題阵翎,坐標軸逢并,圖例,標記樣式郭卫,線條樣式砍聊,透明度,旋轉贰军,子圖布局)
簡要使用教程3 - 常用繪圖類型(散點圖玻蝌,曲線圖,曲面圖词疼,條形圖俯树,直方圖,餅圖/環(huán)圖贰盗,箱線圖许饿,等高線圖,極坐標圖)
簡要使用教程4 - 其他繪圖元素(注解舵盈,填充陋率,圖片,基本圖形书释,數(shù)據(jù)表格)
也可以看看:
numpy使用指南
pandas簡要使用教程
一. 繪圖結構
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
是所有繪圖元素的頂級容器翘贮,可以認為是一張畫布,第一個參數(shù)num
設置圖像的編號爆惧,第二個figsize
參數(shù)設置圖像大小狸页。
Figure.suptitle
方法用于設置圖像的總標題(也可通過plt.suptitle
設置),fontsize
參數(shù)可以設置字體大小,x
和y
參數(shù)設置位置坐標芍耘,取值為0.~1.的相對于Figure
的寬和高的比例址遇。
Figure
上無法直接繪圖,需要至少添加一個Axes
斋竞,在調用plt
的靜態(tài)方法繪圖時倔约,會繪制在最近聲明的一個Figure
上,不顯示聲明則會自動按默認配置創(chuàng)建Figure
和Axes
坝初,plt.gcf()
方法可以獲取當前正在繪制的Figure
浸剩。
Figure.axes
可以獲取圖像下的所有Axes
;
Figure.clf()
方法可以清空圖像鳄袍。
Artist
是matplotlib中所有繪圖對象的基類绢要,Figure
也是繼承自該類,可在官方文檔查看到完整的繼承關系拗小。
2. 坐標軸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
的意思是用于繪圖的坐標軸重罪,AxesSubplot
是封裝了Axes
的子圖,通過不同的方法創(chuàng)建哀九,子圖在布局上更方便剿配,繪圖時則沒有明顯的區(qū)別,下面會將Axes
也稱作子圖阅束。
繪制不同圖像會使用不同軸類型呼胚,最常用的xy坐標軸和xyz坐標軸分別為Axes
和Axes3D
。如果只需要一個Axes
围俘,可以不顯示聲明砸讳,直接調用plt
的靜態(tài)方法繪制,Axes
會被自動創(chuàng)建(通過add_subplot(111)
)界牡。當存在多個Axes
時簿寂,可以調用Axes
的方法繪圖以保證圖像被繪制在正確的子圖上,調用靜態(tài)方法繪制時實際上是通過plt.gca()
獲取了最后聲明的Axes
宿亡。
Axes.plot
是繪圖方法常遂,用于繪制曲線圖。
Axes
在繪圖時需要提供x,y兩個軸的坐標挽荠,而Axes3D
需要提供x,y,z三個軸的坐標克胳,上方的例子中沒有提供z軸坐標所以圖像被繪制在高度為0的一個平面上。
Axes
是綁定在Figure
上的圈匆,可通過調用Figure
的add_axes
或add_subplot
方法創(chuàng)建新的Axes
或是將已有Axes
添加到Figure
上漠另。兩種方法在子圖的大小和位置的設置上有所區(qū)別,需要相應的調整參數(shù)跃赚。
add_axes
方法的第一個參數(shù)rect
通過一個浮點數(shù)序列設置Axes
的位置和大小笆搓,格式為(left,bottom,width,height)
性湿,值均為0.~1.的相對于Figure
的寬和高的比例。
add_subplot
方法的前三個參數(shù)分別設置區(qū)間劃分的行數(shù)满败、列數(shù)肤频、以及子圖的索引,例如2,3,5
表示將Figure
劃分為2行3列算墨,在其中第5個區(qū)間上添加子圖宵荒;前三個參數(shù)可以替換為單個3位整數(shù)表示同一含義,但每位的值不得超過10净嘀,例如2,3,5
對應235
报咳。
title
參數(shù)用于設置子圖的標題,也可通過Axes.set_title
或plt.title
方法設置挖藏;
projection
參數(shù)設置投影類型少孝,即坐標軸類型,其中熬苍,'rectilinear'
表示直線(xy)坐標軸,也是默認值袁翁,'3d'
表示3D(xyz)坐標軸柴底。
除以上兩種方法,還可使用fig,ax_list = plt.subplots(figsize=(10.5,3),ncols=2,nrows=1)
快速規(guī)劃畫布粱胜,只需要指定畫布大小柄驻、列劃分數(shù)量和行劃分數(shù)量,省去寫循環(huán)的時間焙压。
get_children
方法能夠獲取Axes
下的所有繪圖元素鸿脓;
collections
屬性能夠獲取所有繪圖元素集合;
如想獲取指定類型的元素涯曲,可使用get_xlabel
等方法野哭;
cla
方法可以清除當前軸的內容。
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)方法繪圖時,如果不調用show
绰沥,則代碼段的中所有繪圖元素將會繪制在自動創(chuàng)建的同一Figure
的同一Axes
上篱蝇。
在ipython中,直接輸入Figure
的變量名也可以將其圖像顯示出來徽曲;在執(zhí)行一段含繪圖語句的代碼段后零截,也會自動顯示圖像。
4. 保存save
fig.savefig('D:\\test.jpg')
Figure
的savefig
方法可以保存圖片至指定路徑秃臣,也可調用plt
的靜態(tài)方法保存涧衙,但必須和繪圖的代碼一起執(zhí)行,且必須在show
方法之前執(zhí)行。
ipython中直接右鍵顯示出來的圖片也有保存的選項绍撞。
二. 繪圖設置
1. 投影projection
projection
參數(shù)用于設置生成的Axes
類型正勒,在add_axes
、add_subplot
等方法中可使用傻铣。
常用的幾個類型:
'rectilinear'
:直線坐標軸章贞,即2d的xy坐標軸,默認值非洲;
'3d'
:3D的xyz坐標軸鸭限,繪制3d圖像會使用這個,注意两踏,使用該類型前必須先導入Axes3D
败京;
'polar'
:極坐標軸。
2. 字體font
plt.rcParams['font.sans-serif']
屬性用于設置默認字體梦染,當圖像中中文顯示存在問題時赡麦,可通過該項將字體設置為支持中文的字體,例如['SimHei']
黑體帕识;
plt.rcParams['font.size']
屬性用于設置默認字體大小泛粹。
也可以僅在特定文本上應用字體,fontsize
參數(shù)設置字體大小肮疗,fontproperties
參數(shù)設置字體晶姊,在suptitle
、set_title
伪货、text
等用于定義文字顯示的方法中可使用们衙。
當負號無法正常顯示時,設置plt.rcParams['axes.unicode_minus']=False
碱呼。
3. 顏色color
多以color
或colors
參數(shù)設置主體顏色或顏色序列蒙挑,簡寫形式c
,也有單獨設置某個部分顏色的參數(shù):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
參數(shù)設置,而預定義的colormap在plt.cm
下胰坟,可用種類詳見官方文檔因篇。
4. 標題title
Figure.suptitle
或plt.suptitle
方法用于設置總標題;
Axes.set_title
或plt.title
方法以及創(chuàng)建Axes
時的title
參數(shù)用于設置子標題笔横。
5. 坐標軸axis
xlabel
竞滓、ylabel
、zlabel
等方法用于設置坐標軸的標簽吹缔;
xticks
商佑、yticks
、zticks
等方法用于設置坐標軸的刻度厢塘,傳入?yún)?shù)為刻度值列表和刻度標簽列表茶没,第二個參數(shù)可以省略,會以刻度值作為標簽文字晚碾;
xlim
礁叔、ylim
、zlim
等方法用于設置坐標軸的范圍迄薄,傳入?yún)?shù)為開始值和結束值;
axis('off')
可以關閉坐標軸顯示煮岁;
以上方法可通過plt
調用讥蔽,Axes
則需要通過set_xlabel
等方法調用。
6. 圖例legend
plt.plot(x,y1,label='sin')
plt.plot(x,y2,label='cos')
plt.legend()
plt.show()
legend
方法用于顯示圖例画机,繪圖元素必須有標簽才能正常生成圖例冶伞,可在繪制圖像時通過label
參數(shù)設置標簽,或是調用legend
方法時傳入標簽列表步氏。
loc
參數(shù)設置圖例的位置响禽,默認'best'
自動選擇。
7. 標記樣式marker
參數(shù)marker
設置標記樣式荚醒,可選的樣式參考官方文檔-markers芋类;
參數(shù)s
或markersize
設置標記大小。
標記樣式可在散點圖界阁、曲線圖等中設置侯繁。
8. 線條樣式linestyle
參數(shù)linestyle
設置線條樣式,一般默認'-'
實線泡躯,可選的樣式見下方表格贮竟;
參數(shù)linewidth
設置線的寬度丽焊,簡寫形式lw
。
linestyle | 說明 |
---|---|
'-' or 'solid' | 實線 |
'--' or 'dashed' | 虛線 |
'-.' or 'dashdot' | 點劃線 |
':' or 'dotted' | 點虛線 |
'None' or '' | 不繪制 |
線條樣式在所有含線條的繪圖對象中幾乎都可以設置咕别。
9. 透明度alpha
參數(shù)alpha
設置點的透明度技健,一般默認1.
,值越小透明度越高惰拱。
透明度在所有含平面的繪圖對象中幾乎都可以設置雌贱。
10. 旋轉rotation
繪圖元素旋轉
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
方法設置或是創(chuàng)建時通過rotation
參數(shù)設置弓颈,也有通過angle
參數(shù)控制旋轉的帽芽。
3D圖像旋轉
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
方法實現(xiàn),第一個參數(shù)elev
控制縱向的旋轉角度翔冀,默認值30导街;第二個參數(shù)azim
控制橫向的旋轉角度,默認值120纤子。
11. 子圖布局調整adjust
#自動收縮布局
fig.tight_layout()
#調整子圖分布
fig.subplots_adjust(left=0.1, bottom=0.1, right=0.9, top=0.9, wspace=0.1, hspace=0.1)
三. 常用繪圖類型
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
方法用于繪制散點圖:
參數(shù)s
設置點的大小(面積)搬瑰,默認20
;
參數(shù)c
設置點的顏色控硼,可以是單個也可以多個泽论,默認'b'
藍色;
參數(shù)marker
設置點的樣式卡乾,默認'o'
圓翼悴;
參數(shù)alpha
設置點的透明度,默認1.
幔妨,值越小透明度越高鹦赎;
參數(shù)linewidths
設置邊緣線的寬度,默認None
误堡;
參數(shù)edgecolor
設置邊緣線的顏色饭于,默認None
奸绷。
2. 曲線圖
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
方法用于繪制散點圖:參數(shù)
fmt
設置整體樣式草娜,緊跟坐標參數(shù)之后咐低,是c
、marker
悉抵、linestyle
三個參數(shù)的整合肩狂,用于快速設置,也可選擇單獨設置這三個參數(shù)姥饰;參數(shù)
c
設置線和標記的顏色婚温,只能是單個顏色,默認'b'
藍色媳否;參數(shù)
marker
設置標記樣式栅螟,默認None
荆秦;參數(shù)
linestyle
設置線條樣式,默認'-'
實線力图;參數(shù)
alpha
設置點的透明度步绸,默認1.
,值越小透明度越高吃媒;參數(shù)
linewidth
設置線的寬度瓤介;參數(shù)
markersize
設置標記的大小。
3. 曲面圖
#曲面圖
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
方法用于繪制曲面圖:參數(shù)
rstride
和cstride
設置x赘那、y軸方向上的采樣步長刑桑,被采樣的數(shù)據(jù)才會用于曲面的繪制,值越小表示采樣精度越高募舟,繪制的圖像越精細祠斧,繪制時間也更長,與rcount
和ccount
參數(shù)不兼容拱礁;參數(shù)
rcount
和ccount
設置x琢锋、y軸方向上的采樣總數(shù),默認50呢灶;參數(shù)
cmap
設置曲面顏色集吴超,需要是colormap
,默認藍色單色漸變鸯乃;參數(shù)
alpha
設置點的透明度鲸阻,默認1.,值越小透明度越高缨睡。
繪制曲面圖需要構造xy平面上的網(wǎng)格數(shù)據(jù)以及對應的z值赘娄,可使用numpy的mgrid
索引器或meshgrid
方法實現(xiàn)。
4. 條形圖
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
):
2D
第一個參數(shù)x
是條形的橫坐標宏蛉,對齊的基準由align
參數(shù)設置,默認是與中心對齊性置;
第二個參數(shù)height
設置條形的高度拾并;
第三個參數(shù)width
設置條形的寬度;
第四個參數(shù)bottom
設置條形底部的起始縱坐標鹏浅,默認0嗅义;
參數(shù)color
設置條形的顏色;
參數(shù)tick_label
設置橫坐標刻度標簽隐砸;
參數(shù)edge_color
和linewidth
設置邊緣線的顏色和粗細之碗;
參數(shù)label
設置此次繪制的類別標簽;
參數(shù)alpha
設置點的透明度季希,默認1.褪那,值越小透明度越高幽纷。
2d條形圖在繪制時視需要調整x的值,不然多次繪制的條形會重疊在一起博敬。
2D in Axes3D
第一個參數(shù)left
設置條形的起始橫坐標友浸,相當于2d情況下設置align='edge'
;
第二個參數(shù)height
設置條形的高度偏窝,與2d情況下一樣收恢;
第三個參數(shù)zs
設置z軸的取值;
第四個參數(shù)zdir
設置作為z軸的軸祭往,默認'z'
伦意;
其余拓展參數(shù)和2d的一樣。
3D
第1,2,3個參數(shù)x
,y
,z
設置條形的位置坐標硼补;
第4,5,6個參數(shù)dx
,dy
,dz
設置條形的長寬高驮肉;
其余拓展參數(shù)和2d的一樣。
3D條形圖需要顯示圖例時必須為_facecolors2d
括勺、_edgecolors2d
賦值缆八,因為生成圖例使用的是2d的色彩設置,這應該是一個bug疾捍。
5. 直方圖
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個參數(shù)
x
設置需要統(tǒng)計的數(shù)據(jù)奈辰,y
軸數(shù)據(jù)是統(tǒng)計頻次,自動計算不需要自行設置乱豆;第2個參數(shù)
bins
設置分箱數(shù)量奖恰,即分成多少個等間隔的統(tǒng)計區(qū)間,默認10宛裕;參數(shù)
color
或facecolor
設置條形的顏色瑟啃;參數(shù)edgecolor
設置邊緣線的顏色;參數(shù)
density
設置是否歸一化揩尸,F(xiàn)alse時統(tǒng)計頻次蛹屿,True時統(tǒng)計概率密度,默認False岩榆;參數(shù)
alpha
設置點的透明度错负,默認1.,值越小透明度越高勇边。
hist2d
方法用于繪制二維直方圖:
第1,2個參數(shù)x
,y
設置需要統(tǒng)計的數(shù)據(jù)犹撒,二維直方圖中統(tǒng)計頻次以顏色來體現(xiàn);
第3個參數(shù)bins
設置分箱數(shù)量粒褒,即分成多少個等間隔的統(tǒng)計區(qū)間识颊,默認10,x
,y
可以分別設置奕坟;
參數(shù)cmap
設置顏色集祥款。
調用繪圖方法后會得到返回值:頻次和頻率的統(tǒng)計結果清笨。
6. 餅圖/環(huán)圖
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
方法用于繪制餅圖:
第一個參數(shù)x
設置每個扇形的比重,會自動計算x/sum(x)應用于繪制镰踏,但在sum(x)<1時函筋,不會進行該計算;
第二個參數(shù)explode
設置每個扇形偏離中心的距離奠伪,默認None跌帐;
第三個參數(shù)labels
設置每個扇形的標簽;
第四個參數(shù)colors
設置顏色序列绊率,繪制扇形時會輪流使用該序列中的顏色谨敛;
參數(shù)shadow
設置是否繪制陰影,默認False滤否;
參數(shù)labeldistance
設置扇形標簽與中心的距離脸狸;
參數(shù)radius
設置扇形的半徑,默認為1藐俺;
參數(shù)autopct
設置扇形上顯示的信息炊甲,可以是一個字符串格式或是一個函數(shù);
參數(shù)wedgeprops
設置扇形的樣式欲芹,其中width
是寬度卿啡,與radius
一致時繪制出來的就是餅圖,小于radius
則是環(huán)圖菱父,edgecolor
和linewidth
可以設置邊緣線的顏色和寬度颈娜;
參數(shù)center
設置餅圖的中心,默認(0,0)浙宜。
7. 箱線圖
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
方法用于繪制箱線圖:第一個參數(shù)
x
設置用于繪圖的數(shù)據(jù)官辽,當有多組時可以放在一個list中傳入;參數(shù)
labels
設置每組數(shù)據(jù)的類別標簽粟瞬;參數(shù)
width
設置圖形的寬度同仆。
8. 等高線圖
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個參數(shù)x
,y
,z
設置用于繪圖的數(shù)據(jù),z
是高度裙品;
第4個參數(shù)levels
設置等高線的數(shù)量俗批;
參數(shù)colors
設置等高線使用的顏色序列;
參數(shù)linewidths
設置等高線的寬度序列清酥;
參數(shù)linestyles
設置等高線的樣式序列。
contourf
方法用于填充等高線圖:
第1,2,3個參數(shù)x
,y
,z
設置用于繪圖的數(shù)據(jù)蕴侣,z
是高度焰轻;
第4個參數(shù)levels
設置等高線的數(shù)量;
參數(shù)cmap
設置用于填充的顏色集昆雀;
參數(shù)alpha
設置點的透明度辱志,默認1.蝠筑,值越小透明度越高。
clabel
方法用于設置等高線標簽揩懒;
colorbar
方法用于設置參考顏色條什乙;
9. 極坐標圖
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'
創(chuàng)建PolarAxes
坐標軸,即可實現(xiàn)極坐標作圖:
set_rmax
,set_rmin
,set_rlim
方法分別可以設置極徑的最大值已球,最小值臣镣,以及范圍;
set_rlabel_position
方法設置極徑標簽的位置智亮,以角度表示忆某;
set_theta_offset
方法設置角度的偏移量,以弧度表示阔蛉;
set_thetagrids
方法設置角度刻度序列弃舒,會影響網(wǎng)格線;
set_rticks
方法設置極徑刻度序列状原,會影響網(wǎng)格線聋呢;
set_theta_direction
方法設置角度增長方向。
在調用plot
等方法繪圖時颠区,原本的x
和y
分別對應到角度和極徑削锰。
四. 其他繪圖元素
1. 注解annotate
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
方法用于向圖像上添加注解:第一個參數(shù)
s
設置注釋的文本;第二個參數(shù)
xy
設置要注釋的點位置瓦呼,tuple
類型表示的坐標喂窟;第三個參數(shù)
xytext
設置注釋文本的位置,tuple
類型表示的坐標央串;參數(shù)
xycoords
和textcoords
設置注釋點位置和文本位置所采用的坐標系磨澡,默認'data'
和數(shù)據(jù)的坐標系一致;參數(shù)
arrowprops
設置箭頭质和,dict
類型稳摄,其中arrowstyle
屬性設置樣式,color
屬性設置顏色饲宿,lw
屬性設置箭頭寬度厦酬;以上三個參數(shù)具體信息建議參考官方文檔-annotate;
參數(shù)
bbox
設置文本框樣式瘫想,dict
類型仗阅,其中boxstyle
屬性設置樣式,fc
屬性設置填充顏色国夜,ec
屬性設置邊緣顏色减噪,lw
屬性設置邊緣線寬度;bbox
中的詳細設置建議參考官方文檔-Rectangle;參數(shù)
fontsize
設置字體大小筹裕。
注解也可通過arrow
+text
實現(xiàn)醋闭。
arrow
方法用于添加箭頭:
第1,2個參數(shù)x
,y
設置箭頭的起始位置;
第3,4個參數(shù)dx
,dy
設置箭頭往xy方向延伸的長度朝卒;
fc
參數(shù)設置填充顏色证逻;ec
參數(shù)設置邊緣顏色;
width
參數(shù)設置箭頭線寬度抗斤;
head_width
參數(shù)設置箭頭頭部的寬度囚企;
head_length
參數(shù)設置箭頭頭部的長度。
text
方法用于添加文本:
第1,2個參數(shù)x
,y
設置文本的位置豪治;
第3個參數(shù)s
設置要顯示的文本洞拨;
參數(shù)fontsize
設置字體大小负拟;
參數(shù)bbox
設置文本框樣式烦衣,與annotate
相同。
arrow
繪制的箭頭在有所傾斜時無法保證頭部的底部與線垂直掩浙,對此有要求只能使用annotate
花吟。
2. 區(qū)域填充fill
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個參數(shù)
x
,y
設置邊的xy坐標,該繪圖方法不適合填充不封閉的曲線厨姚,會如上圖出現(xiàn)無法預估的繪制效果衅澈。
fill_between
方法用于填充兩條曲線中間的區(qū)域:
第1,2,3個參數(shù)x
,y1
,y2
設置x坐標和兩條曲線的y坐標;
第4個參數(shù)where
設置繪制的橫坐標范圍谬墙,布爾數(shù)組類型今布,相當于對前三個參數(shù)執(zhí)行索引篩選。
3. 圖片image
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')
關閉。
4. 基本圖形patch
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個參數(shù)xy
設置左下角頂點的坐標,第2,3個參數(shù)width
,height
設置寬度和高度算凿,第4個參數(shù)angle
設置旋轉角度份蝴;
Ellipse
是橢圓類,第1個參數(shù)xy
設置橢圓中心的坐標氓轰,第2,3個參數(shù)width
,height
設置橫軸和豎軸的長度(直徑)婚夫,第4個參數(shù)angle
設置旋轉角度。
PatchCollection
用于構造patches
集合并設置通用的拓展參數(shù):
linewidth
參數(shù)設置邊緣線寬署鸡;
edgecolor
參數(shù)設置邊緣顏色案糙;
facecolor
參數(shù)設置填充顏色镐躲,facecolor='none'
可以設置不填充(在創(chuàng)建圖形類時,fill=False
也能設置不填充)侍筛;
alpha
參數(shù)設置透明度。
add_patch
用于向Axes
中添加單個圖形撒穷;
add_collection
用于向Axes
中添加圖形集合匣椰;
Axes.patches
可以查看Axes
下的所有Patch
繪圖對象;
Axes.collections
可以查看Axes
下的所有繪圖集合端礼。
5. 數(shù)據(jù)表格table
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
參數(shù)設置單元格數(shù)據(jù)禽笑,二維序列類型,默認None
蛤奥;
cellColors
參數(shù)設置單元格顏色佳镜,二維序列類型,默認None
凡桥;
cellText
和cellColors
兩個參數(shù)至少有一個要賦值蟀伸;
cellLoc
參數(shù)設置單元格位置,默認'right'
缅刽;
colWidths
參數(shù)設置列寬啊掏,一維序列類型,可選衰猛;
rowLabels
參數(shù)設置行標簽迟蜜,一維序列類型,可選啡省;
rowColors
參數(shù)設置行標簽顏色娜睛,一維序列類型,可選卦睹;
rowLoc
參數(shù)設置行標簽位置畦戒,默認'left'
;
colLabels
參數(shù)設置列標簽分预,一維序列類型兢交,可選;
colColors
參數(shù)設置列標簽顏色笼痹,一維序列類型配喳,可選;
colLoc
參數(shù)設置列標簽位置凳干,默認'center'
晴裹;
loc
參數(shù)設置表格位置,默認bottom
救赐;
bbox
參數(shù)設置方框樣式涧团,可選只磷。
更詳細的設置可以自行創(chuàng)建Table
對象,通過Axes.add_table
方法添加泌绣;
Axes.tables
可以查看Axes
下的所有Table
繪圖對象钮追。