matplotlib图例标记和文本不对齐。

3

在我的图例中添加下标时,我遇到了问题。如果我不在图例文本中使用下标,则一切看起来都很好,手柄和文本对齐,但是使用下标后,文本的字体会改变,并且还会卡在图例框的顶部。这是我设置图例的方法:

        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。


你能插入一张截图展示你得到的结果和它与你期望的有何不同吗?因为在我这里看起来一切都很正常。 - Andrey Sobolev
问者希望两个标签的基线相同(即主文本所在的“线”),而目前下标导致该标签的基线向上移动。 - maxymoo
然后一切都对我起作用了,参见http://imgur.com/AxmLv8Y - Andrey Sobolev
安德烈,我看到了你的图片,它看起来完美无缺。所以,我保存了我的图片(显示图例文本未对齐),并重新打开。令人惊讶的是,它不会显示图例文本粘在屋顶上 :/。现在我的问题是为什么下标部分的字体与图例的其余部分不同? - user1792899
截至2023年2月,我认为你所拥有的MWE实际上可以对齐文本和符号。 - zyy
1个回答

0
字体的差异来自数学模式:用美元符号将文本括起来告诉 matplotlib 用 LaTeX 预处理文本,而 LaTeX 数学字体(计算机现代字体)与 Liberation Sans (或 matplotlib 用于普通文本的任何字体)不同。最简单的绕过这个误解的方法是仅在下标处使用数学模式:
plot([1,2,3], label="test$_1$")

那么数学字体只会用于指标:

enter image description here


但是,在我的情况下,我需要给一个字母加下标。如果你把 plot([1,2,3], label="$test_1$") 替换成 plot([1,2,3], label="$test_r$") 并且字体大小为18,'r' 看起来比其它图例文本要小,这不是我想要的。 - user1792899
1
那么您可能想将 mathtext.default 设置为 regular(参考此问题:https://dev59.com/2H3aa4cB1Zd3GeqPjOFp) - Andrey Sobolev
我遇到了评论中解释的同样问题,解决方案是提供的链接的第二个答案(即非被接受的答案,而是mgab提供的答案)。 - GRquanti

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