added a Matplolib Plotter for async data
This commit is contained in:
parent
9302f359bf
commit
b10f09c3e0
|
|
@ -0,0 +1,53 @@
|
|||
import queue
|
||||
import threading
|
||||
import tkinter as tk
|
||||
|
||||
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
|
||||
from matplotlib.figure import Figure
|
||||
|
||||
|
||||
class Plotter(tk.Frame):
|
||||
def __init__(self, root, percent_lim: bool = False):
|
||||
super().__init__(root)
|
||||
|
||||
self.figure = Figure(figsize=(8, 8))
|
||||
self.axes = self.figure.add_subplot()
|
||||
self.canvas = FigureCanvasTkAgg(self.figure, master=self)
|
||||
self.canvas.get_tk_widget().pack()
|
||||
|
||||
self.__queue = queue.Queue()
|
||||
self.data = {}
|
||||
|
||||
self.percent_lim = percent_lim
|
||||
|
||||
self.master.after(1000, self.__update)
|
||||
|
||||
def append(self, name: str, value):
|
||||
self.__queue.put((name, value))
|
||||
|
||||
def __update(self):
|
||||
to_update = False
|
||||
while not self.__queue.empty():
|
||||
to_update = True
|
||||
name, value = self.__queue.get()
|
||||
|
||||
if name in self.data:
|
||||
self.data[name].append(value)
|
||||
else:
|
||||
self.data[name] = [value]
|
||||
|
||||
if to_update:
|
||||
self.__update_plot()
|
||||
|
||||
self.master.after(1000, self.__update)
|
||||
|
||||
def __update_plot(self):
|
||||
self.axes.cla()
|
||||
if self.percent_lim:
|
||||
self.axes.set_ylim(0, 1)
|
||||
self.axes.set_xlim(left=0, auto=True)
|
||||
for (name, values) in self.data.items():
|
||||
self.axes.plot(values, label=name)
|
||||
|
||||
self.axes.legend()
|
||||
self.canvas.draw()
|
||||
Loading…
Reference in New Issue