You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Duplicate legend labels with different colors can often result in an error. #10053
If one makes a scatter plot (or a line graph) having multiple points with different markers and colors, but the same label, this will result in an error in version 2.1.1 (but not 2.1.0). A small example is provided below:
This example uses a scatter plot, but the same issue can arise with line plots if one uses a numpy vector as a color (e.g., [0.0, 1.0, 0.0, 1.0]). The error produced for the above example is as follows:
Traceback (most recent call last):
File "foo.py", line 11, in <module>
plt.legend()
File "/home/ryan/.local/lib/python2.7/site-packages/matplotlib/pyplot.py", line 3748, in legend
ret = gca().legend(*args, **kwargs)
File "/home/ryan/.local/lib/python2.7/site-packages/matplotlib/axes/_axes.py", line 498, in legend
**kwargs)
File "/home/ryan/.local/lib/python2.7/site-packages/matplotlib/legend.py", line 1402, in _parse_legend_args
handles, labels = _get_legend_handles_labels(axs, handlers)
File "/home/ryan/.local/lib/python2.7/site-packages/matplotlib/legend.py", line 1360, in _get_legend_handles_labels
and not _in_handles(handle, label)):
File "/home/ryan/.local/lib/python2.7/site-packages/matplotlib/legend.py", line 1344, in _in_handles
if f_h.get_facecolor() != h.get_facecolor():
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
At the end of the day, this ends up being because the face (and edge) colors are converted to a numpy vector, which can't be compared with != since they have multiple elements. With the help of git bisect, I've tracked this down to this commit at the end of October.
Now I'll grant that this only happens if people use the same label for multiple symbols/lines, which is a bad idea...but one can't always prevent end users from doing that.
Activity
dpryan79 commentedon Dec 20, 2017
I suspect that #10031 is related.
jklymak commentedon Dec 20, 2017
Definitely #10031 Thanks a lot for a reproducible example, however, which has eluded us.
This is kind of strange because the same code works fine for
ax.plot.dpryan79 commentedon Dec 21, 2017
If it's helpful, here's another example (this time using
plot()):jklymak commentedon Dec 21, 2017
Fixed by #10064. Thanks a lot for the bug report!