Plotting signals in besim

This commit is contained in:
2026-08-02 11:22:28 +02:00
parent 2128fb00b4
commit 756a621ab1
7 changed files with 391 additions and 1 deletions

View File

@@ -0,0 +1,43 @@
from __future__ import annotations
from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg
from matplotlib.figure import Figure
from PySide6.QtWidgets import QVBoxLayout, QWidget
from bedit_simulation import SimulationResult
class SimulationPlotWidget(QWidget):
def __init__(self, parent: QWidget | None = None) -> None:
super().__init__(parent)
self.figure = Figure(layout="constrained")
self.canvas = FigureCanvasQTAgg(self.figure)
self.axes = self.figure.add_subplot()
layout = QVBoxLayout(self)
layout.setContentsMargins(0, 0, 0, 0)
layout.addWidget(self.canvas)
def set_plot(self, results: list[SimulationResult], signals: list[str]) -> None:
self.axes.clear()
for signal in signals:
times: list[float] = []
values: list[float] = []
sample_offset = 0
for result in results:
result_values = result.data.get(signal)
if result_values is None:
continue
result_times = result.data.get("time")
if result_times is not None and len(result_times) == len(result_values):
times.extend(result_times)
else:
times.extend(range(sample_offset, sample_offset + len(result_values)))
values.extend(result_values)
sample_offset += len(result_values)
if values:
self.axes.plot(times, values, label=signal)
self.axes.set_xlabel("Time")
self.axes.grid(True)
if self.axes.lines:
self.axes.legend()
self.canvas.draw_idle()