【问题标题】:matplotlib Legend sign and text are not alignedmatplotlib 图例符号和文本未对齐
【发布时间】:2015-11-23 15:07:19
【问题描述】:

我在图表的图例中添加下标时遇到了这个问题。如果我不在图例文本中使用下标,一切看起来都很好,句柄和文本对齐,但是使用下标,文本的字体会发生变化,而且它会卡在图例框的顶部。这就是我设置图例的方式

        ax.legend(loc='upper center', bbox_to_anchor=(0.5, 1.12),
             ncol=4,prop={'size':16})

传说是

        legend_labels=['BR:$K_r$=5%',"BR:$K_r$=10%","Tape:$K_r$=5%","Tape:$K_r$=20%","HDD:$K_r$=5%","HDD:$K_r$=20%","SSD:$K_r$=5%","SSD:$K_r$=20%"]

我还看到了有关 stackoverflow 上的文本和图例对齐的多个问题,但建议的解决方案对我不起作用。我尝试从图例中获取文本并将对齐设置为“中心”,但无济于事。

这是最小的工作示例。

    from matplotlib.pyplot import *

    subplot(211)
    plot([1,2,3], label="$test_1$")
    plot([3,2,1], label="test2")
    legend(bbox_to_anchor=(0., 1.02, 1., .102), loc=3,
           ncol=2, mode="expand", borderaxespad=0.,prop={'size':18})
    show()

我使用的是 python 2.7.6。

【问题讨论】:

  • 你能插入一张截图,说明你得到了什么以及它与你的期望有何不同?因为在我看来一切都很好。
  • 提问者希望两个标签的基线相同(即正文所在的“行”),而当前下标导致该标签的基线向上移动
  • 那么一切都对我有用,请参阅imgur.com/AxmLv8Y
  • 安德烈,我看到了你的照片,看起来很完美。所以,我保存了我的图像(显示未对齐的图例文本)并重新打开。令人惊讶的是,它没有显示贴在屋顶上的图例文本:/。现在我的问题是为什么下标部分的字体与图例的其余部分不同?

标签: python matplotlib


【解决方案1】:

字体的区别来自数学模式:用美元符号包围文本告诉 matplotlib 用 LaTeX 预处理文本,而 LaTeX 数学字体(Computer Modern)不同于 Liberation Sans(或 matplotlib 用于纯文本的任何字体) .避免这种误解的最简单方法是使用数学模式仅用于索引

plot([1,2,3], label="test$_1$")

那么数学字体将仅用于索引:

【讨论】:

  • 但是,就我而言,我需要下标一个字母。如果将 plot([1,2,3], label="$test_1$") 替换为 plot([1,2,3], label="$test_r$") 字体大小为 18,'r' 看起来真的与我不想要的图例文本的其余部分相比,它很小。
  • 那么您可能想将mathtext.default 设置为regular(根据这个问题:stackoverflow.com/questions/22569071/…
  • 我在评论中解释了同样的问题,解决方案是提供的链接的第二个答案(即不是接受的答案,而是 mgab 的答案)
猜你喜欢
  • 1970-01-01
  • 2017-10-05
  • 1970-01-01
  • 2014-05-26
  • 2013-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-03
相关资源
最近更新 更多