2013-10-28 27 views
2

我正在繪製一個4x3的子圖網格,我希望它們之間有固定的間距。 我正在使用subplots_adjust,見下文。但是,這些數字在整個窗口內均勻排列,沒有固定的空間。謝謝你的建議。Python子圖的固定間距

import matplotlib.pyplot as plt 
import numpy as np 

data = np.random.rand(10,10) 

fig, axes = plt.subplots(4, 3) 

axes[0, 0].imshow(data) 
axes[1, 0].imshow(data) 
axes[2, 0].imshow(data) 
axes[3, 0].imshow(data) 

axes[0, 1].imshow(data) 
axes[1, 1].imshow(data) 
axes[2, 1].imshow(data) 
axes[3, 1].imshow(data) 

axes[0, 2].imshow(data) 
axes[1, 2].imshow(data) 
axes[2, 2].imshow(data) 
axes[3, 2].imshow(data) 

plt.setp(axes, xticks=[], yticks=[]) 

plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=.05, hspace=.05) 

plt.show() 

回答

3

你所面臨的問題是,的subplots_adjust參數是相對值,即,圖中的寬度和高度的餾分,見docu,而不是絕對值。

您正在「默認畫布」(可能是8x6)中繪製4行和3列正方形(10x10)。 但是,數字大小是以寬度乘以高度來定義的,因此列的行數爲行數。 所以,你必須換行和列,並更改您的次要情節電話

fig, axes = plt.subplots(3, 4) 

,你的空間將是相等的。如果不是,請嘗試添加figsize=(8,6)來設置圖形大小。 當然,您可以調整imshow行的索引。
enter image description here

作爲替代方案,你可以交換figsize參數。

+0

感謝,這有助於。但我仍然需要用figsize來調整無花果的間距。 – user2926577

1

您可以直接使用gridspec來控制每個子圖的間距和位置。還有更多的信息here。這裏有一個例子:

import matplotlib.gridspec as gridspec 
import matplotlib.pyplot as plt 
import numpy as np 

data = np.random.rand(10,10) 

plt.figure(figsize = (6,6)) # set the figure size to be square 

gs = gridspec.GridSpec(4, 3) 
# set the space between subplots and the position of the subplots in the figure 
gs.update(wspace=0.1, hspace=0.4, left = 0.1, right = 0.7, bottom = 0.1, top = 0.9) 


for g in gs: 
    ax = plt.subplot(g) 
    plt.imshow(data) 

plt.show() 

gridspec example