GridSpec与Python中的共享轴

时间:2014-03-19 16:00:42

标签: python matplotlib

另一个帖子的

This solution建议使用gridspec.GridSpec代替plt.subplots。但是,当我在子图之间共享轴时,我通常使用如下语法

  fig, axes = plt.subplots(N, 1, sharex='col', sharey=True, figsize=(3,18))

当我使用sharex时如何指定shareyGridSpec

2 个答案:

答案 0 :(得分:53)

首先,只要您稍微不精确,就可以轻松解决原始问题。 调用tight_layout后,只需将子图的顶部范围重置为默认

fig, axes = plt.subplots(ncols=2, sharey=True)
plt.setp(axes, title='Test')
fig.suptitle('An overall title', size=20)

fig.tight_layout()
fig.subplots_adjust(top=0.9) 

plt.show()

enter image description here


但是,要回答您的问题,您需要创建稍低级别的子图以使用gridspec。如果要复制隐藏共享轴(如subplots),则需要手动执行此操作,方法是使用Figure.add_subplotsharey参数并使用{{隐藏重复的刻度线1}}。

举个例子:

plt.setp(ax.get_yticklabels(), visible=False)

enter image description here

答案 1 :(得分:10)

Joe的选择给了我一些问题:前者与直接使用figure.tight_layout而不是figure.set_tight_layout()相关,后者则与一些后端相关( UserWarning:tight_layout :回到Agg渲染器)。但乔的回答肯定让我走向了另一个紧凑的选择。这是一个接近OP的问题的结果:

import matplotlib.pyplot as plt

fig, axes = plt.subplots(nrows=2, ncols=1, sharex='col', sharey=True,
                               gridspec_kw={'height_ratios': [2, 1]},
                               figsize=(4, 7))
fig.set_tight_layout({'rect': [0, 0, 1, 0.95], 'pad': 1.5, 'h_pad': 1.5})
plt.setp(axes, title='Test')
fig.suptitle('An overall title', size=20)

plt.show()

enter image description here