一、繪制誤差線
使用errorbar方法可以繪制誤差線。
x = np.linspace(0,10,50) dy=0.8 y = np.cos(x) + dy*np.random.randn(50) plt.errorbar(x, y, yerr=dy, fmt='.k')

做一些格式上的調整:
plt.errorbar(x, y, yerr=dy, fmt='ok',ecolor='lightgray',elinewidth=3, capsize=0)

errorbar方法的一些參數說明:
- yerr: 繪制垂直方向的誤差線
- xerr:繪制水平方向的誤差線
- fmt: 線條格式
- ecolor: 誤差線的顏色
- elinewidth:誤差線的寬度
- capsize: 誤差線的長度
二、子圖的創建方式
1.手動創建子圖
通過plt.axes函數可以創建基本子圖,默認情況下它會創建一個標准的坐標軸,並填滿整張圖。但是我們可以通過參數配置,實現想要的子圖效果。
這個參數是個列表形式,有四個值,從前往后,分別是子圖左下角基點的x和y坐標以及子圖的寬度和高度,數值的取值范圍是0-1之間,畫布左下角是(0,0),畫布右上角是(1,1)。
例如:
ax1 = plt.axes() # 使用默認配置,也就是布滿整個畫布
ax2 = plt.axes([0.65,0.65,0.2,0.2]) # 在右上角指定位置

上面是Matlab接口的風格,面向對象畫圖接口中有類似的fig.add_axes()方法:
fig = plt.figure() ax1 = fig.add_axes([0.1,0.5,0.8,0.4],xticklabels=[],ylim=(-1.2,1.2)) ax2 = fig.add_axes([0.1,0.1,0.8,0.4],ylim=(-1.2,1.2)) x = np.linspace(0,10) ax1.plot(np.cos(x)) ax2.plot(np.tan(x))

2.plt.subplot方法
subplot的方法接收三個整數參數,分別表示幾行、幾列、子圖索引值。索引值從1開始,從左上角到右下角依次自增。
for i in range(1, 7): plt.subplot(2,3,i) plt.text(0.5,0.5,str((2,3,i)), fontsize=16, ha='center')

子圖間距好像不太恰當,可以使用plt.subplots_adjust方法進行調整,它接受水平間距hspace和垂直間距wspace兩個參數。
同樣的,面向對象接口也有fig.add_subplot()方法可以使用:
fig = plt.figure() fig.subplots_adjust(hspace=0.4, wspace=0.4) for i in range(1,7): ax = fig.add_subplot(2,3,i) ax.text(0.5,0.5,str((2,3,i)), fontsize=16, ha='center')
3.快速創建多子圖
可以使用subplots()方法快速的創建多子圖環境,並返回一個包含子圖的Numpy數組。
fig, ax = plt.subplots(2,3,sharex='col', sharey='row')

通過sharex和sharey參數,自動地去掉了網格內部子圖的坐標刻度等內容,實現共享,讓圖形看起來更整齊整潔。
通過對返回的ax數組進行調用,可以操作每個子圖,繪制圖形:
for i in range(2): for j in range(3): ax[i,j].text(0.5,0.5,str((2,3,i)), fontsize=16, ha='center')

需要注意的是,subplot()和subplots()兩個方法在方法名上差個字母s外,subplots的索引是從0開始的。
4.GridSpec復雜網格
之前的子圖其實都比較規整,如果想實現不規則的多行多列子圖,可以使用plt.GridSpec方法。
grid = plt.GridSpec(2,3,wspace=0.4,hspace=0.4) # 生成兩行三列的網格
plt.subplot(grid[0,0]) # 將0,0的位置使用
plt.subplot(grid[0,1:]) # 同時占用第一行的第2列以后的位置
plt.subplot(grid[1,:2]) plt.subplot(grid[1,2])

