Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bug in DataArray.plot.pcolormesh #6775

Closed
4 tasks done
hjalmarlucius opened this issue Jul 12, 2022 · 2 comments · Fixed by #7612
Closed
4 tasks done

bug in DataArray.plot.pcolormesh #6775

hjalmarlucius opened this issue Jul 12, 2022 · 2 comments · Fixed by #7612

Comments

@hjalmarlucius
Copy link

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

  • Minimal example — the example is as focused as reasonably possible to demonstrate the underlying issue in xarray.
  • Complete example — the example is self-contained, including all data and the text of any traceback.
  • Verifiable example — the example copy & pastes into an IPython prompt or Binder notebook, returning the result.
  • 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
@hjalmarlucius hjalmarlucius added bug needs triage Issue that has not been reviewed by xarray team member labels Jul 12, 2022
@hjalmarlucius
Copy link
Author

hjalmarlucius commented Jul 12, 2022

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:

@Illviljan
Copy link
Contributor

Looks buggy indeed. But maybe either_string needs to handle z inputs as well?
Do you want to create a pull request?

@andersy005 andersy005 added topic-plotting and removed needs triage Issue that has not been reviewed by xarray team member labels Jul 12, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants