Newer
Older
Nicolas Nunez Barreto
committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/usr/bin/env python3
import numpy as np
import PyQt5 # make sure pyqtgraph imports Qt5
import pyqtgraph
from artiq.applets.simple import TitleApplet
class XYPlot(pyqtgraph.PlotWidget):
def __init__(self, args):
pyqtgraph.PlotWidget.__init__(self)
self.args = args
def data_changed(self, data, mods, title):
try:
y0 = data[self.args.y][1]
no_chunk = data[self.args.no_chunk][1]
#no_frequencies = data[self.args.no_frequencies][1]
y = np.reshape(y0, (no_chunk,-1)).sum(axis=0)
#y = np.reshape(y0, (no_frequencies,-1)).sum(axis=1)
#print(y)
except KeyError:
return
x = data.get(self.args.x, (False, None))[1]
if x is None:
x = np.arange(len(y))
error = data.get(self.args.error, (False, None))[1]
fit = data.get(self.args.fit, (False, None))[1]
if not len(y) or len(y) != len(x):
return
if error is not None and hasattr(error, "__len__"):
if not len(error):
error = None
elif len(error) != len(y):
return
if fit is not None:
if not len(fit):
fit = None
elif len(fit) != len(y):
return
self.clear()
self.plot(x, y, pen=None, symbol="x")
self.setTitle(title)
if error is not None:
# See https://github.com/pyqtgraph/pyqtgraph/issues/211
if hasattr(error, "__len__") and not isinstance(error, np.ndarray):
error = np.array(error)
errbars = pyqtgraph.ErrorBarItem(
x=np.array(x), y=np.array(y), height=error)
self.addItem(errbars)
if fit is not None:
xi = np.argsort(x)
self.plot(x[xi], fit[xi])
def main():
applet = TitleApplet(XYPlot)
applet.add_dataset("y", "Y values")
applet.add_dataset("no_chunk", "Chunk size")
#applet.add_dataset("no_frequencies", "Chunk size")
applet.add_dataset("x", "X values", required=False)
applet.add_dataset("error", "Error bars for each X value", required=False)
applet.add_dataset("fit", "Fit values for each X value", required=False)
applet.run()
if __name__ == "__main__":
main()