Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork7.9k
Description
Bug report
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:
Code for reproduction
#!/usr/bin/env pythonimport matplotlib as mplmpl.use('Agg')import matplotlib.pyplot as pltcolor='#00ff00ff'plt.scatter(0.0, 1.0, color=color, marker='o', label='test')color='#00ffaaff'plt.scatter(0.5, 0.0, color=color, marker='v', label='test')plt.legend()plt.savefig('foo.png')
Actual outcome
This example uses a scatter plot, but the same issuecan 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 ofgit bisect
, I've tracked this down tothis 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.