gui: Configure graph's range width and bound
- Upgrade to pglive v0.8 - Add a new patch for new options for specifying display range width and bound
This commit is contained in:
parent
5909ead681
commit
09827b4d44
@ -57,13 +57,13 @@
|
||||
|
||||
pglive = pkgs.python3Packages.buildPythonPackage rec {
|
||||
pname = "pglive";
|
||||
version = "0.7.2";
|
||||
version = "0.8.0";
|
||||
format = "pyproject";
|
||||
src = pkgs.fetchPypi {
|
||||
inherit pname version;
|
||||
hash = "sha256-jqj8X6H1N5mJQ4OrY5ANqRB0YJByqg/bNneEALWmH1A=";
|
||||
hash = "sha256-2aECN/3zlsYRv7Ja8OlrnqlqqSCvJ08S2TaMYoMPst8=";
|
||||
};
|
||||
patches = ./patches/0001-Add-option-for-setting-min-range-span-for-y-axis.patch;
|
||||
patches = ./patches/pg_live_range_width.patch;
|
||||
buildInputs = [ pkgs.python3Packages.poetry-core ];
|
||||
propagatedBuildInputs = with pkgs.python3Packages; [ pyqtgraph numpy ];
|
||||
};
|
||||
|
@ -1,61 +0,0 @@
|
||||
From 59a14e06320fd42d56cd7d953da337c0fe4357fa Mon Sep 17 00:00:00 2001
|
||||
From: linuswck <linuswck@m-labs.hk>
|
||||
Date: Tue, 22 Oct 2024 17:30:36 +0800
|
||||
Subject: [PATCH] Add option for setting min range span for y-axis
|
||||
|
||||
---
|
||||
pglive/sources/live_axis_range.py | 17 ++++++++++++++++-
|
||||
1 file changed, 16 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/pglive/sources/live_axis_range.py b/pglive/sources/live_axis_range.py
|
||||
index afbd806..9b62ba5 100644
|
||||
--- a/pglive/sources/live_axis_range.py
|
||||
+++ b/pglive/sources/live_axis_range.py
|
||||
@@ -5,7 +5,7 @@ from typing import Optional, List, Tuple, Dict
|
||||
class LiveAxisRange:
|
||||
|
||||
def __init__(self, roll_on_tick: int = 1, offset_left: float = 0., offset_right: float = 0., offset_top: float = 0.,
|
||||
- offset_bottom: float = 0., fixed_range: Optional[List[float]] = None) -> None:
|
||||
+ offset_bottom: float = 0., fixed_range: Optional[List[float]] = None, min_y_range_span: Optional[List[float]] = [None, None]) -> None:
|
||||
self.roll_on_tick = roll_on_tick
|
||||
self.offset_left = offset_left
|
||||
self.offset_right = offset_right
|
||||
@@ -21,6 +21,7 @@ class LiveAxisRange:
|
||||
self.final_x_range = [0., 0.]
|
||||
self.final_y_range = [0., 0.]
|
||||
self.ignored_data_connectors: List[str] = []
|
||||
+ self.min_y_range_span = min_y_range_span
|
||||
|
||||
def get_x_range(self, data_connector, tick: int) -> List[float]:
|
||||
x, _ = data_connector.plot.getData()
|
||||
@@ -116,6 +117,13 @@ class LiveAxisRange:
|
||||
# therefore in that case we must set some range
|
||||
final_range[0] -= 0.4
|
||||
final_range[1] += 0.4
|
||||
+
|
||||
+ if self.min_y_range_span[0] is not None:
|
||||
+ final_range[0] = min(self.min_y_range_span[0], final_range[0])
|
||||
+
|
||||
+ if self.min_y_range_span[1] is not None:
|
||||
+ final_range[1] = max(self.min_y_range_span[1], final_range[1])
|
||||
+
|
||||
if self.final_y_range != final_range:
|
||||
self.final_y_range = final_range
|
||||
return self.final_y_range
|
||||
@@ -139,6 +147,13 @@ class LiveAxisRange:
|
||||
# therefore in that case we must set some range
|
||||
final_range[0] -= 0.4
|
||||
final_range[1] += 0.4
|
||||
+
|
||||
+ if self.min_y_range_span[0] is not None:
|
||||
+ final_range[0] = min(self.min_y_range_span[0], final_range[0])
|
||||
+
|
||||
+ if self.min_y_range_span[1] is not None:
|
||||
+ final_range[1] = max(self.min_y_range_span[1], final_range[1])
|
||||
+
|
||||
if self.final_y_range != final_range:
|
||||
self.final_y_range = final_range
|
||||
return self.final_y_range
|
||||
--
|
||||
2.44.1
|
||||
|
67
patches/pg_live_range_width.patch
Normal file
67
patches/pg_live_range_width.patch
Normal file
@ -0,0 +1,67 @@
|
||||
diff --git a/pglive/sources/live_axis_range.py b/pglive/sources/live_axis_range.py
|
||||
index cd3a7fc..102a48f 100755
|
||||
--- a/pglive/sources/live_axis_range.py
|
||||
+++ b/pglive/sources/live_axis_range.py
|
||||
@@ -13,6 +13,10 @@ class LiveAxisRange:
|
||||
offset_top: float = 0.0,
|
||||
offset_bottom: float = 0.0,
|
||||
fixed_range: Optional[List[float]] = None,
|
||||
+ x_range_width: Optional[float] = None,
|
||||
+ x_bound: Optional[List[float]] = None,
|
||||
+ y_range_width: Optional[float] = None,
|
||||
+ y_bound: Optional[List[float]] = None,
|
||||
) -> None:
|
||||
self.roll_on_tick = roll_on_tick
|
||||
self.offset_left = offset_left
|
||||
@@ -24,6 +28,10 @@ class LiveAxisRange:
|
||||
self.crop_top_offset_to_data = False
|
||||
self.crop_bottom_offset_to_data = False
|
||||
self.fixed_range = fixed_range
|
||||
+ self.x_range_width = x_range_width
|
||||
+ self.x_bound = x_bound
|
||||
+ self.y_range_width = y_range_width
|
||||
+ self.y_bound = y_bound
|
||||
self.x_range: Dict[str, List[float]] = {}
|
||||
self.y_range: Dict[str, List[float]] = {}
|
||||
self.final_x_range = [0.0, 0.0]
|
||||
@@ -70,6 +78,7 @@ class LiveAxisRange:
|
||||
# therefore in that case we must set some range
|
||||
final_range[0] -= 0.4
|
||||
final_range[1] += 0.4
|
||||
+ final_range = self._update_range_width(self.x_bound, self.x_range_width, final_range)
|
||||
if self.final_x_range != final_range:
|
||||
self.final_x_range = final_range
|
||||
return self.final_x_range
|
||||
@@ -137,6 +146,7 @@ class LiveAxisRange:
|
||||
# therefore in that case we must set some range
|
||||
final_range[0] -= 0.4
|
||||
final_range[1] += 0.4
|
||||
+ final_range = self._update_range_width(self.y_bound, self.y_range_width, final_range)
|
||||
if self.final_y_range != final_range:
|
||||
self.final_y_range = final_range
|
||||
return self.final_y_range
|
||||
@@ -199,6 +209,24 @@ class LiveAxisRange:
|
||||
else:
|
||||
return None
|
||||
|
||||
+ def _update_range_width(self, bound, range_width, final_range):
|
||||
+ if range_width is not None:
|
||||
+ if abs(final_range[0] - final_range[1]) < range_width:
|
||||
+ center_pt = (final_range[0] + final_range[1]) / 2
|
||||
+ final_range[0] = center_pt - range_width / 2
|
||||
+ final_range[1] = center_pt + range_width / 2
|
||||
+
|
||||
+ if bound is not None:
|
||||
+ final_range_width = abs(final_range[0] - final_range[1])
|
||||
+ bound_width = abs(bound[0] - bound[1])
|
||||
+ if bound_width < final_range_width:
|
||||
+ final_range = bound
|
||||
+ if final_range[0] < bound[0]:
|
||||
+ final_range = [bound[0], bound[0] + final_range_width]
|
||||
+ elif final_range[1] > bound[1]:
|
||||
+ final_range = [bound[0] - final_range_width, bound[1]]
|
||||
+ return final_range
|
||||
+
|
||||
def ignore_connector(self, data_connector, flag: bool) -> None:
|
||||
if not flag:
|
||||
self.ignored_data_connectors.append(data_connector.__hash__())
|
@ -203,7 +203,7 @@ class Graphs:
|
||||
pd_mon_pwr_axis = LiveAxis('left', text="Power", units="W")
|
||||
pd_mon_pwr_axis.showLabel()
|
||||
|
||||
pd_mon_pwr_graph.y_range_controller = LiveAxisRange(min_y_range_span=[0.0, 100 / 1000 / 1000])
|
||||
pd_mon_pwr_graph.y_range_controller = LiveAxisRange(y_range_width=0.0005, y_bound=[0.0, float("inf")])
|
||||
pd_mon_pwr_graph.setAxisItems({'left': pd_mon_pwr_axis})
|
||||
pd_mon_pwr_graph.addItem(self._pd_mon_pwr_plot)
|
||||
self.pd_mon_pwr_connector = DataConnector(self._pd_mon_pwr_plot, plot_rate=10.0, update_rate=10.0, max_points=self.max_samples)
|
||||
@ -211,6 +211,7 @@ class Graphs:
|
||||
|
||||
tec_temp_axis = LiveAxis('left', text="Temperature", units="℃")
|
||||
tec_temp_axis.showLabel()
|
||||
tec_temp_graph.y_range_controller = LiveAxisRange(y_range_width=0.002)
|
||||
tec_temp_graph.setAxisItems({'left': tec_temp_axis})
|
||||
tec_temp_graph.addItem(self._tec_setpoint_plot)
|
||||
tec_temp_graph.addItem(self._tec_temp_plot)
|
||||
@ -224,6 +225,7 @@ class Graphs:
|
||||
tec_i_graph.addLegend(brush=(50, 50, 200, 150))
|
||||
tec_i_graph.addItem(self._tec_i_target_plot)
|
||||
tec_i_graph.addItem(self._tec_i_measure_plot)
|
||||
tec_i_graph.y_range_controller = LiveAxisRange(y_range_width=0.05)
|
||||
self.tec_i_target_connector = DataConnector(self._tec_i_target_plot, plot_rate=10.0, update_rate=10.0, max_points=self.max_samples)
|
||||
self.tec_i_measure_connector = DataConnector(self._tec_i_measure_plot, plot_rate=10.0, update_rate=10.0, max_points=self.max_samples)
|
||||
self.connectors += [self.tec_i_target_connector, self.tec_i_measure_connector]
|
||||
|
Loading…
Reference in New Issue
Block a user