Python / Matplotlib:控制gridspec中的纵横比

时间:2014-05-22 17:05:11

标签: python matplotlib

我正在尝试使用GridSpec控制4 x 1网格的宽高比。我想在水平方向上绘制非常宽的图形,并且在垂直方向上需要紧凑,但是我无法预测地改变纵横比(参见第一张图片)。下面'height_ratios'的所有三个设置都给我相同的宽高比(见下面第二张图片):

一:

gs = gridspec.GridSpec(4, 1, width_ratios=[1], height_ratios=[0.1, 0.1, 0.1, 0.1])
gs.update(wspace = 0, hspace = 0)

ax1 = plt.subplot(gs[0])
ax2 = plt.subplot(gs[1])
ax3 = plt.subplot(gs[2])
ax4 = plt.subplot(gs[3])

plt.show()

二:

gs = gridspec.GridSpec(4, 1, width_ratios=[1], height_ratios=[1, 1, 1, 1])

三:

gs = gridspec.GridSpec(4, 1, width_ratios=[1], height_ratios=[0.5, 0.5, 0.5, 0.5])

通过这样做,我能够像我想的那样得到细长的情节:

ax1.set_aspect(0.1)
ax2.set_aspect(0.1)
ax3.set_aspect(0.1)
ax4.set_aspect(0.1)

但这增加了我不想要的子图之间的空间,我使用hspace = 0删除了。如何在不增加子图之间的空间的情况下控制宽高比?

这就是我想要的,但我似乎无法再次得到它而且我不确定原因:

enter image description here

相反,我得到的只是:

enter image description here

这是我使用ax.set_aspect(0.1)得到的,它具有正确的宽高比,但它在图之间引入了空间,我不想要:

enter image description here

1 个答案:

答案 0 :(得分:5)

您需要设置数字大小,以便获得所需的宽高比,这是通过figsize plt.figure参数控制的。在这个例子中你真的需要GridSpec并不清楚;我愿意:

import matplotlib.pyplot as plt

f, axes = plt.subplots(4, 1, figsize=(10, 4))
f.subplots_adjust(hspace=0)

enter image description here

如果确实需要使用GridSpec进行更复杂的布局,可以使用plt.figure生成图形,然后将网格切片传递给对象的add_subplot方法。返回。