Matplotlib Legend Guide 基本示例

Eri*_*ric 5 python matplotlib

我试图了解如何更好地使用图例(),特别是如何使用代理艺术家。我发现传奇指南严重缺乏。这篇文章有点类似于这个

我在 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()
Run Code Online (Sandbox Code Playgroud)

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

图例标签颜色不是在手柄中指定的颜色,也不是补丁和带有星形的线。我试过删除和添加行,在行后添加和删除逗号等。它们是否有更好的使用 Legend() 的参考?使用代理艺术家的任何其他提示?我不明白为什么这些例子给了我完全不同的结果......

tur*_*erm 1

我仍在使用 matplotlib 1.2.1,所以我会告诉你什么对我有用。我发现如果我将线条对象传递给 legend(),我还必须单独传递标签。[这也与有关 legend() 的 matplotlib 文档一致]。我稍微修改了你的例子来做到这一点,它似乎有效:

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()
Run Code Online (Sandbox Code Playgroud)

代码输出