66 lines
1.8 KiB
Python
66 lines
1.8 KiB
Python
from pyqtgraph import DateAxisItem
|
|
from collections import deque
|
|
|
|
class PlotDescription:
|
|
|
|
def __init__(self, name, title=None, xlabel=None, ylabel=None, xs=None, ys=None, frmt=None):
|
|
self.name = name
|
|
self.title = title
|
|
self.xlabel = xlabel
|
|
self.ylabel = ylabel
|
|
self.xs = deque(maxlen = 5000) if xs is None else deque(xs, maxlen = 5000)
|
|
self.ys = deque(maxlen = 5000) if ys is None else deque(ys, maxlen = 5000)
|
|
self.format = frmt
|
|
|
|
@property
|
|
def data(self):
|
|
return (self.xs, self.ys)
|
|
|
|
@data.setter
|
|
def data(self, value):
|
|
self.xs, self.ys = value
|
|
|
|
|
|
def append(self, xy):
|
|
x, y = xy
|
|
self.xs.append(x)
|
|
self.ys.append(y)
|
|
|
|
def extend(self, data):
|
|
xs, ys = data
|
|
self.xs.extend(xs)
|
|
self.ys.extend(ys)
|
|
|
|
|
|
def make_plot(self, plotwidget, style):
|
|
# if self.format == "Line":
|
|
# res = plotwidget.plot(self.xs, self.ys, name=self.name, pen="r") #, **style)
|
|
# elif self.format == "Dots":
|
|
# print('Dots for positions')
|
|
# res = plotwidget.plot(self.xs, self.ys, name=self.name, pen=None, symbol="o") #, **style)
|
|
# else:
|
|
# res = plotwidget.plot(self.xs, self.ys, name=self.name, **style)
|
|
|
|
res = plotwidget.plot(self.xs, self.ys, name=self.name, **style)
|
|
if self.format == "time":
|
|
axis = DateAxisItem()
|
|
plotwidget.setAxisItems({'bottom':axis})
|
|
|
|
if self.title:
|
|
plotwidget.setTitle(self.title)
|
|
|
|
if self.xlabel:
|
|
plotwidget.setLabel("bottom", self.xlabel)
|
|
|
|
if self.ylabel:
|
|
plotwidget.setLabel("left", self.ylabel)
|
|
|
|
return res
|
|
|
|
|
|
def to_dict(self):
|
|
return {k: v for k, v in self.__dict__.items() if not k.startswith("_") and k != "name" and v is not None}
|
|
|
|
|
|
|