Revision: 7429
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7429&view=rev
Author:   jdh2358
Date:     2009-08-08 13:53:24 +0000 (Sat, 08 Aug 2009)

Log Message:
-----------
two new examples using a compund path for a histogram; one animated

Added Paths:
-----------
    branches/v0_99_maint/examples/animation/histogram_tkagg.py
    branches/v0_99_maint/examples/api/histogram_path_demo.py

Added: branches/v0_99_maint/examples/animation/histogram_tkagg.py
===================================================================
--- branches/v0_99_maint/examples/animation/histogram_tkagg.py                  
        (rev 0)
+++ branches/v0_99_maint/examples/animation/histogram_tkagg.py  2009-08-08 
13:53:24 UTC (rev 7429)
@@ -0,0 +1,78 @@
+"""
+This example shows how to use a path patch to draw a bunch of
+rectangles.  The technique of using lots of Rectangle instances, or
+the faster method of using PolyCollections, were implemented before we
+had proper paths with moveto/lineto, closepoly etc in mpl.  Now that
+we have them, we can draw collections of regularly shaped objects with
+homogeous properties more efficiently with a PathCollection.  This
+example makes a histogram -- its more work to set up the vertex arrays
+at the outset, but it should be much faster for large numbers of
+objects
+"""
+import time
+import numpy as np
+import matplotlib
+matplotlib.use('TkAgg') # do this before importing pylab
+
+import matplotlib.pyplot as plt
+import matplotlib.patches as patches
+import matplotlib.path as path
+
+fig = plt.figure()
+ax = fig.add_subplot(111)
+
+# histogram our data with numpy
+data = np.random.randn(1000)
+n, bins = np.histogram(data, 100)
+
+# get the corners of the rectangles for the histogram
+left = np.array(bins[:-1])
+right = np.array(bins[1:])
+bottom = np.zeros(len(left))
+top = bottom + n
+nrects = len(left)
+
+# here comes the tricky part -- we have to set up the vertex and path
+# codes arrays using moveto, lineto and closepoly
+
+# for each rect: 1 for the MOVETO, 3 for the LINETO, 1 for the
+# CLOSEPOLY; the vert for the closepoly is ignored but we still need
+# it to keep the codes aligned with the vertices
+nverts = nrects*(1+3+1)
+verts = np.zeros((nverts, 2))
+codes = np.ones(nverts, int) * path.Path.LINETO
+codes[0::5] = path.Path.MOVETO
+codes[4::5] = path.Path.CLOSEPOLY
+verts[0::5,0] = left
+verts[0::5,1] = bottom
+verts[1::5,0] = left
+verts[1::5,1] = top
+verts[2::5,0] = right
+verts[2::5,1] = top
+verts[3::5,0] = right
+verts[3::5,1] = bottom
+
+barpath = path.Path(verts, codes)
+patch = patches.PathPatch(barpath, facecolor='green', edgecolor='yellow', 
alpha=0.5)
+ax.add_patch(patch)
+
+ax.set_xlim(left[0], right[-1])
+ax.set_ylim(bottom.min(), top.max())
+
+def animate():
+    tstart = time.time()                   # for profiling
+    # simulate new data coming in
+    data = np.random.randn(1000)
+    n, bins = np.histogram(data, 100)
+    top = bottom + n
+    verts[1::5,1] = top
+    verts[2::5,1] = top
+    fig.canvas.draw()
+
+def run():
+    for i in range(100):
+        fig.canvas.manager.window.after(100, animate)
+
+
+fig.canvas.manager.window.after(100, run)
+plt.show()

Added: branches/v0_99_maint/examples/api/histogram_path_demo.py
===================================================================
--- branches/v0_99_maint/examples/api/histogram_path_demo.py                    
        (rev 0)
+++ branches/v0_99_maint/examples/api/histogram_path_demo.py    2009-08-08 
13:53:24 UTC (rev 7429)
@@ -0,0 +1,59 @@
+"""
+This example shows how to use a path patch to draw a bunch of
+rectangles.  The technique of using lots of Rectangle instances, or
+the faster method of using PolyCollections, were implemented before we
+had proper paths with moveto/lineto, closepoly etc in mpl.  Now that
+we have them, we can draw collections of regularly shaped objects with
+homogeous properties more efficiently with a PathCollection.  This
+example makes a histogram -- its more work to set up the vertex arrays
+at the outset, but it should be much faster for large numbers of
+objects
+"""
+
+import numpy as np
+import matplotlib.pyplot as plt
+import matplotlib.patches as patches
+import matplotlib.path as path
+
+fig = plt.figure()
+ax = fig.add_subplot(111)
+
+# histogram our data with numpy
+data = np.random.randn(1000)
+n, bins = np.histogram(data, 100)
+
+# get the corners of the rectangles for the histogram
+left = np.array(bins[:-1])
+right = np.array(bins[1:])
+bottom = np.zeros(len(left))
+top = bottom + n
+nrects = len(left)
+
+# here comes the tricky part -- we have to set up the vertex and path
+# codes arrays using moveto, lineto and closepoly
+
+# for each rect: 1 for the MOVETO, 3 for the LINETO, 1 for the
+# CLOSEPOLY; the vert for the closepoly is ignored but we still need
+# it to keep the codes aligned with the vertices
+nverts = nrects*(1+3+1)
+verts = np.zeros((nverts, 2))
+codes = np.ones(nverts, int) * path.Path.LINETO
+codes[0::5] = path.Path.MOVETO
+codes[4::5] = path.Path.CLOSEPOLY
+verts[0::5,0] = left
+verts[0::5,1] = bottom
+verts[1::5,0] = left
+verts[1::5,1] = top
+verts[2::5,0] = right
+verts[2::5,1] = top
+verts[3::5,0] = right
+verts[3::5,1] = bottom
+
+barpath = path.Path(verts, codes)
+patch = patches.PathPatch(barpath, facecolor='green', edgecolor='yellow', 
alpha=0.5)
+ax.add_patch(patch)
+
+ax.set_xlim(left[0], right[-1])
+ax.set_ylim(bottom.min(), top.max())
+
+plt.show()


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to