1+ import numbers
2+ import time
13from copy import copy
24from typing import Optional , List , Tuple , Dict
35
46
57class 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 :
917 self .roll_on_tick = roll_on_tick
1018 self .offset_left = offset_left
1119 self .offset_right = offset_right
@@ -18,19 +26,26 @@ def __init__(self, roll_on_tick: int = 1, offset_left: float = 0., offset_right:
1826 self .fixed_range = fixed_range
1927 self .x_range : Dict [str , List [float ]] = {}
2028 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 ]
2331 self .ignored_data_connectors : List [str ] = []
2432
2533 def get_x_range (self , data_connector , tick : int ) -> List [float ]:
2634 x , _ = data_connector .plot .getData ()
2735 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 ]
3147 else :
3248 axis_range = data_connector .plot .data_bounds (ax = 0 , offset = self .roll_on_tick if self .roll_on_tick > 1 else 0 )
33-
3449 final_range = self ._get_range (axis_range , tick , (self .offset_left , self .offset_right ))
3550 if final_range is None :
3651 return self .final_x_range
@@ -83,15 +98,21 @@ def recalculate_x_range(self):
8398 return self .final_x_range
8499
85100 def get_y_range (self , data_connector , tick : int ) -> List [float ]:
86-
87101 _ , y = data_connector .plot .getData ()
88102 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 ]
92114 else :
93115 axis_range = data_connector .plot .data_bounds (ax = 1 , offset = self .roll_on_tick if self .roll_on_tick > 1 else 0 )
94-
95116 final_range = self ._get_range (axis_range , tick , (self .offset_bottom , self .offset_top ))
96117 if final_range is None :
97118 return self .final_y_range
@@ -143,8 +164,9 @@ def recalculate_y_range(self):
143164 self .final_y_range = final_range
144165 return self .final_y_range
145166
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 ]]:
148170 if self .fixed_range is not None :
149171 # Return fixed defined range
150172 return self .fixed_range
@@ -156,8 +178,10 @@ def _get_range(self, axis_range: Tuple[float, float], tick: int, offsets: Tuple[
156178 elif tick > 0 :
157179 # Return range of width specified by offsets
158180 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+ ]
161185 else :
162186 # Just return axis ranges subtracted by offsets
163187 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[
168192 range_width = range_width * (self .roll_on_tick - (tick + 1 ))
169193 return [axis_range [1 ], axis_range [1 ] + range_width ]
170194 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+ ]
173199 else :
174200 return None
175201
0 commit comments