在 matplotlib 中,除了为整个图设置标题和为每个单独图设置标题之外,是否可以为每一行子图设置单独的标题?这将对应于下图中的橙色文本。
如果没有,您将如何解决这个问题?在左侧创建一个单独的空子图列并用橙色文本填充它们?
我知道可以使用 text()
或 annotate()
手动定位每个标题,但这通常需要大量调整,而且我有很多子图。有更流畅的解决方案吗?
原文由 joelostblom 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 matplotlib 中,除了为整个图设置标题和为每个单独图设置标题之外,是否可以为每一行子图设置单独的标题?这将对应于下图中的橙色文本。
如果没有,您将如何解决这个问题?在左侧创建一个单独的空子图列并用橙色文本填充它们?
我知道可以使用 text()
或 annotate()
手动定位每个标题,但这通常需要大量调整,而且我有很多子图。有更流畅的解决方案吗?
原文由 joelostblom 发布,翻译遵循 CC BY-SA 4.0 许可协议
一个想法是创建三个“大子图”,给每个子图一个标题,并使它们不可见。最重要的是,您可以创建较小的子图矩阵。
这个解决方案完全基于 这篇文章,除了更加注意实际删除背景子图。
import matplotlib.pyplot as plt
fig, big_axes = plt.subplots( figsize=(15.0, 15.0) , nrows=3, ncols=1, sharey=True)
for row, big_ax in enumerate(big_axes, start=1):
big_ax.set_title("Subplot row %s \n" % row, fontsize=16)
# Turn off axis lines and ticks of the big subplot
# obs alpha is 0 in RGBA string!
big_ax.tick_params(labelcolor=(1.,1.,1., 0.0), top='off', bottom='off', left='off', right='off')
# removes the white frame
big_ax._frameon = False
for i in range(1,10):
ax = fig.add_subplot(3,3,i)
ax.set_title('Plot title ' + str(i))
fig.set_facecolor('w')
plt.tight_layout()
plt.show()
原文由 snake_charmer 发布,翻译遵循 CC BY-SA 3.0 许可协议
1 回答9.5k 阅读✓ 已解决
2 回答5.1k 阅读✓ 已解决
2 回答3.5k 阅读✓ 已解决
3 回答4.4k 阅读
2 回答2.4k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
matplotlib 3.4.0 中的新功能
行标题现在可以实现为 子图字幕:
如何重现 OP 的参考图:
Figure.subfigures
(最直接)Create 3x1
fig.subfigures
where eachsubfig
gets its own 1x3subfig.subplots
andsubfig.suptitle
:Figure.add_subfigure
(到现有的subplots
)如果你已经有 3x1
plt.subplots
,那么add_subfigure
进入底层gridspec
。同样,每个subfig
将获得自己的 1x3subfig.subplots
和subfig.suptitle
:任一示例的输出(经过一些样式设置后):