Closed
Description
Bug summary
There is a test in astropy
that started breaking when using matplotlib + numpy 1.24.0.dev0+896.g5ecaf36cd . Same error using stable matplotlib and matplotlib from the nightly wheel.
The actual test is at https://github.com/astropy/astropy/blob/75f9b60b5521ed8dae08611ddf766c95ce421801/astropy/visualization/tests/test_units.py#L24 but I will give reproducible example without astropy below.
Example log with the astropy failure: https://github.com/astropy/astropy/actions/runs/3198205490/jobs/5222440278
Code for reproduction
import matplotlib
import matplotlib.pyplot as plt
matplotlib.use('agg')
plt.figure()
plt.plot([1, 2, 3], [3, 4, 5], label='label')
plt.plot([1.05, 2.10, 3.15], [3.050, 3.025, 3.010])
plt.fill_between([1, 3], [3, 5], [3.050, 3.010]) # IndexError
Actual outcome
File .../matplotlib/pyplot.py:2514, in fill_between(x, y1, y2, where, interpolate, step, data, **kwargs)
2510 @_copy_docstring_and_deprecators(Axes.fill_between)
2511 def fill_between(
2512 x, y1, y2=0, where=None, interpolate=False, step=None, *,
2513 data=None, **kwargs):
-> 2514 return gca().fill_between(
2515 x, y1, y2=y2, where=where, interpolate=interpolate, step=step,
2516 **({"data": data} if data is not None else {}), **kwargs)
File .../matplotlib/__init__.py:1423, in _preprocess_data.<locals>.inner(ax, data, *args, **kwargs)
1420 @functools.wraps(func)
1421 def inner(ax, *args, data=None, **kwargs):
1422 if data is None:
-> 1423 return func(ax, *map(sanitize_sequence, args), **kwargs)
1425 bound = new_sig.bind(ax, *args, **kwargs)
1426 auto_label = (bound.arguments.get(label_namer)
1427 or bound.kwargs.get(label_namer))
File .../matplotlib/axes/_axes.py:5335, in Axes.fill_between(self, x, y1, y2, where, interpolate, step, **kwargs)
5333 def fill_between(self, x, y1, y2=0, where=None, interpolate=False,
5334 step=None, **kwargs):
-> 5335 return self._fill_between_x_or_y(
5336 "x", x, y1, y2,
5337 where=where, interpolate=interpolate, step=step, **kwargs)
File .../matplotlib/axes/_axes.py:5263, in Axes._fill_between_x_or_y(self, ind_dir, ind, dep1, dep2, where, interpolate, step, **kwargs)
5259 ind, dep1, dep2 = np.broadcast_arrays(
5260 np.atleast_1d(ind), dep1, dep2, subok=True)
5262 polys = []
-> 5263 for idx0, idx1 in cbook.contiguous_regions(where):
5264 indslice = ind[idx0:idx1]
5265 dep1slice = dep1[idx0:idx1]
File .../matplotlib/cbook/__init__.py:1333, in contiguous_regions(mask)
1330 return []
1332 # Find the indices of region changes, and correct offset
-> 1333 idx, = np.nonzero(mask[:-1] != mask[1:])
1334 idx += 1
1336 # List operations are faster for moderately sized arrays
IndexError: too many indices for array: array is 0-dimensional, but 1 were indexed
Expected outcome
No error.
Additional information
Only with numpy 1.24.0.dev0+896.g5ecaf36cd but not with stable numpy.
Operating system
Debian or Ubuntu
Matplotlib Version
stable or nightly
Matplotlib Backend
agg
Python version
3.10 and 3.11
Jupyter version
N/A
Installation
pip
Metadata
Metadata
Assignees
Labels
No labels