From: John H. <jdh...@ac...> - 2003-05-28 17:16:35
|
Golawala> Hi, I just discovered the matplotlib.matlab Golawala> libraries. I am trying to create a dynamic graph using Golawala> this library. So far I am only able to create a static Golawala> view of the grap. Is is possible to create a graph that Golawala> is dynamic? (Example: in windows if you select task Golawala> manager you get a graph that shows you dynamic Golawala> information about the CPU and Memory Usage history.) I Golawala> just want to repaint the graph rather than closing it Golawala> and re-showing it. Yes, this is possible. The two key ingredients are 1) the use of the gtk.timeout_add function which will repeatedly call a function of your choice and 2) call the relevant axis/line/patch methods to update your figure. Here is an example, that resets the x and y data of the plot every 1000 milliseconds import pygtk pygtk.require('2.0') import gtk from matplotlib.matlab import * fig = figure(1) ind = arange(30) X = rand(len(ind),10) lines = plot(X[:,0], 'o') def updatefig(*args): lines[0].set_data(ind, X[:,updatefig.count]) fig.draw() updatefig.count += 1 if updatefig.count<10: return gtk.TRUE else: return gtk.FALSE updatefig.count = 0 gtk.timeout_add(1000, updatefig) show() The timeout_add function will only keep calling your method as long as you return gtk.TRUE. So in the example above, I return False after the 10 columns of my random matrix X are plotted. You can control other attributes of the line in a similar way, eg, by calling set_color, set_linewidth, etc.... If you want to use technique with bar, hist, or scatter (which return Patch instances), you'll have to wait a few minutes while I update the code, because I haven't added a set data method for those classes. John Hunter |