@@ -942,18 +942,18 @@ def __init__(self, values, edges, *,
942942 The direction of the steps. Vertical means that *values* are along
943943 the y-axis, and edges are along the x-axis.
944944
945- baseline : float or None, default: 0
946- Determines starting value of the bounding edges or when
945+ baseline : float, 1D array-like or None, default: 0
946+ Determines bottom value of the bounding edges or when
947947 ``fill=True``, position of lower edge.
948948
949949 Other valid keyword arguments are:
950950
951951 %(Patch)s
952952 """
953- self .baseline = baseline
954953 self .orientation = orientation
955954 self ._edges = np .asarray (edges )
956955 self ._values = np .asarray (values )
956+ self ._baseline = np .asarray (baseline ) if baseline is not None else None
957957 self ._update_path ()
958958 super ().__init__ (self ._path , ** kwargs )
959959
@@ -966,13 +966,24 @@ def _update_path(self):
966966 f"`len(values) = { self ._values .size } ` and "
967967 f"`len(edges) = { self ._edges .size } `." )
968968 verts , codes = [], []
969- for idx0 , idx1 in cbook .contiguous_regions (~ np .isnan (self ._values )):
969+
970+ _nan_mask = np .isnan (self ._values )
971+ if self ._baseline is not None :
972+ _nan_mask |= np .isnan (self ._baseline )
973+ for idx0 , idx1 in cbook .contiguous_regions (~ _nan_mask ):
970974 x = np .repeat (self ._edges [idx0 :idx1 + 1 ], 2 )
971975 y = np .repeat (self ._values [idx0 :idx1 ], 2 )
972- if self .baseline is not None :
973- y = np .hstack ((self .baseline , y , self .baseline ))
974- else :
976+ if self ._baseline is None :
975977 y = np .hstack ((y [0 ], y , y [- 1 ]))
978+ elif self ._baseline .ndim == 0 : # single baseline value
979+ y = np .hstack ((self ._baseline , y , self ._baseline ))
980+ elif self ._baseline .ndim == 1 : # baseline array
981+ base = np .repeat (self ._baseline [idx0 :idx1 ], 2 )[::- 1 ]
982+ x = np .concatenate ([x , x [::- 1 ]])
983+ y = np .concatenate ([np .hstack ((base [- 1 ], y , base [0 ],
984+ base [0 ], base , base [- 1 ]))])
985+ else : # no baseline
986+ raise ValueError ('Invalid `baseline` specified' )
976987 if self .orientation == 'vertical' :
977988 xy = np .column_stack ([x , y ])
978989 else :
@@ -982,23 +993,26 @@ def _update_path(self):
982993 self ._path = Path (np .vstack (verts ), np .hstack (codes ))
983994
984995 def get_data (self ):
985- """Get `.StepPatch` values and edges ."""
986- return self ._values , self ._edges
996+ """Get `.StepPatch` values, edges and baseline ."""
997+ return self ._values , self ._edges , self . _baseline
987998
988- def set_data (self , values , edges = None ):
999+ def set_data (self , values , edges = None , baseline = None ):
9891000 """
990- Set `.StepPatch` values and optionally edges.
1001+ Set `.StepPatch` values and optionally edges and baseline .
9911002
9921003 Parameters
9931004 ----------
9941005 values : 1D array-like or None
9951006 Will not update values, if passing None
9961007 edges : 1D array-like, optional
1008+ baseline : float, 1D array-like or None
9971009 """
9981010 if values is not None :
9991011 self ._values = np .asarray (values )
10001012 if edges is not None :
10011013 self ._edges = np .asarray (edges )
1014+ if baseline is not None :
1015+ self ._baseline = np .asarray (baseline )
10021016 self ._update_path ()
10031017 self .stale = True
10041018
@@ -1010,7 +1024,7 @@ def set_values(self, values):
10101024 ----------
10111025 values : 1D array-like
10121026 """
1013- self .set_data (values , edges = None )
1027+ self .set_data (values , edges = None , baseline = None )
10141028
10151029 def set_edges (self , edges ):
10161030 """
@@ -1020,23 +1034,21 @@ def set_edges(self, edges):
10201034 ----------
10211035 edges : 1D array-like
10221036 """
1023- self .set_data (None , edges = edges )
1037+ self .set_data (None , edges = edges , baseline = None )
10241038
10251039 def get_baseline (self ):
1026- """Get `.StepPatch` baseline value ."""
1027- return self .baseline
1040+ """Get `.StepPatch` baseline."""
1041+ return self ._baseline
10281042
10291043 def set_baseline (self , baseline ):
10301044 """
1031- Set `.StepPatch` baseline value .
1045+ Set `.StepPatch` baseline.
10321046
10331047 Parameters
10341048 ----------
1035- baseline : float or None
1049+ baseline : float, array-like or None, default: 0
10361050 """
1037- self .baseline = baseline
1038- self ._update_path ()
1039- self .stale = True
1051+ self .set_data (None , edges = None , baseline = baseline )
10401052
10411053
10421054class Polygon (Patch ):
0 commit comments