2010-07-25 109 views
8

如果我有一系列的次要情節與一列和多行,即:調整個別次要情節的高度在matplotlib在Python

plt.subplot(4, 1, 1) # first subplot 
plt.subplot(4, 1, 2) # second subplot 
# ... 

我怎麼能調整前N次要情節的高度?例如,如果我有4個子圖,每個子圖都在其自己的行上,我希望它們都具有相同的寬度,但前3個子圖較短,即它們的y軸較小,佔用的區域少於該行中最後一個繪圖的y軸。我怎樣才能做到這一點?

謝謝。

+0

使用tight_layout。這個鏈接有很好的例子:http://matplotlib.org/users/tight_layout_guide.html。爲了使它工作,你需要改變figsize例如'plt.figure(figsize =(10,1.5 * plotsToPlot))'其中'plotsToPlot'是一個圖中子圖的數量。 – Dilawar 2015-03-12 11:41:14

+0

使用[AxesGrid工具包](http://matplotlib.sourceforge.net/mpl_toolkits/axes_grid/users/overview.html#axesgrid)。 – vtorhonen 2010-07-25 17:08:32

回答

3

有多種方法可以做到這一點。最基本的(和最靈活)的方法是隻調用是這樣的:

import matplotlib.pyplot as plt 
plt.subplot(6,1,1) 
plt.subplot(6,1,2) 
plt.subplot(6,1,3) 
plt.subplot(2,1,2) 

,這將給你這樣的: Unequal Subplots

然而,這是不是很靈活。如果你正在使用matplotlib> = 1.0.0,請使用GridSpec。這是相當不錯的,而且是一種更靈活的佈局子圖的方式。

+1

我相信這個答案是次優的,下面的答案應該是接受的答案 – NameOfTheRose 2015-08-21 17:16:20

+0

@ user2422503 - 請注意日期和參考下面的答案。那時候,subplot2grid/GridSpec/etc是非常新的,大多數人都在使用一個沒有包含它的matplotlib版本。因此,我展示了更廣泛的解決方案,並指出了更新,更清潔的解決方案。 – 2015-08-21 20:02:50

+0

@ Joe Kington,對不起 – NameOfTheRose 2015-08-22 03:44:26

14

儘管這個問題很老,但我還是想回答一個非常類似的問題。 @ Joe對AxesGrid的引用是我的問題的答案,並且有很直接的用法,所以我想說明這個功能的完整性。

AxesGrid功能提供的能力,創建不同大小的地塊,並將它們非常明確,通過subplot2grid功能:

import matplotlib.pyplot as plt 

ax1 = plt.subplot2grid((m, n), (row_1, col_1), colspan = width) 
ax2 = plt.subplot2grid((m, n), (row_2, col_2), rowspan = height) 

ax1.plot(...) 
ax2.plot(...) 

注意,最大值爲row_ncol_nm-1n-1分別爲零索引符號被使用。

具體處理這個問題,如果總共有5個子圖,其中最後一個子圖的高度是其他子圖的兩倍,那麼我們可以使用m=6

ax1 = plt.subplot2grid((6, 1), (0, 0)) 
ax2 = plt.subplot2grid((6, 1), (1, 0)) 
ax3 = plt.subplot2grid((6, 1), (2, 0)) 
ax4 = plt.subplot2grid((6, 1), (3, 0)) 
ax5 = plt.subplot2grid((6, 1), (4, 0), rowspan=2) 
plt.show() 

Last Graph, twice the height

+2

感謝發佈 - 我需要這樣做,這正是我正在尋找的。 – 2013-02-13 17:31:10

+1

這非常簡單,比接受的答案效果更好 – jjz 2016-09-03 22:03:40