On Fri, Mar 28, 2008 at 8:20 AM, Matthias Michler <[EMAIL PROTECTED]> wrote: > On Friday 28 March 2008 13:57, Chris Withers wrote: > > Matthias Michler wrote: > > > I'm not sure it is the easiest way, but it works for me: > > > > > > for label in ax.xaxis.get_majorticklabels(): > > > label.set_rotation(+90) > > > > Yes, that's what I was using, just wondered if there was a better way... > > At least I don't know a better way, but I'm not an expert. > > > > >> Also, how would I get this kind of updating with bar charts or > > >> errorbars? > > > > > > In the case of bar charts and errorbars it is quite difficult to reset > > > the data. > > > > Oh, I also meant to ask about scatter, can the data be easilly reset there? > > Scatter returns a line collection and I don't know if there is a method to > reset their x/ydata.
We do not have good built in support for this kind of thing (though we should add it). One approach is to write a custom artist, as in this example. I'm using GTK only for the idle handling callback, but you can use whatever approach works for you. The important part is the example showing how to write a custom artist for dynamic data: import gtk import numpy as np import matplotlib matplotlib.use('GTKAgg') import matplotlib.pyplot as plt import matplotlib.artist as artist import matplotlib.colors as colors import matplotlib.agg as agg class DynamicMarkers(artist.Artist): def __init__(self, buffersize=30): artist.Artist.__init__(self) self.buffersize = buffersize self.x = [] self.y = [] self.count = 0 self.path = None self.markersize = 10. self.facecolor = colors.colorConverter.to_rgb('blue') self.edgecolor = colors.colorConverter.to_rgb('black') def add(self, x, y): self.count+=1 self.x.append(x) self.y.append(y) if self.count>self.buffersize: del self.x[0] del self.y[0] def draw(self, renderer): if self.axes is None: raise RuntimeError('you must first add me to the axes') if self.path is None: # use square markers side = renderer.points_to_pixels(self.markersize) offset = side*0.5 path = agg.path_storage() path.move_to(-offset, -offset) path.line_to(-offset, offset) path.line_to(offset, offset) path.line_to(offset, -offset) path.end_poly() self.path = path gc = renderer.new_gc() self._set_gc_clip(gc) # Artist method gc.set_foreground(self.edgecolor) renderer.draw_markers(gc, self.path, self.facecolor, self.x, self.y, self.get_transform()) fig = plt.figure() ax = fig.add_subplot(111) myline = DynamicMarkers(30) ax.add_artist(myline) ax.set_xlim(-20, 1) ax.set_ylim(0,1) def animate(*args): i = animate.i print 'animate', i myline.add(i, np.random.rand()) ax.set_xlim(i-30, i+1) fig.canvas.draw() animate.i += 1 if animate.i<200: return True else: return False gtk.idle_add(animate) animate.i = 0 plt.show() ------------------------------------------------------------------------- Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users