Added Lambda for PlotData
This commit is contained in:
parent
a17630ad57
commit
31046f0a87
64
plotView.py
Normal file
64
plotView.py
Normal 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
60
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)
|
||||
|
Loading…
Reference in New Issue
Block a user