@@ -92,6 +92,9 @@ class ProxyWrapperBase:
9292 def draw (self , renderer ):
9393 raise NotImplementedError
9494
95+ def _update_wrapped (self , data ):
96+ raise NotImplementedError
97+
9598 def _query_and_transform (self , renderer , * , xunits : List [str ], yunits : List [str ]) -> Dict [str , Any ]:
9699 """
97100 Helper to centralize the data querying and python-side transforms
@@ -104,7 +107,7 @@ def _query_and_transform(self, renderer, *, xunits: List[str], yunits: List[str]
104107 """
105108 # extract what we need to about the axes to query the data
106109 ax = self .axes
107- if getattr (ax , ' _axesfraction_to_data' , None ) is None :
110+ if getattr (ax , " _axesfraction_to_data" , None ) is None :
108111 ax ._axesfraction_to_data = ax .transAxes - ax .transData
109112 # TODO do we want to trust the implicit renderer on the Axes?
110113 ax_bbox = ax .get_window_extent (renderer )
@@ -178,10 +181,14 @@ def __init__(self, data: DataContainer, nus=None, /, **kwargs):
178181
179182 @_stale_wrapper
180183 def draw (self , renderer ):
181- data = self ._query_and_transform (renderer , xunits = ["x" ], yunits = ["y" ])
182- self ._wrapped_instance .set_data (data ["x" ], data ["y" ])
184+ self ._update_wrapped (
185+ self ._query_and_transform (renderer , xunits = ["x" ], yunits = ["y" ]),
186+ )
183187 return self ._wrapped_instance .draw (renderer )
184188
189+ def _update_wrapped (self , data ):
190+ self ._wrapped_instance .set_data (data ["x" ], data ["y" ])
191+
185192
186193class ImageWrapper (ProxyWrapper ):
187194 _wrapped_class = _AxesImage
@@ -193,10 +200,14 @@ def __init__(self, data: DataContainer, nus=None, /, **kwargs):
193200
194201 @_stale_wrapper
195202 def draw (self , renderer ):
196- data = self ._query_and_transform (renderer , xunits = ["xextent" ], yunits = ["yextent" ])
203+ data = self ._update_wrapped (
204+ self ._query_and_transform (renderer , xunits = ["xextent" ], yunits = ["yextent" ]),
205+ )
206+ return self ._wrapped_instance .draw (renderer )
207+
208+ def _update_wrapped (self , data ):
197209 self ._wrapped_instance .set_array (data ["image" ])
198210 self ._wrapped_instance .set_extent ([* data ["xextent" ], * data ["yextent" ]])
199- return self ._wrapped_instance .draw (renderer )
200211
201212
202213class StepWrapper (ProxyWrapper ):
@@ -209,10 +220,14 @@ def __init__(self, data: DataContainer, nus=None, /, **kwargs):
209220
210221 @_stale_wrapper
211222 def draw (self , renderer ):
212- data = self ._query_and_transform (renderer , xunits = ["edges" ], yunits = ["density" ])
213- self ._wrapped_instance .set_data (data ["density" ], data ["edges" ])
223+ self ._update_wrapped (
224+ self ._query_and_transform (renderer , xunits = ["edges" ], yunits = ["density" ]),
225+ )
214226 return self ._wrapped_instance .draw (renderer )
215227
228+ def _update_wrapped (self , data ):
229+ self ._wrapped_instance .set_data (data ["density" ], data ["edges" ])
230+
216231
217232@_forwarder (
218233 (
@@ -278,9 +293,15 @@ def __init__(self, data: DataContainer, nus=None, /, **kwargs):
278293
279294 @_stale_wrapper
280295 def draw (self , renderer ):
281- data = self ._query_and_transform (
282- renderer , xunits = ["x" , "xupper" , "xlower" ], yunits = ["y" , "yupper" , "ylower" ]
296+ self ._update_wrapped (
297+ self ._query_and_transform (
298+ renderer , xunits = ["x" , "xupper" , "xlower" ], yunits = ["y" , "yupper" , "ylower" ]
299+ ),
283300 )
301+ for k , v in self ._wrapped_instances .items ():
302+ v .draw (renderer )
303+
304+ def _update_wrapped (self , data ):
284305 self ._wrapped_instances ["l0" ].set_data (data ["x" ], data ["y" ])
285306
286307 def set_or_hide (check_key , artist , xkey , ykey ):
@@ -318,6 +339,3 @@ def set_or_hide(check_key, artist, xkey, ykey):
318339
319340 else :
320341 self ._wrapped_instances ["xbars" ].set_visible (False )
321-
322- for k , v in self ._wrapped_instances .items ():
323- v .draw (renderer )
0 commit comments