From 31046f0a87bcbb3c3d299f0136badbe3bc438e77 Mon Sep 17 00:00:00 2001 From: Jacob Date: Sat, 2 Oct 2021 16:19:47 +0200 Subject: [PATCH] Added Lambda for PlotData --- plotView.py | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++ view.py | 60 ++++++++++--------------------------------------- 2 files changed, 76 insertions(+), 48 deletions(-) create mode 100644 plotView.py diff --git a/plotView.py b/plotView.py new file mode 100644 index 0000000..bd16b37 --- /dev/null +++ b/plotView.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python3 +# -*- coding: UTF-8 -*- +# +# generated by wxGlade 1.0.2 on Sun Jul 4 21:23:20 2021 +# + +import wx + +# begin wxGlade: dependencies +# end wxGlade + +# begin wxGlade: extracode +# end wxGlade +import matplotlib.cm as cm +import matplotlib.cbook as cbook +from matplotlib.backends.backend_wxagg import ( + FigureCanvasWxAgg as FigureCanvas, + NavigationToolbar2WxAgg as NavigationToolbar, +) +from matplotlib.figure import Figure +import logging + +logging.basicConfig(level=logging.DEBUG) +LOGGER = logging.getLogger() + + +class PlotPanel(wx.Panel): + def __init__(self, parent, model, plotLambda, updateLambda): + super().__init__(parent, -1) + + self.plotLambda = plotLambda + self.updateLambda = updateLambda + + self.model = model + self.fig = Figure((15, 10), 75) + self.canvas = FigureCanvas(self, -1, self.fig) + self.toolbar = NavigationToolbar(self.canvas) # matplotlib toolbar + self.toolbar.Realize() + # Now put all into a sizer + sizer = wx.BoxSizer(wx.VERTICAL) + # This way of adding to sizer allows resizing + sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW) + # Best to allow the toolbar to resize! + sizer.Add(self.toolbar, 0, wx.GROW) + self.SetSizer(sizer) + self.Fit() + self.Bind(wx.EVT_PAINT, self.on_paint, self) + self.ax = self.fig.add_subplot() + self.fig.legend() + (self.im,) = self.plotLambda(self.ax,self.model.plot_data.data) + self.toolbar.update() # Not sure why this is needed - ADS + + def get_toolbar(self): + # You will need to override GetToolBar if you are using an + # unmanaged toolbar in your frame + return self.toolbar + + def on_paint(self, event): + dat = self.model.plot_data.data + self.updateLambda(self.im, dat) + self.ax.relim() + self.ax.autoscale_view() + self.canvas.draw() + event.Skip() diff --git a/view.py b/view.py index bfeeca1..aec8ac2 100644 --- a/view.py +++ b/view.py @@ -22,7 +22,7 @@ from matplotlib.backends.backend_wxagg import ( NavigationToolbar2WxAgg as NavigationToolbar, ) from matplotlib.figure import Figure - +from plotView import PlotPanel logging.basicConfig(level=logging.DEBUG) LOGGER = logging.getLogger() @@ -32,49 +32,6 @@ LOGGER = logging.getLogger() # begin wxGlade: extracode # end wxGlade -class PlotPanel(wx.Panel): - def __init__(self, parent, model): - super().__init__(parent, -1) - self.model = model - self.fig = Figure((15, 10), 75) - self.canvas = FigureCanvas(self, -1, self.fig) - self.toolbar = NavigationToolbar(self.canvas) # matplotlib toolbar - self.toolbar.Realize() - # Now put all into a sizer - sizer = wx.BoxSizer(wx.VERTICAL) - # This way of adding to sizer allows resizing - sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW) - # Best to allow the toolbar to resize! - sizer.Add(self.toolbar, 0, wx.GROW) - self.SetSizer(sizer) - self.Fit() - self.Bind(wx.EVT_PAINT, self.on_paint, self) - self.ax = None - self.im = None - self.init_plot_data() - self.x = self.y = None - - def init_plot_data(self): - self.ax = self.fig.add_subplot() - self.fig.legend() - dat = self.model.plot_data - (self.im,) = self.ax.plot(dat.get("keks"), dat.get("temp"), "-o", label="temp") - self.toolbar.update() # Not sure why this is needed - ADS - - def get_toolbar(self): - # You will need to override GetToolBar if you are using an - # unmanaged toolbar in your frame - return self.toolbar - - def on_paint(self, event): - dat = self.model.plot_data.data - # print(self.x) - - self.im.set_data(dat.get("keks"), dat.get("temp")) - self.ax.relim() - self.ax.autoscale_view() - self.canvas.draw() - event.Skip() class MyFrame(wx.Frame): @@ -128,11 +85,18 @@ class MyFrame(wx.Frame): self.tabs = wx.Notebook(self.panel_1, wx.ID_ANY) grid_sizer_main.Add(self.tabs, (0, 1), (1, 1), wx.EXPAND, 0) - self.plot_1 = PlotPanel(self.tabs, self.model) - self.tabs.AddPage(self.plot_1, "x vs y") - self.plot_2 = PlotPanel(self.tabs, self.model) - self.tabs.AddPage(self.plot_2, "x vs z") + plot = lambda ax, dat: ax.plot(dat["time"], dat["temp"]) + update = lambda im, dat: im.set_data(dat["time"], dat["temp"]) + self.plot_1 = PlotPanel(self.tabs, self.model, plot, update) + self.tabs.AddPage(self.plot_1, "Temp") + + plot = lambda ax, dat: ax.plot(dat["time"], dat["multi"]) + update = lambda im, dat: im.set_data(dat["time"], dat["multi"]) + self.plot_2 = PlotPanel(self.tabs, self.model, plot, update) + self.tabs.AddPage(self.plot_2, "Multi") + + grid_sizer_3 = wx.GridBagSizer(10, 0) grid_sizer_main.Add(grid_sizer_3, (0, 2), (2, 1), wx.EXPAND, 0)