1
+ import numbers
2
+ import time
1
3
from copy import copy
2
4
from typing import Optional , List , Tuple , Dict
3
5
4
6
5
7
class LiveAxisRange :
6
-
7
- def __init__ (self , roll_on_tick : int = 1 , offset_left : float = 0. , offset_right : float = 0. , offset_top : float = 0. ,
8
- offset_bottom : float = 0. , fixed_range : Optional [List [float ]] = None ) -> None :
8
+ def __init__ (
9
+ self ,
10
+ roll_on_tick : int = 1 ,
11
+ offset_left : float = 0.0 ,
12
+ offset_right : float = 0.0 ,
13
+ offset_top : float = 0.0 ,
14
+ offset_bottom : float = 0.0 ,
15
+ fixed_range : Optional [List [float ]] = None ,
16
+ ) -> None :
9
17
self .roll_on_tick = roll_on_tick
10
18
self .offset_left = offset_left
11
19
self .offset_right = offset_right
@@ -18,19 +26,26 @@ def __init__(self, roll_on_tick: int = 1, offset_left: float = 0., offset_right:
18
26
self .fixed_range = fixed_range
19
27
self .x_range : Dict [str , List [float ]] = {}
20
28
self .y_range : Dict [str , List [float ]] = {}
21
- self .final_x_range = [0. , 0. ]
22
- self .final_y_range = [0. , 0. ]
29
+ self .final_x_range = [0.0 , 0.0 ]
30
+ self .final_y_range = [0.0 , 0.0 ]
23
31
self .ignored_data_connectors : List [str ] = []
24
32
25
33
def get_x_range (self , data_connector , tick : int ) -> List [float ]:
26
34
x , _ = data_connector .plot .getData ()
27
35
if x is None :
28
- return [0. ]
29
- if tick < 2 :
30
- axis_range = [0 , data_connector .plot .data_tick (ax = 0 )]
36
+ return [0.0 ]
37
+ if tick == 0 :
38
+ if isinstance (x [0 ], numbers .Number ):
39
+ axis_range = [x [0 ], x [0 ]]
40
+ else :
41
+ axis_range = [0 , data_connector .plot .data_tick (ax = 0 )]
42
+ elif tick == 1 :
43
+ if isinstance (x [0 ], numbers .Number ):
44
+ axis_range = [x [0 ], x [1 ]]
45
+ else :
46
+ axis_range = [0 , data_connector .plot .data_tick (ax = 0 ) * 2 ]
31
47
else :
32
48
axis_range = data_connector .plot .data_bounds (ax = 0 , offset = self .roll_on_tick if self .roll_on_tick > 1 else 0 )
33
-
34
49
final_range = self ._get_range (axis_range , tick , (self .offset_left , self .offset_right ))
35
50
if final_range is None :
36
51
return self .final_x_range
@@ -83,15 +98,21 @@ def recalculate_x_range(self):
83
98
return self .final_x_range
84
99
85
100
def get_y_range (self , data_connector , tick : int ) -> List [float ]:
86
-
87
101
_ , y = data_connector .plot .getData ()
88
102
if y is None :
89
- return [0. ]
90
- if tick < 2 :
91
- axis_range = [0 , data_connector .plot .data_tick (ax = 1 )]
103
+ return [0.0 ]
104
+ if tick == 0 :
105
+ if isinstance (y [0 ], numbers .Number ):
106
+ axis_range = [y [0 ], y [0 ]]
107
+ else :
108
+ axis_range = [0 , data_connector .plot .data_tick (ax = 1 )]
109
+ elif tick == 1 :
110
+ if isinstance (y [0 ], numbers .Number ):
111
+ axis_range = [y [0 ], y [1 ]]
112
+ else :
113
+ axis_range = [0 , data_connector .plot .data_tick (ax = 1 ) * 2 ]
92
114
else :
93
115
axis_range = data_connector .plot .data_bounds (ax = 1 , offset = self .roll_on_tick if self .roll_on_tick > 1 else 0 )
94
-
95
116
final_range = self ._get_range (axis_range , tick , (self .offset_bottom , self .offset_top ))
96
117
if final_range is None :
97
118
return self .final_y_range
@@ -143,8 +164,9 @@ def recalculate_y_range(self):
143
164
self .final_y_range = final_range
144
165
return self .final_y_range
145
166
146
- def _get_range (self , axis_range : Tuple [float , float ], tick : int , offsets : Tuple [float , float ]) -> Optional [
147
- List [float ]]:
167
+ def _get_range (
168
+ self , axis_range : Tuple [float , float ], tick : int , offsets : Tuple [float , float ]
169
+ ) -> Optional [List [float ]]:
148
170
if self .fixed_range is not None :
149
171
# Return fixed defined range
150
172
return self .fixed_range
@@ -156,8 +178,10 @@ def _get_range(self, axis_range: Tuple[float, float], tick: int, offsets: Tuple[
156
178
elif tick > 0 :
157
179
# Return range of width specified by offsets
158
180
range_width = (abs (axis_range [1 ] - axis_range [0 ])) / tick
159
- return [axis_range [1 ] - range_width * offsets [0 ], (axis_range [1 ] + range_width ) + (
160
- range_width * offsets [1 ])]
181
+ return [
182
+ axis_range [1 ] - range_width * offsets [0 ],
183
+ (axis_range [1 ] + range_width ) + (range_width * offsets [1 ]),
184
+ ]
161
185
else :
162
186
# Just return axis ranges subtracted by offsets
163
187
return [axis_range [0 ] - offsets [0 ], axis_range [1 ] + offsets [1 ]]
@@ -168,8 +192,10 @@ def _get_range(self, axis_range: Tuple[float, float], tick: int, offsets: Tuple[
168
192
range_width = range_width * (self .roll_on_tick - (tick + 1 ))
169
193
return [axis_range [1 ], axis_range [1 ] + range_width ]
170
194
else :
171
- return [axis_range [1 ] - range_width * offsets [0 ], (axis_range [1 ] + range_width ) + (
172
- range_width * offsets [1 ])]
195
+ return [
196
+ axis_range [1 ] - range_width * offsets [0 ],
197
+ (axis_range [1 ] + range_width ) + (range_width * offsets [1 ]),
198
+ ]
173
199
else :
174
200
return None
175
201
0 commit comments