def draw(self, event=None): xnum = self.xnum.get() ynum = self.ynum.get() self.mode_projector.calculateProjections([xnum, ynum]) data = self.mode_projector[ynum] data[:, 0] = self.mode_projector[xnum][:, 1] self.plot.clear() self.plot.draw(PolyLine(data, color='red'))
def plot_objects(self, first_q, last_q, skip_q, first_t, last_t, skip_t): plot_objects1 = [] markers1 = [] color_index = 0 dt = (last_t - first_t + 150) / 150 for i in range(first_q, last_q, skip_q): data = self.fn[i, first_t:last_t:dt] data_t = self.t[first_t:last_t:dt] points = N.transpose(N.array([data_t, data])) plot_objects1.append( PolyLine(points, color=self.colors[color_index])) markers1.append(self.q[i], color_index) color_index = (color_index + 1) % len(self.colors) plot_objects2 = [] markers2 = [] color_index = 0 dq = (last_q - first_q + 150) / 150 for i in range(first_t, last_t, skip_t): data = self.fn[first_q:last_q:dq, i] data_q = self.q[first_q:last_q:dq] points = N.transpose(N.array([data_q, data])) plot_objects2.append( PolyLine(points, color=self.colors[color_index])) markers2.append(self.t[i], color_index) color_index = (color_index + 1) % len(self.colors) for q, color_index in markers1: plot_objects2.append( VerticalLine(q, color=self.colors[color_index], stipple='gray50')) for t, color_index in markers2: plot_objects1.append( VerticalLine(t, color=self.colors[color_index], stipple='gray50')) return plot_objects1, plot_objects2
def plotBox(self, name, data, data_range=None): box = Frame(self, border=2, relief=SUNKEN) box.pack(side=TOP, fill=BOTH, expand=YES) frame = Frame(box, background='grey') frame.pack(side=TOP, fill=X, expand=NO) Label(frame, text=string.capitalize(string.join(string.split(name, '_'), ' ')), background='grey').pack(side=LEFT) if data_range is None: min = Numeric.minimum.reduce(data[:, 1]) max = Numeric.maximum.reduce(data[:, 1]) min, max = plotRange(min, max) else: min, max = data_range plot_objects = [] plot_data = data time = plot_data[:, 0] jumps = Numeric.repeat(Numeric.arange(len(time) - 1), Numeric.less(time[1:], time[:-1])) + 1 for i in self.master.restarts: plot_objects.append( PolyLine([(self.time[i], min), (self.time[i], max)], color='black', stipple='gray25')) plot_objects.insert(0, PolyLine(plot_data, color='red')) plot = PlotCanvas(box, 400, 100, zoom=1, select=self.master._selectRange) plot.pack(side=LEFT, fill=BOTH, expand=YES) plot.draw(PlotGraphics(plot_objects), 'automatic', (min, max)) plot.bind('<Double-Button-1>', lambda event, d=plot_data: externalPlot(d)) self.registerPlot(plot) self.setSelection(plot)
def __init__(self, parent): self.master = parent self.ncurves = 3 # number of curves self.npoints = 20 # number of points on each curve # here we store data in plain NumPy arrays self.vector_x = zeros(self.npoints) # use a list of y vectors(0:self.ncurves-1) self.vector_y = [zeros(self.npoints) \ for y in range(self.ncurves)] self.fill_vectors() # fill the vectors with data for testing # make graph widget: self.g = PlotCanvas(self.master, 500, 300, zoom=True, relief='sunken', border=2) self.g.pack(expand=True, fill='both') # define a list of colors for the various curves: colors = ['red', 'yellow', 'blue', 'green', 'black', 'grey'] # plot each curve: # the x coordinates are in self.vector_x # the y coordinates are in self.vector_y[i] self.curves = [] for i in range(self.ncurves): xy_pairs = array([self.vector_x, self.vector_y[i]]).transpose() c = PolyLine(xy_pairs, width=1 + i, color=colors[i]) self.curves.append(c) object = PlotGraphics(self.curves) self.g.draw(object, xaxis='automatic', yaxis='automatic') self.buttons = Pmw.ButtonBox(self.master, labelpos='n', label_text='Options:') self.buttons.pack(fill='both', expand=True, padx=10, pady=10) # add buttons: self.buttons.add('Move points', command=self.animate) self.buttons.add('Postscript', command=self.postscript) self.buttons.add('Symbols', command=self.symbols) self.buttons.add('Quit', command=self.master.quit) self.buttons.alignbuttons() # nice loook...
def __init__(self, master, rb_projector): PlotWindow.__init__(self, master, "Rigid-body motion projections") plot_range = 0. for i in range(6): series = rb_projector[i][:, 1] lower = Numeric.minimum.reduce(series) upper = Numeric.maximum.reduce(series) lower, upper = plotRange(lower, upper) plot_range = max(plot_range, upper - lower) for column, offset, type in [(0, 0, "Translation "), (1, 3, "Rotation ")]: for i in range(3): data = rb_projector[i + offset] box = Frame(self, border=2, relief=SUNKEN) box.grid(row=i, column=column, sticky=N + W + E + S) frame = Frame(box, background='grey') frame.pack(side=TOP, fill=X, expand=NO) Label(frame, text=type + ["X", "Y", "Z"][i], background='grey').pack(side=LEFT) minv = Numeric.minimum.reduce(data[:, 1]) maxv = Numeric.maximum.reduce(data[:, 1]) minv, maxv = plotRange(minv, maxv) middle = 0.5 * (maxv + minv) if maxv - minv < plot_range: minv = middle - 0.5 * plot_range maxv = middle + 0.5 * plot_range plot_objects = [PolyLine(data, color='red')] plot = PlotCanvas(box, 400, 100, zoom=1, select=self.master._selectRange) plot.pack(side=LEFT, fill=BOTH, expand=YES) plot.draw(PlotGraphics(plot_objects), 'automatic', (minv, maxv)) plot.bind('<Double-Button-1>', lambda event, d=data: externalPlot(d)) self.registerPlot(plot) self.setSelection(plot)
def __init__(self, master, mode_projector, indices): from Scientific.Statistics import mean, standardDeviation title = "Normal mode projections (Temperature: %5.1f K)" \ % mode_projector.temperature PlotWindow.__init__(self, master, title) self.mode_projector = mode_projector plot_range = 0. for i in indices: series = mode_projector[i][:, 1] average = mean(series) deviation = standardDeviation(series) lower = Numeric.minimum.reduce(series) lower = min(lower, average - deviation) upper = Numeric.maximum.reduce(series) upper = max(upper, average + deviation) lower, upper = plotRange(lower, upper) plot_range = max(plot_range, upper - lower) nmodes = mode_projector.numberOfModes() for i in range(len(indices)): if indices[i] < 0: indices[i] = nmodes + indices[i] next_indices = [] step = indices[1] - indices[0] i = indices[-1] while len(next_indices) < 4: i = i + step if i >= nmodes: break next_indices.append(i) previous_indices = [] i = indices[0] while len(previous_indices) < 4: i = i - step if i < 6: break previous_indices.insert(0, i) if next_indices or previous_indices: frame = Frame(self) frame.pack(side=BOTTOM, fill=X, expand=YES) if previous_indices: Button(frame, text="Previous", command=lambda s=self, pi=previous_indices: s. modeProjection(pi)).pack(side=LEFT) if next_indices: Button(frame, text="Next", command=lambda s=self, ni=next_indices: s. modeProjection(ni)).pack(side=RIGHT) for i in range(len(indices)): number = indices[i] data = mode_projector[number] fluctuation = self.mode_projector.amplitude(number) average = mean(data[:, 1]) deviation = standardDeviation(data[:, 1]) box = Frame(self, border=2, relief=SUNKEN) box.pack(side=TOP, fill=BOTH, expand=YES) frame = Frame(box, background='grey') frame.pack(side=TOP, fill=X, expand=NO) Label(frame, text="Mode %d" % number, background='grey').pack(side=LEFT) Button(frame, text="Animation", background='grey', command=lambda s=self, n=number: s.animateMode(n, 1.)).pack( side=RIGHT) Button(frame, text="View", background='grey', command=lambda s=self, n=number: s.viewMode(n)).pack( side=RIGHT) minv = Numeric.minimum.reduce(data[:, 1]) maxv = Numeric.maximum.reduce(data[:, 1]) minv, maxv = plotRange(minv, maxv) middle = 0.5 * (maxv + minv) if maxv - minv < plot_range: minv = middle - 0.5 * plot_range maxv = middle + 0.5 * plot_range plot_objects = [ PolyLine([(data[1, 0], average - fluctuation), (data[1, 0], average + fluctuation)], color='blue', width=3), PolyLine([(data[-1, 0], average - deviation), (data[-1, 0], average + deviation)], color='green', width=3) ] plot_objects.insert(0, PolyLine(data, color='red')) plot = PlotCanvas(box, 400, 100, zoom=1, select=self.master._selectRange) plot.pack(side=LEFT, fill=BOTH, expand=YES) plot.draw(PlotGraphics(plot_objects), 'automatic', (minv, maxv)) plot.bind('<Double-Button-1>', lambda event, d=data: externalPlot(d)) self.registerPlot(plot) self.setSelection(plot)