5
5
import warnings
6
6
from datetime import datetime
7
7
from inspect import getfullargspec
8
- from typing import Any , Iterable , Mapping , Sequence
8
+ from typing import TYPE_CHECKING , Any , Hashable , Iterable , Mapping , Sequence
9
9
10
10
import numpy as np
11
11
import pandas as pd
28
28
except ImportError :
29
29
cftime = None
30
30
31
+
32
+ if TYPE_CHECKING :
33
+ from ..core .dataarray import DataArray
34
+
35
+
31
36
ROBUST_PERCENTILE = 2.0
32
37
33
38
# copied from seaborn
@@ -396,7 +401,8 @@ def _infer_xy_labels(darray, x, y, imshow=False, rgb=None):
396
401
return x , y
397
402
398
403
399
- def _assert_valid_xy (darray , xy , name ):
404
+ # TODO: Can by used to more than x or y, rename?
405
+ def _assert_valid_xy (darray : DataArray , xy : None | Hashable , name : str ) -> None :
400
406
"""
401
407
make sure x and y passed to plotting functions are valid
402
408
"""
@@ -410,9 +416,11 @@ def _assert_valid_xy(darray, xy, name):
410
416
411
417
valid_xy = (set (darray .dims ) | set (darray .coords )) - multiindex_dims
412
418
413
- if xy not in valid_xy :
414
- valid_xy_str = "', '" .join (sorted (valid_xy ))
415
- raise ValueError (f"{ name } must be one of None, '{ valid_xy_str } '" )
419
+ if (xy is not None ) and (xy not in valid_xy ):
420
+ valid_xy_str = "', '" .join (sorted (tuple (str (v ) for v in valid_xy )))
421
+ raise ValueError (
422
+ f"{ name } must be one of None, '{ valid_xy_str } '. Received '{ xy } ' instead."
423
+ )
416
424
417
425
418
426
def get_axis (figsize = None , size = None , aspect = None , ax = None , ** kwargs ):
@@ -1152,7 +1160,7 @@ def _adjust_legend_subtitles(legend):
1152
1160
1153
1161
def _infer_meta_data (ds , x , y , hue , hue_style , add_guide , funcname ):
1154
1162
dvars = set (ds .variables .keys ())
1155
- error_msg = f" must be one of ({ ', ' .join (dvars )} )"
1163
+ error_msg = f" must be one of ({ ', ' .join (sorted ( tuple ( str ( v ) for v in dvars )) )} )"
1156
1164
1157
1165
if x not in dvars :
1158
1166
raise ValueError (f"Expected 'x' { error_msg } . Received { x } instead." )
0 commit comments