【问题标题】:Generating custom legend (and only a legend) in matplotlib Python2在matplotlib Python2中生成自定义图例(并且只有一个图例)
【发布时间】:2015-12-03 08:56:09
【问题描述】:

我正在尝试使用 matplotlib 制作自定义图例。 example in the matplotlib documentation 不适用于我的设置。这也不是。

from matplotlib import pyplot as plt
import matplotlib.patches as mpatches

fig, ax = plt.subplots()

patch1 = mpatches.Patch(color='#a6cee3', label='Blue')
patch2 = mpatches.Patch(color='#1f78b4', label='Bluerish')
patch3 = mpatches.Patch(color='#33a02c', label='Greener')
patch4 = mpatches.Patch(color='#fdbf6f', label='Kind of orange')
patch5 = mpatches.Patch(color='#ff7f00', label='Orange')

all_handles = (patch1, patch2, patch3, patch4, patch5)

leg = ax.legend(all_handles)

ax.add_artist(leg)
plt.show()

我怎样才能使它产生所需的图例?

我使用的是 Mac OSX 10.10.3、Python 2.7.6、Matplotlib 1.3.1。

编辑:@xnx 下面的解决方案适用于 Python 3,如果使用 Matplotlib 2.1.1,则适用于 Python 2.7.11(感谢@DavidG)。

【问题讨论】:

  • 您是否尝试过使用较新版本的 matplotlib?下面的解决方案适用于我在 Python 2.7、matplotlib 2.1.1 上(虽然我在 windows 上......)
  • 这行得通,我接受了下面的答案。好电话@DavidG - 感谢您的帮助。

标签: macos python-2.7 matplotlib


【解决方案1】:

我遇到了类似的问题。 这为我解决了这个问题:

leg = **plt**.legend(all_handles)

【讨论】:

    【解决方案2】:

    您应该将handles 参数显式设置为ax.legend

    leg = ax.legend(handles=all_handles)
    

    我认为您的代码的问题在于 legend 的第一个(位置)参数否则会被视为您希望标记的对象序列,而您没有任何对象。

    【讨论】:

    • 这给了我AttributeError: 'NoneType' object has no attribute 'set_axes'
    • 我没有收到任何错误,但这对我来说仍然不起作用,之后没有调用plt.draw。 @P-robot,这个错误在哪个函数中?
    • 来自ax.legend(),错误调用跟踪ax.add_artist(leg),这在以下行(1454)a.set_axes(self) 中给出了来自/Library/Python/2.7/site-packages/matplotlib-override/matplotlib/axes.pyc in add_artist(self, a) 的错误。这有帮助吗?
    • 我使用的是 IPython 3.1.0。如果这有所作为。我刚刚更新到 IPython 4.0.0,它仍然给出了同样的错误。
    • 我已经更新了 python、numpy、scipy、matplotlib、sympy、nose,但问题仍然存在,并出现同样的错误。
    猜你喜欢
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 2015-06-20
    • 2022-01-09
    • 1970-01-01
    相关资源
    最近更新 更多