Revision: 8019
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8019&view=rev
Author:   heeres
Date:     2009-12-10 23:32:41 +0000 (Thu, 10 Dec 2009)

Log Message:
-----------
mplot3d: support contours in directions other than z

Modified Paths:
--------------
    trunk/matplotlib/lib/mpl_toolkits/mplot3d/art3d.py
    trunk/matplotlib/lib/mpl_toolkits/mplot3d/axes3d.py
    trunk/matplotlib/lib/mpl_toolkits/mplot3d/axis3d.py

Added Paths:
-----------
    trunk/matplotlib/examples/mplot3d/contour3d_demo3.py

Added: trunk/matplotlib/examples/mplot3d/contour3d_demo3.py
===================================================================
--- trunk/matplotlib/examples/mplot3d/contour3d_demo3.py                        
        (rev 0)
+++ trunk/matplotlib/examples/mplot3d/contour3d_demo3.py        2009-12-10 
23:32:41 UTC (rev 8019)
@@ -0,0 +1,20 @@
+from mpl_toolkits.mplot3d import axes3d
+import matplotlib.pyplot as plt
+
+fig = plt.figure()
+ax = axes3d.Axes3D(fig)
+X, Y, Z = axes3d.get_test_data(0.05)
+ax.plot_surface(X, Y, Z, rstride=8, cstride=8, alpha=0.3)
+cset = ax.contour(X, Y, Z, zdir='z', offset=-100)
+cset = ax.contour(X, Y, Z, zdir='x', offset=-40)
+cset = ax.contour(X, Y, Z, zdir='y', offset=40)
+
+ax.set_xlabel('X')
+ax.set_xlim3d(-40, 40)
+ax.set_ylabel('Y')
+ax.set_ylim3d(-40, 40)
+ax.set_zlabel('Z')
+ax.set_zlim3d(-100, 100)
+
+plt.show()
+

Modified: trunk/matplotlib/lib/mpl_toolkits/mplot3d/art3d.py
===================================================================
--- trunk/matplotlib/lib/mpl_toolkits/mplot3d/art3d.py  2009-12-10 20:05:58 UTC 
(rev 8018)
+++ trunk/matplotlib/lib/mpl_toolkits/mplot3d/art3d.py  2009-12-10 23:32:41 UTC 
(rev 8019)
@@ -437,9 +437,15 @@
     Reorder coordinates so that zdir
     """
     if zdir == 'x':
+        return ys, zs, xs
+    elif zdir == '-x':
         return zs, xs, ys
+
     elif zdir == 'y':
-        return xs, zs, ys
+        return zs, xs, ys
+    elif zdir == '-y':
+        return ys, zs, xs
+
     else:
         return xs, ys, zs
 

Modified: trunk/matplotlib/lib/mpl_toolkits/mplot3d/axes3d.py
===================================================================
--- trunk/matplotlib/lib/mpl_toolkits/mplot3d/axes3d.py 2009-12-10 20:05:58 UTC 
(rev 8018)
+++ trunk/matplotlib/lib/mpl_toolkits/mplot3d/axes3d.py 2009-12-10 23:32:41 UTC 
(rev 8019)
@@ -839,10 +839,11 @@
         ==========  ================================================
         *X*, *Y*,   Data values as numpy.arrays
         *Z*
-        *levels*    Number of levels to use, defaults to 10. Can
-                    also be a tuple of specific levels.
         *extend3d*  Whether to extend contour in 3D (default: False)
         *stride*    Stride (step size) for extending contour
+        *zdir*      The direction to use: x, y or z (default)
+        *offset*    If specified plot a projection of the contour
+                    lines on this position in plane normal to zdir
         ==========  ================================================
 
         Other keyword arguments are passed on to
@@ -851,16 +852,22 @@
 
         extend3d = kwargs.pop('extend3d', False)
         stride = kwargs.pop('stride', 5)
-        nlevels = kwargs.pop('nlevels', 15)
+        zdir = kwargs.pop('zdir', 'z')
+        offset = kwargs.pop('offset', None)
 
         had_data = self.has_data()
-        cset = Axes.contour(self, X, Y, Z, levels, **kwargs)
 
+        jX, jY, jZ = art3d.juggle_axes(X, Y, Z, zdir)
+        cset = Axes.contour(self, jX, jY, jZ, **kwargs)
+
+        zdir = '-' + zdir
         if extend3d:
             self._3d_extend_contour(cset, stride)
         else:
             for z, linec in zip(cset.levels, cset.collections):
-                art3d.line_collection_2d_to_3d(linec, z)
+                if offset is not None:
+                    z = offset
+                art3d.line_collection_2d_to_3d(linec, z, zdir=zdir)
 
         self.auto_scale_xyz(X, Y, Z, had_data)
         return cset

Modified: trunk/matplotlib/lib/mpl_toolkits/mplot3d/axis3d.py
===================================================================
--- trunk/matplotlib/lib/mpl_toolkits/mplot3d/axis3d.py 2009-12-10 20:05:58 UTC 
(rev 8018)
+++ trunk/matplotlib/lib/mpl_toolkits/mplot3d/axis3d.py 2009-12-10 23:32:41 UTC 
(rev 8019)
@@ -57,11 +57,11 @@
 
     # Some properties for the axes
     _AXINFO = {
-        'x': {'i': 0, 'tickdir': 1,
+        'x': {'i': 0, 'tickdir': 1, 'juggled': (1, 0, 2),
             'color': (0.95, 0.95, 0.95, 0.5)},
-        'y': {'i': 1, 'tickdir': 0,
+        'y': {'i': 1, 'tickdir': 0, 'juggled': (0, 1, 2),
             'color': (0.90, 0.90, 0.90, 0.5)},
-        'z': {'i': 2, 'tickdir': 0,
+        'z': {'i': 2, 'tickdir': 0, 'juggled': (0, 2, 1),
             'color': (0.925, 0.925, 0.925, 0.5)},
     }
 
@@ -191,7 +191,7 @@
         minmax = np.where(highs, maxs, mins)
 
         # Draw main axis line
-        juggled = art3d.juggle_axes(0, 2, 1, self.adir)
+        juggled = info['juggled']
         edgep1 = minmax.copy()
         edgep1[juggled[0]] = get_flip_min_max(edgep1, juggled[0], mins, maxs)
 


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

------------------------------------------------------------------------------
Return on Information:
Google Enterprise Search pays you back
Get the facts.
http://p.sf.net/sfu/google-dev2dev
_______________________________________________
Matplotlib-checkins mailing list
Matplotlib-checkins@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to