@@ -5,6 +5,7 @@ class ProxyWrapper:
5
5
_privtized_methods = ()
6
6
_wrapped_class = None
7
7
_wrapped_instance = None
8
+ data = None
8
9
9
10
def draw (self , renderer ):
10
11
raise NotImplementedError
@@ -22,18 +23,30 @@ def __setattr__(self, key, value):
22
23
else :
23
24
super ().__setattr__ (key , value )
24
25
26
+ def _query_and_transform (self , renderer ):
27
+ ax = self ._wrapped_instance .axes
28
+ ax_bbox = ax .get_window_extent (renderer )
29
+ return {
30
+ # doing this here is nice because we can write it once, but we really want to
31
+ # push this computation down a layer
32
+ k : self .nus .get (k , lambda x : x )(v )
33
+ for k , v in self .data .query ([* ax .get_xlim (), * ax .get_ylim ()], ax_bbox .size ).items ()
34
+ }
35
+
36
+ def __init__ (self , data , nus ):
37
+ self .data = data
38
+ self .nus = nus or {}
39
+
25
40
26
41
class LineWrapper (ProxyWrapper ):
27
42
_wrapped_class = _Line2D
28
43
_privtized_methods = set (["set_xdata" , "set_ydata" , "set_data" ])
29
44
30
- def __init__ (self , data , / , ** kwargs ):
45
+ def __init__ (self , data , nus = None , / , ** kwargs ):
46
+ super ().__init__ (data , nus )
31
47
self ._wrapped_instance = self ._wrapped_class ([], [], ** kwargs )
32
- self .data = data
33
48
34
49
def draw (self , renderer ):
35
- ax = self ._wrapped_instance .axes
36
- ax_bbox = ax .get_window_extent (renderer )
37
- data = self .data .query ([* ax .get_xlim (), * ax .get_ylim ()], ax_bbox .size )
50
+ data = self ._query_and_transform (renderer )
38
51
self ._wrapped_instance .set_data (data ["x" ], data ["y" ])
39
52
return self ._wrapped_instance .draw (renderer )
0 commit comments