除了plt直接繪圖之外,還可以使用subplots直接繪制多個子圖。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-10, 10, 100)
y =2*np.cos(x)**5 + 3*np.sin(x)**3
#定義畫布和子圖數量
fig,axes=plt.subplots(2,3,figsize=(10,6),facecolor='#ccddef')
#添加整個畫布的標題
fig.suptitle('我是最大的標題',fontsize=20)
#利用text屬性添加副標題
fig.text(0.45,0.9,'這是副標題')
#折線圖
axes[0,0].plot(x,y)
#柱狀圖
axes[0,1].bar(x,y*y)
#直方圖
axes[0,2].hist(y,bins=30)
#散點圖
axes[1,0].scatter(x,y)
#條形圖
axes[1,1].barh(x,y)
#餅圖
axes[1,2].pie([1,2,3,4,5],labels=['A級','B級','C級','D級','E級'])
#axes[1,2].boxplot() 需要合適的數據,就不畫了
#對子圖進行詳細設置
ax1=axes[0,0]
#設置子圖的xy軸范圍,子圖標題,標簽背景顏色等,也可單獨使用ax1.set_xlim()進行設置。部分屬性不能直接使用set設置
ax1.set(xlim=[-10,12],ylim=[-6,4],title='This is TU1',xlabel='xlabel',ylabel='ylabel',facecolor='#ffeedd')
#添加網格
ax1.grid(True)
#調整圖表位置和間距
fig.subplots_adjust(left=0.2, bottom=0.1, right=0.8, top=0.8,hspace=0.5)
plt.show()
結果圖
fig.subplots_adjust的幾個參數的含義,可以以畫板(比畫布更底層)的左下角為原點,建立直角坐標系。
left=0.2表示整個畫布左邊離y軸距離為整個畫板的20%,
rigtht=0.8表示整個畫布右邊離y軸距離為整個畫板的80%,
bottom和top同理,
hspace和wspace表示子圖之間的間距(距離大小貌似是子圖的寬高的百分比)
(left=0.2, bottom=0.1, right=0.6, top=0.8,hspace=0.5)
如果是在ipython中,會有一些自動的優化,所以,設置的subplots_adjust等參數有可能不會被顯示。
ipython的結果圖