8000 plt.scatter crashes because overwrites the colors to an empty list · Issue #12664 · matplotlib/matplotlib · GitHub
[go: up one dir, main page]

Skip to content
plt.scatter crashes because overwrites the colors to an empty list #12664
Closed
@massich

Description

@massich

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:

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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0