多个matplotlib gridspec';s在一个图形中,但每个图形都有自己的通用名称

多个matplotlib gridspec';s在一个图形中,但每个图形都有自己的通用名称,matplotlib,title,figure,suptitle,Matplotlib,Title,Figure,Suptitle,我知道我可以使用update来调整matplotlib图形中GridSpec实例的参数,允许在单个图形中排列多个GridSpec。与此示例中取自matplotlib文档的内容类似 gs1 = gridspec.GridSpec(3, 3) gs1.update(left=0.05, right=0.48, wspace=0.05) ax1 = plt.subplot(gs1[:-1, :]) ax2 = plt.subplot(gs1[-1, :-1]) ax3 = plt.subplot(gs

我知道我可以使用
update
来调整matplotlib图形中
GridSpec
实例的参数,允许在单个图形中排列多个GridSpec。与此示例中取自matplotlib文档的内容类似

gs1 = gridspec.GridSpec(3, 3)
gs1.update(left=0.05, right=0.48, wspace=0.05)
ax1 = plt.subplot(gs1[:-1, :])
ax2 = plt.subplot(gs1[-1, :-1])
ax3 = plt.subplot(gs1[-1, -1])

gs2 = gridspec.GridSpec(3, 3)
gs2.update(left=0.55, right=0.98, hspace=0.05)
ax4 = plt.subplot(gs2[:, :-1])
ax5 = plt.subplot(gs2[:-1, -1])
ax6 = plt.subplot(gs2[-1, -1])

但是我怎样才能给
gs1
gs2
他们自己的共同标题呢?使用
suptitle
我一次只能得到整个图形的通用标题。

我可以想出四种方法,都很难看。我不知道是否有任何自动设置这些东西的方法

四种丑陋的方式是:

1) 使用
ax将标题设置为每组中的“顶部”轴对象。Set_title()
(在您的示例中是
ax1
ax4
)。它对左派很有效,但对右派很可怕

2) 使用
fig.suptitle
设置一个标题,但在标题内留出大量空格,并使用
horizontalalignment='center'

3) 为每个标题手动设置文本对象。。。(下面的示例中没有,但请看)

4) 创建鬼魂轴,隐藏它们上的所有内容,并使用它们设置它们的标题

下面是一些示例代码

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

fig = plt.figure()
gs1 = gridspec.GridSpec(3, 3)
gs1.update(left=0.05, right=0.48, wspace=0.05)
ax1 = fig.add_subplot(gs1[:-1, :])
ax2 = fig.add_subplot(gs1[-1, :-1])
ax3 = fig.add_subplot(gs1[-1, -1])
ax1.set_title('Left group title')  # Alternative 1)

gs2 = gridspec.GridSpec(3, 3)
gs2.update(left=0.55, right=0.98, hspace=0.05)
ax4 = fig.add_subplot(gs2[:, :-1])
ax5 = fig.add_subplot(gs2[:-1, -1])
ax6 = fig.add_subplot(gs2[-1, -1])
ax4.set_title('Right group title')  # Alternative 1)
# Alternative 2. Note the many white-spaces
fig.suptitle('figure title left                                                   figure title right', horizontalalignment='center')

# Alternative 4)
rect_left = 0, 0, 0.5, 0.8  # lower, left, width, height (I use a lower height than 1.0, to place the title more visible)
rect_right = 0.5, 0, 0.5, 0.8
ax_left = fig.add_axes(rect_left)
ax_right = fig.add_axes(rect_right)
ax_left.set_xticks([])
ax_left.set_yticks([])
ax_left.spines['right'].set_visible(False)
ax_left.spines['top'].set_visible(False)
ax_left.spines['bottom'].set_visible(False)
ax_left.spines['left'].set_visible(False)
ax_left.set_axis_bgcolor('none')
ax_right.set_xticks([])
ax_right.set_yticks([])
ax_right.spines['right'].set_visible(False)
ax_right.spines['top'].set_visible(False)
ax_right.spines['bottom'].set_visible(False)
ax_right.spines['left'].set_visible(False)
ax_right.set_axis_bgcolor('none')
ax_left.set_title('Ghost left title')
ax_right.set_title('Ghost right title')

plt.show()

谢谢你的想法。我最喜欢鬼解决方案。尽管如此,如果
GridSpec
实例实际上具有某种“子图形”的属性,允许为每个
GridSpec
实例设置
suptitle
,这也是合乎逻辑的。你不同意吗?我不知道它是否已经存在。然而,把这样一件事情做得如此笼统似乎非常棘手,我怀疑这是否已经做到了。对于这样的应用程序,我最好的建议是手动操作,正如我所展示的:)看起来备选方案2还不完整