From e0300fea10c7f3ac651d9f8925f125a735bae5a5 Mon Sep 17 00:00:00 2001 From: Joris van Zwieten <zwieten@astron.nl> Date: Mon, 8 Feb 2010 09:25:39 +0000 Subject: [PATCH] Bug 1439: Fixed plotting of real valued parameters and improved plot labels. --- .../BBSControl/scripts/parmdbplot.py | 58 ++++++++++--------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/CEP/Calibration/BBSControl/scripts/parmdbplot.py b/CEP/Calibration/BBSControl/scripts/parmdbplot.py index 392da93d54c..b437af15436 100755 --- a/CEP/Calibration/BBSControl/scripts/parmdbplot.py +++ b/CEP/Calibration/BBSControl/scripts/parmdbplot.py @@ -167,9 +167,9 @@ def normalize(phase): return out -def plot(sol, fig, clf=True, sub=None, scatter=False, stack=False, sep=5.0, - sep_abs=False, labels=None, show_legend=False, title=None, xlabel=None, - ylabel=None): +def plot(fig, y, x=None, clf=True, sub=None, scatter=False, stack=False, + sep=5.0, sep_abs=False, labels=None, show_legend=False, title=None, + xlabel=None, ylabel=None): """ Plot a list of signals. @@ -205,29 +205,31 @@ def plot(sol, fig, clf=True, sub=None, scatter=False, stack=False, sep=5.0, if not ylabel is None: axes.set_ylabel(ylabel) + if x is None: + x = [range(len(yi)) for yi in y] + offset = 0.0 - for i in range(0,len(sol)): + for i in range(0,len(y)): if labels is None: if scatter: - axes.scatter(range(0, len(sol[i])), sol[i] + offset, - edgecolors="None", c=__styles[i % len(__styles)][0], - marker="o") + axes.scatter(x[i], y[i] + offset, edgecolors="None", + c=__styles[i % len(__styles)][0], marker="o") else: - axes.plot(sol[i] + offset, __styles[i % len(__styles)]) + axes.plot(x[i], y[i] + offset, __styles[i % len(__styles)]) else: if scatter: - axes.scatter(range(0, len(sol[i])), sol[i] + offset, - edgecolors="None", c=__styles[i % len(__styles)][0], - marker="o", label=labels[i]) + axes.scatter(x[i], y[i] + offset, edgecolors="None", + c=__styles[i % len(__styles)][0], marker="o", + label=labels[i]) else: - axes.plot(sol[i] + offset, __styles[i % len(__styles)], + axes.plot(x[i], y[i] + offset, __styles[i % len(__styles)], label=labels[i]) if stack: if sep_abs: offset += sep else: - offset += sol[i].mean() + sep * sol[i].std() + offset += y[i].mean() + sep * y[i].std() if not labels is None and show_legend: axes.legend(prop=FontProperties(size="x-small"), markerscale=0.5) @@ -290,10 +292,10 @@ class Parm: def _readDomain(self): if self._elements is None: self._domain = self._db.getRange(self.name()) - - domain_el0 = self._db.getRange(self._elements[0]) - domain_el1 = self._db.getRange(self._elements[1]) - self._domain = [max(domain_el0[0], domain_el1[0]), min(domain_el0[1], domain_el1[1]), max(domain_el0[2], domain_el1[2]), min(domain_el0[3], domain_el1[3])] + else: + domain_el0 = self._db.getRange(self._elements[0]) + domain_el1 = self._db.getRange(self._elements[1]) + self._domain = [max(domain_el0[0], domain_el1[0]), min(domain_el0[1], domain_el1[1]), max(domain_el0[2], domain_el1[2]), min(domain_el0[3], domain_el1[3])] self._empty = (self._domain[0] >= self._domain[1]) or (self._domain[2] >= self._domain[3]) @@ -383,7 +385,7 @@ class PlotWindow(QFrame): self.domain = common_domain(self.parms) - self.shape = (0, 0) + self.shape = (1, 1) if not self.domain is None: self.shape = (self.parms[0].value(self.domain, self.resolution)[0].shape) assert(len(self.shape) == 2) @@ -413,14 +415,18 @@ class PlotWindow(QFrame): el1.append(value[1][self.index, :]) labels.append(parm.name()) - legend = self.show_legend and len(labels) > 0 + xlabel = ["Time (sample)", "Freq (sample)"][self.axis] if self.polar: - plot(el0, self.fig, sub="211", labels=labels, show_legend=legend, title="Amplitude") - plot(el1, self.fig, clf=False, sub="212", stack=True, scatter=True, labels=labels, show_legend=legend, title="Phase", ylabel="Angle (rad)") + plot(self.fig, el0, sub="211", labels=labels, show_legend=legend, xlabel=xlabel, ylabel="Amplitude") + plot(self.fig, el1, clf=False, sub="212", stack=True, scatter=True, labels=labels, show_legend=legend, xlabel=xlabel, ylabel="Phase (rad)") else: - plot(el0, self.fig, sub="211", labels=labels, show_legend=legend, title="Real") - plot(el1, self.fig, clf=False, sub="212", labels=labels, show_legend=legend, title="Imaginary") + plot(self.fig, el0, sub="211", labels=labels, show_legend=legend, xlabel=xlabel, ylabel="Real") + plot(self.fig, el1, clf=False, sub="212", labels=labels, show_legend=legend, xlabel=xlabel, ylabel="Imaginary") + + # Set x-axis scale in number of samples. + for ax in self.fig.axes: + ax.set_xlim(0, self.shape[self.axis] - 1) self.canvas.draw() @@ -451,6 +457,8 @@ class MainWindow(QFrame): def __init__(self, db): QFrame.__init__(self) self.db = db + self.figures = [] + self.parms = [] # self.setWindowTitle("parmdbplot") @@ -490,8 +498,6 @@ class MainWindow(QFrame): self.setLayout(layout) - self.figures = [] - self.parms = [] self.populate() def populate(self): @@ -541,7 +547,7 @@ class MainWindow(QFrame): if not found: self.parms.append(Parm(self.db, name, elements, True)) else: - self.parms.append(Parm(self.db, name)) + self.parms.append(Parm(self.db, parm)) self.parms = [parm for parm in self.parms if not parm.empty()] self.parms.sort(cmp=lambda x, y: cmp(x.name(), y.name())) -- GitLab