python使用matplotlib subplot繪製多個子圖
阿新 • • 發佈:2018-12-20
1 問題描述
matploglib
能夠繪製出精美的圖表, 有些時候, 我們希望把一組圖放在一起進行比較, 有沒有什麼好的方法呢?
matplotlib
中提供的 subplot
可以很好的解決這個問題
2 subplot函式介紹
matplotlib
下, 一個 Figure
物件可以包含多個子圖(Axes
), 可以使用 subplot()
快速繪製, 其呼叫形式如下 :
subplot(numRows, numCols, plotNum)
- 1
圖表的整個繪圖區域被分成
numRows
行和numCols
列然後按照從左到右,從上到下的順序對每個子區域進行編號,左上的子區域的編號為1
plotNum
引數指定建立的Axes
如果 numRows = 2, numCols = 3
, 那整個繪製圖表樣式為 2X3
的圖片區域, 用座標表示為
(1, 1), (1, 2), (1, 3)(2, 1), (2, 2), (2, 3)
- 1
- 2
這時, 當 plotNum = 3
時, 表示的座標為(1, 3), 即第一行第三列的子圖
如果
numRows
,numCols
和plotNum
這三個數都小於10
的話, 可以把它們縮寫為一個整數, 例如subplot(323)
和subplot(3,2,3)
是相同的.subplot
在plotNum
指定的區域中建立一個軸物件. 如果新建立的軸和之前建立的軸重疊的話,之前的軸將被刪除.
3 示例程式
3.1 規則劃分成3*3的
#!/usr/bin/env python#!encoding=utf-8import matplotlibimport matplotlib.pyplot as pltif __name__ == '__main__': for i,color in enumerate("rgby"): plt.subplot(221+i, axisbg=color) plt.show()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
3.2 不規則劃分
但是有時候我們的劃分並不是規則的, 比如如下的形式
這種應該怎麼劃分呢?
將整個表按照 2*2
劃分 前兩個簡單, 分別是 (2, 2, 1)
(2, 2, 2)
但是第三個圖呢, 他佔用了 (2, 2, 3)
和 (2, 2, 4)
顯示需要對其重新劃分, 按照 2 * 1
劃分
前兩個圖佔用了 (2, 1, 1)
的位置
因此第三個圖佔用了 (2, 1, 2)
的位置
#!/usr/bin/env python#!encoding=utf-8import matplotlib.pyplot as pltimport numpy as npdef f(t): return np.exp(-t) * np.cos(2 * np.pi * t)if __name__ == '__main__' : t1 = np.arange(0, 5, 0.1) t2 = np.arange(0, 5, 0.02) plt.figure(12) plt.subplot(221) plt.plot(t1, f(t1), 'bo', t2, f(t2), 'r--') plt.subplot(222) plt.plot(t2, np.cos(2 * np.pi * t2), 'r--') plt.subplot(212) plt.plot([1, 2, 3, 4], [1, 4, 9, 16]) plt.show()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26