feat: добавил отображение коридоров допустимых значений на увеличенной области графиков

This commit is contained in:
Андрей Скирченко 2024-11-15 13:51:26 +03:00
parent 4d0b777f7c
commit c74e55f98c

View File

@ -26,6 +26,25 @@ class PlotWidget(BasePlotWidget):
return region
return None
def _find_mid_in_stage(self,
stage: str,
dataframe: pd.DataFrame,
signal_name: str) -> float:
if stage in self._stages:
stage_diff = np.diff(dataframe[stage])
start_index = np.where(stage_diff == 1)[0]
finish_index = np.where(stage_diff == -1)[0]
data = dataframe[signal_name] if signal_name in dataframe.columns.tolist() else []
if data.size and start_index.size:
start = start_index[0]
finish = finish_index[0] if finish_index.size else (len(data) - 1)
data_slice = data[start:finish]
mean = np.mean(data_slice)
return mean
return 0.0
def _build_widget(self, dataframe: pd.DataFrame) -> QWidget:
widget = QWidget()
layout = QVBoxLayout()
@ -46,14 +65,30 @@ class PlotWidget(BasePlotWidget):
if region:
plot_widget.addItem(region)
if settings["zoom"] and max(time_axis) < 5.0:
means_raw = [self._find_mid_in_stage("Welding",
dataframe,
signal["name"]) for signal in description["Signals"]]
mean = max(means_raw)
region_stable = pg.LinearRegionItem([mean - mean * 0.015,
mean + mean * 0.015],
orientation='horizontal')
region_stable.setBrush(pg.mkBrush([250, 250, 0, 25]))
plot_widget.addItem(region_stable)
region_overshoot = pg.LinearRegionItem([mean - mean * 0.05,
mean + mean * 0.05],
orientation='horizontal')
region_overshoot.setBrush(pg.mkBrush([0, 250, 0, 30]))
plot_widget.addItem(region_overshoot)
plot_widget.setYRange(mean - 260, mean + 260)
plot_widget.setInteractive(False)
for signal in description["Signals"]:
if signal["name"] in dataframe_headers:
plot = plot_widget.plot(time_axis, dataframe[signal["name"]], pen=signal["pen"])
legend.addItem(plot, signal["name"])
if settings["zoom"] and max(time_axis) < 5.0:
max_value = max(dataframe[signal["name"]])
plot_widget.setYRange(max_value - 200, max_value)
plot_widget.setInteractive(False)
layout.addWidget(plot_widget)