Revision: 7086
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7086&view=rev
Author: ryanmay
Date: 2009-05-06 18:13:41 +0000 (Wed, 06 May 2009)
Log Message:
-----------
Add an example of an updating plot using (multi)processing. Credit goes to
Robert Cimrman.
Modified Paths:
--------------
trunk/matplotlib/CHANGELOG
Added Paths:
-----------
trunk/matplotlib/examples/misc/log.py
Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG 2009-05-05 17:27:23 UTC (rev 7085)
+++ trunk/matplotlib/CHANGELOG 2009-05-06 18:13:41 UTC (rev 7086)
@@ -1,9 +1,13 @@
======================================================================
-2009-05-05 Add Axes.get_legend_handles_labels method -JJL
+2009-05-05 Add an example that shows how to make a plot that updates
+ using data from another process. Thanks to Robert
+ Cimrman - RMM
-2009-05-04 Fix bug that Text.Annotation is still drawn while set to
- not visible.-JJL
+2009-05-05 Add Axes.get_legend_handles_labels method. - JJL
+2009-05-04 Fix bug that Text.Annotation is still drawn while set to
+ not visible. - JJL
+
2009-05-04 Added TJ's fill_betweenx patch - JDH
2009-05-02 Added options to plotfile based on question from
Added: trunk/matplotlib/examples/misc/log.py
===================================================================
--- trunk/matplotlib/examples/misc/log.py (rev 0)
+++ trunk/matplotlib/examples/misc/log.py 2009-05-06 18:13:41 UTC (rev
7086)
@@ -0,0 +1,87 @@
+#Demo of using multiprocessing for generating data in one process and plotting
+#in another.
+#Written by Robert Cimrman
+#Requires >= Python 2.6 for the multiprocessing module or having the
+#standalone processing module installed
+import time
+try:
+ from multiprocessing import Process, Pipe
+except ImportError:
+ from processing import Process, Pipe
+from Queue import Empty
+import numpy as np
+import pylab
+import gobject
+
+class ProcessPlotter(object):
+
+ def __init__(self):
+ self.x = []
+ self.y = []
+
+ def terminate(self):
+ pylab.close('all')
+
+ def poll_draw(self):
+
+ def call_back():
+ while 1:
+ if not self.pipe.poll():
+ break
+
+ command = self.pipe.recv()
+
+ if command is None:
+ self.terminate()
+ return False
+
+ else:
+ self.x.append(command[0])
+ self.y.append(command[1])
+ self.ax.plot(self.x, self.y, 'ro')
+
+ self.fig.canvas.draw()
+ return True
+
+ return call_back
+
+ def __call__(self, pipe):
+ print 'starting plotter...'
+
+ self.pipe = pipe
+ self.fig = pylab.figure()
+
+ self.ax = self.fig.add_subplot(111)
+ self.gid = gobject.timeout_add(1000, self.poll_draw())
+
+ print '...done'
+ pylab.show()
+
+
+class NBPlot(object):
+ def __init__(self):
+ self.plot_pipe, plotter_pipe = Pipe()
+ self.plotter = ProcessPlotter()
+ self.plot_process = Process(target = self.plotter,
+ args = (plotter_pipe,))
+ self.plot_process.daemon = True
+ self.plot_process.start()
+
+ def plot(self, finished=False):
+ send = self.plot_pipe.send
+ if finished:
+ send(None)
+ else:
+ data = np.random.random(2)
+ send(data)
+
+def main():
+ pl = NBPlot()
+ for ii in xrange(10):
+ pl.plot()
+ time.sleep(0.5)
+ raw_input('press Enter...')
+ pl.plot(finished=True)
+
+if __name__ == '__main__':
+ main()
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
The NEW KODAK i700 Series Scanners deliver under ANY circumstances! Your
production scanning environment may not be a perfect world - but thanks to
Kodak, there's a perfect scanner to get the job done! With the NEW KODAK i700
Series Scanner you'll get full speed at 300 dpi even with all image
processing features enabled. http://p.sf.net/sfu/kodak-com
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins