1. 程式人生 > >python: matplotlib常用畫圖流程及命令

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)