【问题标题】:Center multi-line legend title居中多行图例标题
【发布时间】:2020-10-29 09:16:01
【问题描述】:

我想完全将我的多行图例标题居中。

当标题跨越一行时,它是居中的。当它跨越多条线时,似乎最长的线居中,然后所有其他线都相对于最长的线左对齐。

我查看了matplotlib.font_manager.FontProperties 类,在该类中我看到我可以将标题加粗,但似乎没有任何居中选项。感谢任何建议!

fig, ax = plt.subplots()
ax.plot([0, 1, 2, 3], [4, 1, 2, 5], label='Very Long label A')
ax.plot([0, 1, 2, 3], [3, 5, 4, 1], label='Very Long label B')

leg = ax.legend()
leg.set_title('Legendary\nTitle', prop={'size': 12, 'weight':'bold'})

【问题讨论】:

    标签: python matplotlib legend


    【解决方案1】:

    使用TeX 的替代方法是设置图例标题的multialignment 参数。我没有看到在创建它时设置它的方法,但由于它只是一个 matplotlib Text 对象,我们可以在使用 .set_multialignment() 函数设置标题后这样做,如下所示:

    leg = ax.legend()
    leg.set_title('Legendary\nTitle', prop={'size': 12, 'weight':'bold'})
    leg.get_title().set_multialignment('center')
    

    【讨论】:

      【解决方案2】:

      我的首选解决方案是使用 matplotlib 的 Tex 功能。您可以找到教程和要求here。 使用下面的代码,图例标题将居中。

      当然,现在您可以充分利用 Tex 格式,而不必回退到字体属性。我把它包括在内是为了演示你可以混合它。

      fig, ax = plt.subplots()
      plt.rcParams['text.usetex'] = True
      ax.plot([0, 1, 2, 3], [4, 1, 2, 5], label='Very Long label A')
      ax.plot([0, 1, 2, 3], [3, 5, 4, 1], label='Very Long label B')
      
      leg = ax.legend()
      leg.set_title(r'\begin{center} Legendary \\ Title \end{center}', prop={'size': 12, 'weight':'bold'})
      

      【讨论】:

      • 感谢您的回答以及将我指向 Tex!这确实开辟了许多可能性。我稍后会检查它是否有效,如果有效,我会标记为已接受。
      • 再次感谢您的回答!但是,我决定将@tmdavison 的答案标记为已接受,因为它更干净,并且可能对更多人有用,因为 text.usetex 确实有一些外部依赖项,并非每个人都可以轻松实现
      猜你喜欢
      • 2012-08-10
      • 1970-01-01
      • 1970-01-01
      • 2018-02-27
      • 2013-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-13
      相关资源
      最近更新 更多