代码之家  ›  专栏  ›  技术社区  ›  Tom Hale

Matplotlib:防止子批次标题比子批次宽

  •  1
  • Tom Hale  · 技术社区  · 6 年前

    我正在创建一个图像网格 plt.subplots .

    如何确保一个子块的标题不超出其下图像的宽度?

    换句话说,是否有一种方法可以设置子地块标题的最大大小,从而使其不可能与相邻标题重叠?

    如果标题扩展到下面的图像之外,我想减小它的字体大小,这样它就不会。

    0 回复  |  直到 6 年前
        1
  •  2
  •   ImportanceOfBeingErnest    6 年前

    可以反复更改字体大小,直到标题宽度小于轴。我想不让标题小于1pt是有意义的(即使它不再可读,所以请随意选择一个不同的数字)。下面以1pt的fontsize步骤迭代;也可以对此进行调整。

    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