@@ -822,48 +822,54 @@ def __init__(self, obj, accessor):
822
822
self .accessor = accessor
823
823
self ._keys = ("x" , "y" , "hue" , "col" , "row" )
824
824
825
+ def _process_x_or_y (self , kwargs , key , skip = None ):
826
+ """Choose a default 'x' or 'y' variable name."""
827
+ if key not in kwargs :
828
+ kwargs [key ] = _possible_x_y_plot (self ._obj , key , skip )
829
+ return kwargs
830
+
831
+ def _set_axis_props (self , kwargs , key ):
832
+ value = kwargs .get (key )
833
+ if value :
834
+ if value in self .accessor .keys ():
835
+ var = self .accessor [value ]
836
+ else :
837
+ var = self ._obj [value ]
838
+ if "positive" in var .attrs :
839
+ if var .attrs ["positive" ] == "down" :
840
+ kwargs .setdefault (f"{ key } increase" , False )
841
+ else :
842
+ kwargs .setdefault (f"{ key } increase" , True )
843
+ return kwargs
844
+
825
845
def _plot_decorator (self , func ):
826
846
"""
827
847
This decorator is used to set default kwargs on plotting functions.
828
848
For now, this can
829
849
1. set ``xincrease`` and ``yincrease``.
830
850
2. automatically set ``x`` or ``y``.
831
851
"""
832
- valid_keys = self .accessor .keys ()
833
852
834
853
@functools .wraps (func )
835
854
def _plot_wrapper (* args , ** kwargs ):
836
- def _process_x_or_y (kwargs , key , skip = None ):
837
- if key not in kwargs :
838
- kwargs [key ] = _possible_x_y_plot (self ._obj , key , skip )
839
-
840
- value = kwargs .get (key )
841
- if value :
842
- if value in valid_keys :
843
- var = self .accessor [value ]
844
- else :
845
- var = self ._obj [value ]
846
- if "positive" in var .attrs :
847
- if var .attrs ["positive" ] == "down" :
848
- kwargs .setdefault (f"{ key } increase" , False )
849
- else :
850
- kwargs .setdefault (f"{ key } increase" , True )
851
- return kwargs
852
-
855
+ # First choose 'x' or 'y' if possible
853
856
is_line_plot = (func .__name__ == "line" ) or (
854
857
func .__name__ == "wrapper"
855
858
and (kwargs .get ("hue" ) or self ._obj .ndim == 1 )
856
859
)
857
860
if is_line_plot :
858
861
hue = kwargs .get ("hue" )
859
862
if "x" not in kwargs and "y" not in kwargs :
860
- kwargs = _process_x_or_y (kwargs , "x" , skip = hue )
863
+ kwargs = self . _process_x_or_y (kwargs , "x" , skip = hue )
861
864
if not kwargs .get ("x" ):
862
- kwargs = _process_x_or_y (kwargs , "y" , skip = hue )
863
-
865
+ kwargs = self ._process_x_or_y (kwargs , "y" , skip = hue )
864
866
else :
865
- kwargs = _process_x_or_y (kwargs , "x" , skip = kwargs .get ("y" ))
866
- kwargs = _process_x_or_y (kwargs , "y" , skip = kwargs .get ("x" ))
867
+ kwargs = self ._process_x_or_y (kwargs , "x" , skip = kwargs .get ("y" ))
868
+ kwargs = self ._process_x_or_y (kwargs , "y" , skip = kwargs .get ("x" ))
869
+
870
+ # Now set some nice properties
871
+ kwargs = self ._set_axis_props (kwargs , "x" )
872
+ kwargs = self ._set_axis_props (kwargs , "y" )
867
873
868
874
return func (* args , ** kwargs )
869
875
0 commit comments