matplotlib學習筆記(二)
一個繪圖對象(figure)可以包含多個軸(axis),在Matplotlib中用軸表示一個繪圖區域,可以將其理解為子圖。
在(一)中,繪圖對象只包括一個軸,因此只顯示了一個軸(子圖(Axes) ),個人理解一個子圖代表一個軸,可以使用subplot函數快速繪制有多個軸的圖表。
subplot函數的調用形式如下:
subplot(numRows, numCols, plotNum)
subplot將整個繪圖區域等分為numRows行和 numCols列個子區域,然後按照從左到右,從上到下的順序對每個子區域進行編號,左上的子區域的編號為1。
如果numRows,numCols和plotNum這三個數都小於10的話,可以把它們縮寫為一個整數,例如subplot(323)和subplot(3,2,3)是相同的。
subplot在plotNum指定的區域中創建一個軸對象。如果新創建的軸和之前創建的軸重疊的話,之前的軸將被刪除,也就是之前的子圖。
要註意,再多的子圖,仍然歸屬於一個繪圖對象。
subplot()返回它所創建的Axes對象,可以將它用變量保存起來,然後用sca()交替讓它們成為當前Axes對象,並調用plot()在其中繪圖。
如果需要同時繪制多幅圖表,可以給figure()傳遞一個整數參數指定Figure對象的序號,如果序號所指定的figure對象已經存在,將不創建新的對象,而只是讓它成為當前的Figure對象。下面的程序演示了如何依次在不同圖表的不同 子圖中繪制曲線。
import numpy as np import matplotlib.pyplot as plt plt.figure(1) # 創建圖表1 plt.figure(2) # 創建圖表2 ax1 = plt.subplot(211) # 在圖表2中創建子圖1 ax2 = plt.subplot(212) # 在圖表2中創建子圖2 x = np.linspace(0, 3, 100) for i in xrange(5): plt.figure(1) # 選擇圖表1 plt.plot(x, np.exp(i*x/3)) plt.sca(ax1) # 選擇圖表2的子圖1 plt.plot(x, np.sin(i*x)) plt.sca(ax2) # 選擇圖表2的子圖2 plt.plot(x, np.cos(i*x)) plt.show()
效果
解釋下,首先通過figure()創建了兩個圖表,它們的序號分別為1和2。然後在圖表2中創建了上下 並排的兩個子圖,並用變量ax1和ax2保存。
在循環中,先調用figure(1)讓圖表1成為當前圖表,並在其中繪圖。然後調用sca(ax1) 和sca(ax2)分別讓子圖ax1和ax2成為當前子圖,並在其中繪圖。
當它們成為當前子圖時,包含它們的圖表2也自動成為當前圖表,因此不需要調用figure(2)依次在圖表1和圖表2的兩 個子圖之間切換,逐步在其中添加新的曲線
matplotlib學習筆記(二)