2016-03-09 88 views
0

我想要4個方塊圖中包含的精確平方子圖Matplotlib:Gridspec和aspect ='auto'不兼容?

我有以下最小代碼,無法產生我想要的東西。

#latexify() 

g1 = gridspec.GridSpec(2, 2,height_ratios=[1,1],width_ratios=[1,1]) 

g1.update(wspace=0.05, hspace=0.4) # set the spacing between axes 

f, ((ax0, ax1), (ax2, ax3)) = plt.subplots(2, 2, sharex='col', sharey='row') 

ax0 = subplot(g1[0]) 
ax1 = subplot(g1[1]) 
ax2 = subplot(g1[2]) 
ax3 = subplot(g1[3]) 

ax0.plot([1, 2, 3], [1, 2, 3]) 
ax1.plot([1, 2, 3], [1, 2, 3]) 
ax2.plot([1, 2, 3], [1, 2, 3]) 
ax3.plot([1, 2, 3], [1, 2, 3]) 

ax0.set_title("G/G") 
ax1.set_title("G/BN") 
ax2.set_title("BN/BN (0$\degree$)") 
ax3.set_title("BN/BN (60$\degree$)") 

ax0.set_xticklabels([]) 
ax1.set_xticklabels([]) 
ax1.set_yticklabels([]) 
ax3.set_yticklabels([]) 

ax0.set(adjustable='box-forced', aspect='equal') 
ax1.set(adjustable='box-forced', aspect='equal') 
ax2.set(adjustable='box-forced', aspect='equal') 
ax3.set(adjustable='box-forced', aspect='equal') 

Toy plot

我得到了很多的左,右副區之間的空白。我嘗試了其他問題的幾個選項:sharex/sharey的輪流,強制不同的圖形大小(這就是註釋掉的latexify()函數允許我做的),使用gridspec heigh_ratios,但無濟於事。

+1

也許這是對你感興趣的指定figsize選項:做小區像這樣的時候我喜歡把一切都變成了循環使更改變得更容易。對於ax0,ax1,ax2,ax3中的斧頭,我們可以使用ax.set(可調整='box-forced',aspect ='equal')' 和所有其他重複的東西。 – Achim

+0

確實。謝謝。 – Nigu

回答

1

您需要設置圖的大小,以便它實際上是方形的。

f.set_size_inches((5,5)) 

enter image description here

或者,你可以在你subplots電話

f, ((ax0, ax1), (ax2, ax3)) = plt.subplots(2, 2, sharex='col', 
              sharey='row', figsize=(5,5)) 
+0

這工作。問題在於我使用我的latexify()命令的方式。高度和寬度不是那裏的獨立變量。我現在調整了這個。我會接受這個答案,因爲它正確地解決了這裏提出的問題。謝謝! – Nigu