Matplotlib 图例指南基本示例

5
我正在尝试更好地使用legend(),尤其是如何使用代理艺术家。我发现Legend guide严重缺失。这篇文章与这个问题有些相似。
我在Windows 7上使用Python 2.7.5和Matplotlib版本1.2.1编写了下面的代码,并结合了传奇指南中的示例:
import matplotlib.patches as mpatches
import matplotlib.lines as mlines
import matplotlib.pyplot as plt

line_up, = plt.plot([1,2,3], label='Line 2')
line_down, = plt.plot([3,2,1], label='Line 1')

blue_line = mlines.Line2D([], [], color='blue', marker='*',
                      markersize=15, label='Blue stars')
red_patch = mpatches.Patch(color='red', label='The red data')
plt.legend([red_patch,blue_line])

plt.show()

http://i.stack.imgur.com/E9jkA.jpg

图例标签的颜色不是指定在句柄中的颜色,也不是有星号的补丁和线。我尝试过删除和添加线条,在线条后添加和删除逗号等。有没有更好的参考资料可以使用legend()?使用代理艺术家的其他提示?我不明白为什么示例会给我完全不同的结果...

2个回答

4

传说指南 已经重写,以便与 matplotlib 版本 1.4.0 或更高版本兼容。您的 matplotlib 版本(1.2.1)已经过去两年以上了。如果使用这么老的版本,文档中显示的所有内容都无法正常工作,这一点不要感到惊讶。

如果您升级版本,那么使用

plt.legend(handles=[red_patch,blue_line])

图例指南 所示,而不是


plt.legend([red_patch,blue_line])

产生

enter image description here


当我这样做时,我会收到以下错误:“TypeError: init() got multiple values for keyword argument 'handles'”,并且没有图像。我按照上面链接的帖子中的说明进行操作。 - Eric

1

我仍在使用matplotlib 1.2.1,所以我告诉你我使用的方法。我发现如果我将线对象传递给legend(),我还必须单独传递标签。[这也符合matplotlib关于legend()的文档说明]。我稍微修改了您的示例以实现此目的,看起来可以工作:

import matplotlib.patches as mpatches
import matplotlib.lines as mlines
import matplotlib.pyplot as plt

line_up, = plt.plot([1,2,3], label='Line 2')
line_down, = plt.plot([3,2,1], label='Line 1')

blue_line = mlines.Line2D([], [], color='blue', marker='*',
                  markersize=15, label='Blue stars')
red_patch = mpatches.Patch(color='red', label='The red data')

lines = [blue_line, red_patch]
labels = [line.get_label() for line in lines]
plt.legend(lines, labels)

plt.show()

code output


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