Matplotlib:Gridspec和aspect =' auto'不兼容?

时间:2016-03-09 00:10:32

标签: python matplotlib

我希望方形图中包含4个正方形子图

我有以下最小代码,无法生成我想要的内容。

#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 个答案:

答案 0 :(得分:1)

你需要设置数字大小,使其实际上是正方形。

f.set_size_inches((5,5))

enter image description here

或者,您可以在figsize电话

中指定subplots选项
f, ((ax0, ax1), (ax2, ax3)) = plt.subplots(2, 2, sharex='col', 
                                           sharey='row', figsize=(5,5))