Added Lambda for PlotData

This commit is contained in:
Jacob Holder 2021-10-02 16:19:47 +02:00
parent a17630ad57
commit 31046f0a87
Signed by: jacob
GPG Key ID: 2194FC747048A7FD
2 changed files with 76 additions and 48 deletions

64
plotView.py Normal file
View File

@ -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()

60
view.py
View File

@ -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)