Matplotlib 誤差線的繪制和子圖的創建方式


一、繪制誤差線

使用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])


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM