Skip to content

Commit ae5f431

Browse files
authored
Merge pull request #35 from domarm-comat/liveplot_range_fix
fix: liveplot range wrong range
2 parents 45e9de3 + 700b684 commit ae5f431

File tree

4 files changed

+185
-154
lines changed

4 files changed

+185
-154
lines changed

pglive/sources/live_axis_range.py

Lines changed: 46 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
1+
import numbers
2+
import time
13
from copy import copy
24
from typing import Optional, List, Tuple, Dict
35

46

57
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:
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

Comments
 (0)