|
From: <wea...@us...> - 2011-01-13 19:07:18
|
Revision: 8915
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8915&view=rev
Author: weathergod
Date: 2011-01-13 19:07:12 +0000 (Thu, 13 Jan 2011)
Log Message:
-----------
contourf3d can now project the filled contour onto a particular plane
much like how contour3d can do with contour lines using zdir and offset
arguments.
Modified Paths:
--------------
trunk/matplotlib/CHANGELOG
trunk/matplotlib/lib/mpl_toolkits/mplot3d/axes3d.py
Added Paths:
-----------
trunk/matplotlib/examples/mplot3d/contourf3d_demo2.py
Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG 2011-01-13 13:58:37 UTC (rev 8914)
+++ trunk/matplotlib/CHANGELOG 2011-01-13 19:07:12 UTC (rev 8915)
@@ -1,3 +1,6 @@
+2011-01-13 Added zdir and offset arguments to contourf3d to
+ bring contourf3d in feature parity with contour3d. - BVR
+
2011-01-04 Tag 1.0.1 for release at r8896
2011-01-03 Added display of ticker offset to 3d plots. - BVR
Added: trunk/matplotlib/examples/mplot3d/contourf3d_demo2.py
===================================================================
--- trunk/matplotlib/examples/mplot3d/contourf3d_demo2.py (rev 0)
+++ trunk/matplotlib/examples/mplot3d/contourf3d_demo2.py 2011-01-13 19:07:12 UTC (rev 8915)
@@ -0,0 +1,20 @@
+from mpl_toolkits.mplot3d import axes3d
+import matplotlib.pyplot as plt
+
+fig = plt.figure()
+ax = fig.gca(projection='3d')
+X, Y, Z = axes3d.get_test_data(0.05)
+ax.plot_surface(X, Y, Z, rstride=8, cstride=8, alpha=0.3)
+cset = ax.contourf(X, Y, Z, zdir='z', offset=-100)
+cset = ax.contourf(X, Y, Z, zdir='x', offset=-40)
+cset = ax.contourf(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/axes3d.py
===================================================================
--- trunk/matplotlib/lib/mpl_toolkits/mplot3d/axes3d.py 2011-01-13 13:58:37 UTC (rev 8914)
+++ trunk/matplotlib/lib/mpl_toolkits/mplot3d/axes3d.py 2011-01-13 19:07:12 UTC (rev 8915)
@@ -941,6 +941,14 @@
z = offset
art3d.line_collection_2d_to_3d(linec, z, zdir=zdir)
+ def add_contourf_set(self, cset, zdir='z', offset=None) :
+ zdir = '-' + zdir
+ for z, linec in zip(cset.levels, cset.collections) :
+ if offset is not None :
+ z = offset
+ art3d.poly_collection_2d_to_3d(linec, z, zdir=zdir)
+ linec.set_sort_zpos(z)
+
def contour(self, X, Y, Z, *args, **kwargs):
'''
Create a 3D contour plot.
@@ -1017,9 +1025,17 @@
def contourf(self, X, Y, Z, *args, **kwargs):
'''
- Plot filled 3D contours.
+ Create a 3D contourf plot.
- *X*, *Y*, *Z*: data points.
+ ========== ================================================
+ Argument Description
+ ========== ================================================
+ *X*, *Y*, Data values as numpy.arrays
+ *Z*
+ *zdir* The direction to use: x, y or z (default)
+ *offset* If specified plot a projection of the filled contour
+ on this position in plane normal to zdir
+ ========== ================================================
The positional and keyword arguments are passed on to
:func:`~matplotlib.axes.Axes.contourf`
@@ -1027,14 +1043,14 @@
Returns a :class:`~matplotlib.axes.Axes.contourf`
'''
+ zdir = kwargs.pop('zdir', 'z')
+ offset = kwargs.pop('offset', None)
+
had_data = self.has_data()
- cset = Axes.contourf(self, X, Y, Z, *args, **kwargs)
- levels = cset.levels
- colls = cset.collections
- for z1, z2, linec in zip(levels, levels[1:], colls):
- art3d.poly_collection_2d_to_3d(linec, z1)
- linec.set_sort_zpos(z1)
+ jX, jY, jZ = art3d.rotate_axes(X, Y, Z, zdir)
+ cset = Axes.contourf(self, jX, jY, jZ, *args, **kwargs)
+ self.add_contourf_set(cset, zdir, offset)
self.auto_scale_xyz(X, Y, Z, had_data)
return cset
@@ -1063,17 +1079,10 @@
Returns a :class:`~matplotlib.axes.Axes.contour`
'''
- zdir = '-' + zdir
had_data = self.has_data()
cset = Axes.tricontourf(self, X, Y, Z, *args, **kwargs)
- levels = cset.levels
- colls = cset.collections
- for z1, linec in zip(levels, colls):
- if offset is not None:
- z1 = offset
- art3d.poly_collection_2d_to_3d(linec, z1, zdir=zdir)
- linec.set_sort_zpos(z1)
+ self.add_contourf_set(cset, zdir, offset)
self.auto_scale_xyz(X, Y, Z, had_data)
return cset
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|