带有子图的多个标题(副标题)

Posted

技术标签:

【中文标题】带有子图的多个标题(副标题)【英文标题】:Multiple titles (suptitle) with subplots 【发布时间】:2016-08-04 18:46:18 【问题描述】:

我在 3x3 网格中有一系列 9 个子图,每个子图都有一个标题。 我想为每一行添加一个标题。为此,我考虑过使用字幕。 问题是如果我使用 3 个字幕,它们似乎会被覆盖,并且似乎只显示最后一个。

这是我的基本代码:

fig, axes = plt.subplots(3,3,sharex='col', sharey='row')

for j in range(9):
    axes.flat[j].set_title('plot '+str(j))

plt1 = fig.suptitle("row 1",x=0.6,y=1.8,fontsize=18)
plt2 = fig.suptitle("row 2",x=0.6,y=1.2,fontsize=18)
plt3 = fig.suptitle("row 3",x=0.6,y=0.7,fontsize=18)
fig.subplots_adjust(right=1.1,top=1.6)

【问题讨论】:

为什么不只使用轴 1、4、7 的 set_title (j%3 == 1) 并清除其余部分? 因为我仍然需要每个子图的标题,以及行的标题 每个图只能有一个suptitle。我建议使用 text 对象作为行标题 我想我必须接受这个 【参考方案1】:

您可以修改标题和标签。检查以下改编自您的代码的示例:

import matplotlib.pyplot as plt

fig, axes = plt.subplots(3,3,sharex='col', sharey='row')

counter = 0
for j in range(9):
    if j in [0,3,6]:
        axes.flat[j].set_ylabel('Row '+str(counter), rotation=0, size='large',labelpad=40)
        axes.flat[j].set_title('plot '+str(j))
        counter = counter + 1
    if j in [0,1,2]:
        axes.flat[j].set_title('Column '+str(j)+'\n\nplot '+str(j))
    else:
        axes.flat[j].set_title('plot '+str(j))

plt.show()

,结果为:

【讨论】:

这是一个很好的解决方案,虽然我的标题长度不太可行 @Alessandro 您可以管理标签的字体大小以更好地存储内容。这种方法的最大问题是,如果您想为列和标题提供不同的格式。 不幸的是,我的子图没有 ylabel。我发布了similar question here 以寻求另一种解决方法。

以上是关于带有子图的多个标题(副标题)的主要内容,如果未能解决你的问题,请参考以下文章

使用 windrose 轴控制多个子图的图例

MacOS 音频:使用子图的 AUGraph API 的多个输出?

多个子图的GridSpec“正在清除包含传递轴的图形”

绘图PythonPython数据分析matplotlib设置多个子图的间距以及设置总图的标题

python+matplotlib绘制具有多个子图的图表

python+matplotlib绘制具有多个子图的图表