xarray
xarray copied to clipboard
bug in DataArray.plot.pcolormesh
What happened?
The below code fails - I believe its because _infer_interval_breaks
is applied asymmetrically when one coord is string.
What did you expect to happen?
Success.
Minimal Complete Verifiable Example
from xarray import DataArray
x = DataArray(
[[1, 2, 3], [4, 5, 6]],
dims=("a", "b"),
coords={"a": [1, 2], "b": ["a", "b", "c"]},
)
x.plot(infer_intervals=False) # succeeds
x.plot() # TypeError: Dimensions of C (2, 3) are incompatible with X (3) and/or Y (3); see help(pcolormesh)
MVCE confirmation
- [X] Minimal example — the example is as focused as reasonably possible to demonstrate the underlying issue in xarray.
- [X] Complete example — the example is self-contained, including all data and the text of any traceback.
- [X] Verifiable example — the example copy & pastes into an IPython prompt or Binder notebook, returning the result.
- [X] New issue — a search of GitHub Issues suggests this is not a duplicate.
Relevant log output
No response
Anything else we need to know?
No response
Environment
version 2022.3.0
suggested patch:
@@ -1446,9 +1446,10 @@ def pcolormesh(x, y, z, ax, xscale=None, yscale=None, infer_intervals=None, **kw
else:
infer_intervals = True
+ either_string = np.issubdtype(x.dtype, str) or np.issubdtype(y.dtype, str)
if (
infer_intervals
- and not np.issubdtype(x.dtype, str)
+ and not either_string
and (
(np.shape(x)[0] == np.shape(z)[1])
or ((x.ndim > 1) and (np.shape(x)[1] == np.shape(z)[1]))
@@ -1463,7 +1464,7 @@ def pcolormesh(x, y, z, ax, xscale=None, yscale=None, infer_intervals=None, **kw
if (
infer_intervals
- and not np.issubdtype(y.dtype, str)
+ and not either_string
and (np.shape(y)[0] == np.shape(z)[0])
):
if len(y.shape) == 1:
Looks buggy indeed. But maybe either_string
needs to handle z
inputs as well?
Do you want to create a pull request?