Matplotlib:防止子图标题比子图更宽

3

我正在使用 plt.subplots 创建图像网格。

如何确保一个子图的标题不会超过其下面的图像的宽度?

换句话说,是否有一种方法可以设置子图标题的最大尺寸,以便没有可能与相邻标题重叠?

如果标题将延伸到下面的图像之外,则要减小其字体大小以避免重叠。


1
如果标题超过宽度,您希望发生什么?截断它?更改其字体大小?还是删除它? - ImportanceOfBeingErnest
@ImportanceOfBeingErnest - 编辑以澄清。 - Tom Hale
1个回答

5

您可以通过迭代更改字体大小,直到标题宽度小于轴的宽度。我想不让标题变得比1pt更小是有意义的(即使这已经无法阅读了,所以可以选择其他数字)。以下代码在1pt的字体大小步长中进行迭代;也可以根据需要进行调整。

import matplotlib.pyplot as plt


fig, (ax1, ax2) = plt.subplots(ncols=2)
ax1.plot([1,2])
ax1.set_title("Short title")
ax2.plot([2,1])
ax2.set_title("Loooooong title, which exceeds plot axes width.")


def adjust_title(ax):
    title = ax.title
    ax.figure.canvas.draw()
    def _get_t():
        ax_width = ax.get_window_extent().width
        ti_width = title.get_window_extent().width
        return ax_width/ti_width

    while _get_t() <= 1 and title.get_fontsize() > 1:        
        title.set_fontsize(title.get_fontsize()-1)



adjust_title(ax1)
adjust_title(ax2)

plt.show()

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接