Hi folks, I just created a tiny prototype of an 'oscilloscope'. I get live data from a robot via UDP. My network class calls the update() of the oscilloscope. The oscilloscope is part of an existing GTK app which runs on an Ubuntu.
I have three questions: 1) Since it's my first animation with matplotlib I'm not sure if this is really the best way to do it (probably not :)). I especially dislike the creation of np.array which could take a bit once I have a lot of data. 2) Is the integration in a GTK app like it is now ok or is there a better way? I don't want to loose the zoom and move ability of the standard plot figure though. And I need fast results so I don't want to spent to much time tweaking this. 3) I get a *weird* X error when calling the update method from the network class which probably doesn't have to do anything with matplotlib but I'm asking anyway :) robo...@robocup2-laptop:~/fumanoid/Desktop-Debug-YUV422$ ../install.py /usr/lib/pymodules/python2.6/matplotlib/backends/backend_gtk.py:621: DeprecationWarning: Use the new widget gtk.Tooltip test from 0: 254/508 The program 'install.py' received an X Window System error. This probably reflects a bug in the program. The error was 'RenderBadPicture (invalid Picture parameter)'. (Details: serial 11627 error_code 158 request_code 148 minor_code 7) (Note to programmers: normally, X errors are reported asynchronously; that is, you will receive the error a while after causing it. To debug your program, run it with the --sync command line option to change this behavior. You can then get a meaningful backtrace from your debugger if you break on the gdk_x_error() function.) Sometimes it crashes instantly, sometimes it works for a few calls. Calling update() from the interactive shell works fine though and displays everything. So I don't know if it's really X like the error message suggests or what. Did anybody of you experience something like this? This is the oscilloscope: import numpy as np import matplotlib #matplotlib.use('GTKAgg') # do this before importing pylab # does not really change anything import pylab import matplotlib.pyplot as plt class Oscilloscope(): def __init__(self): # var for a moving window; not implemented yet self.NO_OF_DATA_TO_PLOT = 0 plt.ion() self.fig = plt.figure() self.ax = self.fig.add_subplot(111) self.ax.grid() # list of raw data self.raw_data_x = [] self.raw_data_y = [] self.graph_lim = dict(x_min=None, x_max=None, y_min=None, y_max=None) # get line of data to be able to extend it later self.line, = self.ax.plot(np.array(self.raw_data_x), np.array(self.raw_data_y)) # open the figure window self.fig.canvas.draw() def update(self, x, y): """Draw new data consisting of x and y.""" print 'in update' self.raw_data_x.append(x) self.raw_data_y.append(y) # add new data self.line.set_xdata(np.array( self.raw_data_x)) self.line.set_ydata(np.array(self.raw_data_y)) # redraw the canvas self._limit_plot(x, y) self.fig.canvas.draw() Best, Stefan ------------------------------------------------------------------------------ _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users