CSDN | GitHub |
---|---|
python使用matplotlib:subplot繪制多個子圖 | |
本作品采用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協定進行許可, 轉載請注明出處
1 問題描述
matploglib
能夠繪制出精美的圖表, 有些時候, 我們希望把一組圖放在一起進行比較, 有沒有什麼好的方法呢?
matplotlib
中提供的
subplot
可以很好的解決這個問題
2 subplot函數介紹
matplotlib
下, 一個
Figure
對象可以包含多個子圖(
Axes
), 可以使用
subplot()
快速繪制, 其調用形式如下 :
subplot(numRows, numCols, plotNum)
- 圖表的整個繪圖區域被分成
行和numRows
列numCols
- 然後按照從左到右,從上到下的順序對每個子區域進行編号,左上的子區域的編号為1
-
參數指定建立的plotNum
對象所在的區域Axes
如果
numRows = 2, numCols = 3
, 那整個繪制圖表樣式為
2X3
的圖檔區域, 用坐标表示為
(, ), (, ), (, )
(, ), (, ), (, )
這時, 當
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-8
import matplotlib
import matplotlib.pyplot as plt
if __name__ == '__main__':
for i,color in enumerate("rgby"):
plt.subplot(+i, axisbg=color)
plt.show()
3.2 不規則劃分
但是有時候我們的劃分并不是規則的, 比如如下的形式
這種應該怎麼劃分呢?
将整個表按照
2*2
劃分
前兩個簡單, 分别是
(2, 2, 1)
和
(2, 2, 2)
但是第三個圖呢, 他占用了
(2, 2, 3)
和
(2, 2, 4)
顯示需要對其重新劃分, 按照
2 * 1
劃分
前兩個圖占用了
(2, 1, 1)
的位置
是以第三個圖占用了
(2, 1, 2)
的位置
代碼如下, 參照matplotlib繪制多個子圖——subplot
#!/usr/bin/env python
#!encoding=utf-8
import matplotlib.pyplot as plt
import numpy as np
def f(t):
return np.exp(-t) * np.cos( * np.pi * t)
if __name__ == '__main__' :
t1 = np.arange(, , )
t2 = np.arange(, , )
plt.figure()
plt.subplot()
plt.plot(t1, f(t1), 'bo', t2, f(t2), 'r--')
plt.subplot()
plt.plot(t2, np.cos( * np.pi * t2), 'r--')
plt.subplot()
plt.plot([, , , ], [, , , ])
plt.show()
本作品采用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協定進行許可