图例中的matplotlib数字

3

我有几条线,并想展示一个图例。问题是,我不能使用不同的样式(--:-.)因为它们太少了,而且我也不能使用标记(+*等),因为我需要它们来显示一些点在这些线上。

所以,我想到的最好主意是使用数字。但我不知道如何创建带有数字的图例。我甚至可以自己在线附近画数字(以便将它们放置在最佳位置),但我该如何然后绘制带有数字的图例呢?

即,我想要的不是:

--  H
-.- Li

我希望有一个类似的东西:
1  H
2  Li

好的,有了四种线条样式、七种合理颜色和线宽,您可以创建许多组合...... 至少比任何单个图形上应该出现的最大绘图数量更多。 :-) - Steve Tjoa
哦,忘了说,这张图将会被打印在黑白纸上,所以我不能使用颜色 :) 不同的线宽度也不是一个好的解决方案,在我看来... - demalexx
那么,为什么不直接给曲线加标签呢? 在放置“1”,“2”等内容,然后再添加图例时似乎会让事情变得混乱... 为什么不在应放置“1”或“2”的位置上放置“H”或“Li”? 如果真的需要,不过按你想要的去做并不是太困难(最简单的方法就是自己制作图例),但在我看来这似乎不是个好主意... - Joe Kington
是的,这不是一个坏的暂时解决方案,我会尝试一下,谢谢!但是对于带有较长标签的图形可能不适用,如果我将它们放在线附近,看起来会很凌乱。你能分享一下如何将数字添加到图例框中吗? :) - demalexx
1个回答

3
也许可以加入一些Latex呢?
#In which we make a legend; not with lines, but numbers!

import pylab as pl
pl.rc('text', usetex=True)

pl.figure(1)
pl.clf()
ax = pl.subplot(111)
pl.plot(range(0,10), 'k', label = r'\makebox[25]{1\hfill}Bla')
pl.plot(range(1,11), 'k', label = r'\makebox[25]{12\hfill}Bla12')
lgd = pl.legend(handlelength = -0.4)
for k in lgd.get_lines():
k.set_linewidth(0)
pl.draw()
pl.show()

数字/标签是通过使用具有特定宽度的\makebox和\hfill对齐的,以利用标签未使用的空间。数字不是自动的,但如果您使用循环绘制线条,则可以添加计数器来跟踪数字。
不知道这是否符合您的要求,但通过将线条的线宽设置为0并使图例中保留的空间为负值来删除它们。我找不到更好的方法来做到这一点,因为我认为传说总是应该显示一条线(例如,您无法将numpoints设置为0)。
当然,您也可以在绘图的正确位置添加一些文本,而根本不使用图例。

谢谢!它可以工作,但我有一些问题。有时我的MiKTeX会崩溃,我需要注释掉pl.rc('text', usetex=True),然后运行文件,再取消注释,再次运行-然后它就可以工作了。我没有进一步调查 :) 另外,俄文字母不起作用。但总的来说,这是一个可行的解决方案,非常感谢! - demalexx

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