-
-
Notifications
You must be signed in to change notification settings - Fork 7.9k
Closed
Labels
Description
Bug report
Bug summary
When doing scatter plot of nan
values it crashes because the list of colors gets overwriten to an empty list by this line:
matplotlib/lib/mpl_toolkits/mplot3d/axes3d.py
Line 2317 in c921e2e
xs, ys, zs, s, c = cbook.delete_masked_points(xs, ys, zs, s, c) |
Code for reproduction
We hit this bug in mne-tools/mne-python#5676, but here is a MWE. Most probably this is a duplicated of #12641. In which case, this can be used as a test.
import matplotlib.pyplot as plt
import numpy as np
n_points = 4
xs = ys = zs = np.full(n_points, np.nan)
colors = list(np.full(2, 'k'))
plt.scatter(xs, ys, zs, c=colors)
plt.show()
Expected outcome
(As in matplotlib 2.2.2) we would expect an empty plot with no error
In [25]: matplotlib.__version__
Out[25]: '2.2.2'
In [26]: %paste
import matplotlib.pyplot as plt
import numpy as np
n_points = 4
xs = ys = zs = np.full(n_points, np.nan)
colors = list(np.full(2, 'k'))
plt.scatter(xs, ys, zs, c=colors)
plt.show()
## -- End pasted text --
In [27]:
Actual outcome
It breaks because cannot iterate over c
In [9]: matplotlib.__version__
Out[9]: '3.0.1'
In [10]: %paste
import matplotlib.pyplot as plt
import numpy as np
n_points = 4
xs = ys = zs = np.full(n_points, np.nan)
colors = list(np.full(2, 'k'))
plt.scatter(xs, ys, zs, c=colors)
plt.show()
## -- End pasted text --
Traceback (most recent call last):
File "<ipython-input-10-f59e87d45c38>", line 7, in <module>
plt.scatter(xs, ys, zs, c=colors)
File "/home/sik/miniconda3/envs/mne/lib/python3.6/site-packages/matplotlib/pyplot.py", line 2864, in scatter
is not None else {}), **kwargs)
File "/home/sik/miniconda3/envs/mne/lib/python3.6/site-packages/matplotlib/__init__.py", line 1805, in inner
return func(ax, *args, **kwargs)
File "/home/sik/miniconda3/envs/mne/lib/python3.6/site-packages/matplotlib/axes/_axes.py", line 4234, in scatter
.format(nc=n_elem, xs=x.size, ys=y.size)
ValueError: 'c' argument has 2 elements, which is not acceptable for use with 'x' with size 4, 'y' with size 4.