python: matplotlib常用畫圖流程及命令
在matplot中,整幅影象為一個figure物件,在figure物件中包含一個或者多個axes物件,,每個axes物件都是一個擁有自己座標系統的繪圖區域。關係如下:
圖形的組成結構如下:
畫圖流程:
開始->建立畫圖figure->建立子圖fig1,axes->畫線->設定標題title->設定圖例legend->設定座標軸->設定網格->註釋及刻度->結束
1、建立圖形:f=plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=Trye)
num: 影象編號
figsize:(width, height),以英寸為單位
dpi: 解析度,每英寸多少畫素
facecolor: 背景顏色
edgecolor: 邊框顏色
frameon: 是否有邊框
2、建立子圖
subplot建立單個子圖:
#有兩種方式
#方式一:藉助plt建立
plt.subplot(2,2,1)
plt.plot(x,x)
#方式二:藉助總圖返回的物件f建立
f.add_subplot(2,2,1)
subplots建立多個子圖:
fig,axes=plt.subplots(2,2) ax1=axes[0,0] ax2=axes[0,1] ax3=axes[1,0] ax4=axes[1,1] ax1.plot(x,x)
上面返回的都是axes物件,可以通過指定哪一行和哪一列任意排列axes位置,通過[x,y,width,height],這四個值都是相對取值的,在0-1之間,前面兩個以左下角為基準,後面兩個相對於整個figure物件的寬度和高度。
#同樣有兩種方式
#方式一:通過plt建立
plt.axes([0.1,0.1,0.8,0.8])
#方式二:通過藉助總圖所返回的物件f建立
f.add_axes([0.1,0.1,0.8,0.8])
3、畫線
#colors=['red','blue','orange'] plt.plot(x,y,c=colors[i],label=str(i))
4、標題 plt.title('謝芬芬')
5、圖例
plt.legend(handles=[l1, l2], labels=['up', 'down'], loc='lower right')
6、座標軸
#顯示範圍
fig1.axis([xmin,xmax,ymin,ymax])
plt.axis([xmin,xmax,ymin,ymax])
#分別設定x、y軸的顯示範圍
fig1.set_xlim(2,4) fig1.set_ylim(2,4)
plt.xlim(2,4) Plt.ylim(2,4)
#設定刻度
plt.yticks([-1,-1/2,0,1/2,1])
fig1.set_yticks([-1,-1/2,0,1/2,1])
fig1.xaxis.set_ticks([1,2,3,4,5,6,7,8])
#上述兩種方法只能設定數字刻度,此方法可用字串,字旋轉45度
plt.xticks([0,np.pi/2,np.pi,3*np.pi/2,2*np.pi],['aaa','bbb','ccc','ddd','eee'],fontsize=‘xx-large’,rotation=45)
# 若要顯示π、α等一些特殊的數學符號
plt.xticks([0,np.pi/2,np.pi,3*np.pi/2,2*np.pi],['$0$','$\pi/2$','$\pi$','$3\pi/2$','$2\pi$'],fontsize=‘xx-large’)
#關閉座標軸
plt.axis('off')
#座標軸不可見
fig.get_xaxis().set_visible(False) #不顯示x軸
fig.get_yaxis().set_visible(False)
7、網格 plt.grid()
8、顯示 plt.show()
常見出現問題:
1、多幅圖出現影象部分重疊
採用: fig.tight_layout(pad=None,w_pad=None,h_pad=None)
引數:
pad: 設定繪圖區邊緣與畫布邊緣的距離大小
w_pad: 設定繪圖區之間的水平距離大小
h_pad: 設定繪圖區之間的垂直距離大小
使得子圖橫縱座標更加緊湊,主要用於自動調整圖區的大小及間距,使得所有繪圖及其標題、座標軸標籤都不重疊
2、plt.subplot(5,5,x),x要從1開始,不能從0,否則會出現ValueError: num must be 1 <= num <= 25
for i in range(25):
plt.subplot(5, 5, 1+i)