typeerror in basic example for legend handles in m

2020-04-08 13:55发布

I have difficulties to understand the legend handling. The more, the basic example from the official matplotlib legend guide

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')
plt.legend(handles=[line_up, line_down])

fails with TypeError: __init__() got multiple values for keyword argument 'handles'.

What am I doing wrong? Any ideas?

My matplotlib version is 1.3.1. I am on Ubuntu 14.04..

Here is the full traceback (with the above lines in the python script)

heiland@note121:bauHS15_iomapsgenpod$ python testleg.py 
Traceback (most recent call last):
  File "testleg.py", line 4, in <module>
    plt.legend(handles=[line_up, line_down])
  File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 3381, in legend
    ret = gca().legend(*args, **kwargs)
  File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 4778, in legend
    self.legend_ = mlegend.Legend(self, handles, labels, **kwargs)
TypeError: __init__() got multiple values for keyword argument 'handles'

3条回答
够拽才男人
2楼-- · 2020-04-08 14:35

I had the same error some while back, but the fixes suggested above didn't work for me. I updated my version of matplotlib as well, but this didn't help.

What did work was removing the handles argument and which plots to label altogether in the legend() method; like this:

    plot1 = plt.plot([1,2,3], 'b', label = 'first plot')
    plot2 = plt.plot([3,2,1], 'r', label = 'second plot')
    plt.legend()
    plt.show()

Which rendered nicely to this: enter image description here

查看更多
贪生不怕死
3楼-- · 2020-04-08 14:40

Just remove handles keyword

Use it like that:

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')
plt.legend([line_up, line_down])
查看更多
放我归山
4楼-- · 2020-04-08 14:47

I was having the same issue as Jan, running Matplotlib 1.3.1 on Ubuntu 14.04. I tried the answer posted by Kobi K. His code did not raise any errors. However, the legend did not render correctly: Bad legend via Matplotlib 1.3.1 I upgraded to Matplotlib 1.5.1, and can now render the legend correctly using the code posted by Jan, which includes the 'handles' keyword (i.e. the code that appears in the Matplotlib legend guide): Bad legend via matplotlib 1.5.1

查看更多
登录 后发表回答