Revision: 7426
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7426&view=rev
Author: jdh2358
Date: 2009-08-08 11:00:41 +0000 (Sat, 08 Aug 2009)
Log Message:
-----------
replace list comps w/ numpy in mplot3d
Modified Paths:
--------------
branches/v0_99_maint/lib/mpl_toolkits/mplot3d/art3d.py
branches/v0_99_maint/lib/mpl_toolkits/mplot3d/axes3d.py
branches/v0_99_maint/lib/mpl_toolkits/mplot3d/axis3d.py
branches/v0_99_maint/lib/mpl_toolkits/mplot3d/proj3d.py
Modified: branches/v0_99_maint/lib/mpl_toolkits/mplot3d/art3d.py
===================================================================
--- branches/v0_99_maint/lib/mpl_toolkits/mplot3d/art3d.py 2009-08-08
06:24:00 UTC (rev 7425)
+++ branches/v0_99_maint/lib/mpl_toolkits/mplot3d/art3d.py 2009-08-08
11:00:41 UTC (rev 7426)
@@ -92,6 +92,7 @@
def set_3d_properties(self, zs=0, zdir='z'):
xs = self.get_xdata()
ys = self.get_ydata()
+
try:
zs = float(zs)
zs = [zs for x in xs]
@@ -116,7 +117,7 @@
'''Convert a path to a 3D segment.'''
if not iterable(zs):
- zs = [zs] * len(path)
+ zs = np.ones(len(path)) * zs
seg = []
pathsegs = path.iter_segments(simplify=False, curves=False)
@@ -131,7 +132,7 @@
'''
if not iterable(zs):
- zs = [zs] * len(paths)
+ zs = np.ones(len(paths)) * zs
segments = []
for path, pathz in zip(paths, zs):
@@ -192,7 +193,8 @@
def set_3d_properties(self, verts, zs=0, zdir='z'):
if not iterable(zs):
- zs = [zs] * len(verts)
+ zs = np.ones(len(verts)) * zs
+
self._segment3d = [juggle_axes(x, y, z, zdir) \
for ((x, y), z) in zip(verts, zs)]
self._facecolor3d = Patch.get_facecolor(self)
Modified: branches/v0_99_maint/lib/mpl_toolkits/mplot3d/axes3d.py
===================================================================
--- branches/v0_99_maint/lib/mpl_toolkits/mplot3d/axes3d.py 2009-08-08
06:24:00 UTC (rev 7425)
+++ branches/v0_99_maint/lib/mpl_toolkits/mplot3d/axes3d.py 2009-08-08
11:00:41 UTC (rev 7426)
@@ -58,7 +58,7 @@
xticks=[], yticks=[], *args, **kwargs)
self.M = None
-
+
self._ready = 1
self.mouse_init()
self.create_axes()
@@ -184,7 +184,7 @@
def autoscale_view(self, scalex=True, scaley=True, scalez=True):
# This method looks at the rectanglular volume (see above)
# of data and decides how to scale the view portal to fit it.
-
+
self.set_top_view()
if not self._ready:
return
@@ -534,7 +534,7 @@
# Match length
if not cbook.iterable(zs):
- zs = [zs] * len(xs)
+ zs = np.ones(len(xs)) * zs
lines = Axes.plot(self, xs, ys, *args[argsi:], **kwargs)
for line in lines:
@@ -552,7 +552,7 @@
By default it will be colored in shades of a solid color,
but it also supports color mapping by supplying the *cmap*
argument.
-
+
========== ================================================
Argument Description
========== ================================================
@@ -648,7 +648,7 @@
shade = np.array(shade)
mask = ~np.isnan(shade)
- if len(shade[mask]) > 0:
+ if len(shade[mask]) > 0:
norm = Normalize(min(shade[mask]), max(shade[mask]))
color = color.copy()
color[3] = 1
@@ -679,7 +679,7 @@
rstride = kwargs.pop("rstride", 1)
cstride = kwargs.pop("cstride", 1)
-
+
had_data = self.has_data()
rows, cols = Z.shape
@@ -708,7 +708,7 @@
def _3d_extend_contour(self, cset, stride=5):
'''
- Extend a contour in 3D by creating
+ Extend a contour in 3D by creating
'''
levels = cset.levels
@@ -742,7 +742,7 @@
v1 = np.array(topverts[0][i1]) - np.array(topverts[0][i2])
v2 = np.array(topverts[0][i1]) - np.array(botverts[0][i1])
normals.append(np.cross(v1, v2))
-
+
colors = self._shade_colors(color, normals)
colors2 = self._shade_colors(color, normals)
polycol = art3d.Poly3DCollection(polyverts, facecolors=colors,
@@ -811,13 +811,13 @@
self.auto_scale_xyz(X, Y, Z, had_data)
return cset
-
+
contourf3D = contourf
def add_collection3d(self, col, zs=0, zdir='z'):
'''
Add a 3d collection object to the plot.
-
+
2D collection types are converted to a 3D version by
modifying the object and adding z coordinate information.
@@ -865,7 +865,7 @@
patches = Axes.scatter(self, xs, ys, *args, **kwargs)
if not cbook.iterable(zs):
is_2d = True
- zs = [zs] * len(xs)
+ zs = np.ones(len(xs)) * zs
else:
is_2d = False
art3d.patch_collection_2d_to_3d(patches, zs=zs, zdir=zdir)
@@ -903,8 +903,9 @@
patches = Axes.bar(self, left, height, *args, **kwargs)
if not cbook.iterable(zs):
- zs = [zs] * len(left)
+ zs = np.ones(len(left))*zs
+
verts = []
verts_zs = []
for p, z in zip(patches, zs):
Modified: branches/v0_99_maint/lib/mpl_toolkits/mplot3d/axis3d.py
===================================================================
--- branches/v0_99_maint/lib/mpl_toolkits/mplot3d/axis3d.py 2009-08-08
06:24:00 UTC (rev 7425)
+++ branches/v0_99_maint/lib/mpl_toolkits/mplot3d/axis3d.py 2009-08-08
11:00:41 UTC (rev 7426)
@@ -22,6 +22,7 @@
def move_from_center(coord, centers, deltas, axmask=(True, True, True)):
'''Return a coordinate that is moved by "deltas" away from the center.'''
coord = copy.copy(coord)
+ #print coord, centers, deltas, axmask
for i in range(3):
if not axmask[i]:
continue
@@ -84,7 +85,7 @@
alpha=0.8,
facecolor=(1,1,1,0),
edgecolor=(1,1,1,0))
-
+
self.axes._set_artist_props(self.line)
self.axes._set_artist_props(self.pane)
self.gridlines = art3d.Line3DCollection([], )
@@ -141,7 +142,7 @@
# code from XAxis
majorTicks = self.get_major_ticks()
majorLocs = self.major.locator()
-
+
# filter locations here so that no extra grid lines are drawn
interval = self.get_view_interval()
majorLocs = [loc for loc in majorLocs if \
@@ -152,19 +153,20 @@
# Determine bounds
minx, maxx, miny, maxy, minz, maxz = self.axes.get_w_lims()
- mins = (minx, miny, minz)
- maxs = (maxx, maxy, maxz)
- centers = [(maxv + minv) / 2 for minv, maxv in zip(mins, maxs)]
- deltas = [(maxv - minv) / 12 for minv, maxv in zip(mins, maxs)]
- mins = [minv - delta / 4 for minv, delta in zip(mins, deltas)]
- maxs = [maxv + delta / 4 for maxv, delta in zip(maxs, deltas)]
+ mins = np.array((minx, miny, minz))
+ maxs = np.array((maxx, maxy, maxz))
+ centers = (maxs + mins) / 2.
+ deltas = (maxs - mins) / 12.
+ mins = mins - deltas / 4.
+ maxs = maxs + deltas / 4.
# Determine which planes should be visible by the avg z value
vals = mins[0], maxs[0], mins[1], maxs[1], mins[2], maxs[2]
tc = self.axes.tunit_cube(vals, renderer.M)
+ #raise RuntimeError('WTF: p1=%s'%p1)
avgz = [tc[p1][2] + tc[p2][2] + tc[p3][2] + tc[p4][2] for \
p1, p2, p3, p4 in self._PLANES]
- highs = [avgz[2*i] < avgz[2*i+1] for i in range(3)]
+ highs = np.array([avgz[2*i] < avgz[2*i+1] for i in range(3)])
# Draw plane
info = self._AXINFO[self.adir]
@@ -178,18 +180,14 @@
self.pane.draw(renderer)
# Determine grid lines
- minmax = []
- for i, val in enumerate(highs):
- if val:
- minmax.append(maxs[i])
- else:
- minmax.append(mins[i])
+ minmax = np.where(highs, maxs, mins)
# Draw main axis line
juggled = art3d.juggle_axes(0, 2, 1, self.adir)
- edgep1 = copy.copy(minmax)
+ edgep1 = minmax.copy()
edgep1[juggled[0]] = get_flip_min_max(edgep1, juggled[0], mins, maxs)
- edgep2 = copy.copy(edgep1)
+
+ edgep2 = edgep1.copy()
edgep2[juggled[1]] = get_flip_min_max(edgep2, juggled[1], mins, maxs)
pep = proj3d.proj_trans_points([edgep1, edgep2], renderer.M)
self.line.set_data((pep[0][0], pep[0][1]), (pep[1][0], pep[1][1]))
@@ -198,15 +196,17 @@
# Grid points where the planes meet
xyz0 = []
for val in majorLocs:
- coord = copy.copy(minmax)
+ coord = minmax.copy()
coord[index] = val
xyz0.append(coord)
# Draw labels
dy = pep[1][1] - pep[1][0]
dx = pep[0][1] - pep[0][0]
- lxyz = [(v1 + v2) / 2 for v1, v2 in zip(edgep1, edgep2)]
- labeldeltas = [1.3 * x for x in deltas]
+
+ lxyz = 0.5*(edgep1 + edgep2)
+
+ labeldeltas = 1.3 * deltas
lxyz = move_from_center(lxyz, centers, labeldeltas)
tlx, tly, tlz = proj3d.proj_transform(lxyz[0], lxyz[1], lxyz[2], \
renderer.M)
@@ -293,7 +293,7 @@
def get_data_interval(self):
'return the Interval instance for this axis data limits'
return self.axes.xy_dataLim.intervaly
-
+
class ZAxis(Axis):
def get_data_interval(self):
'return the Interval instance for this axis data limits'
Modified: branches/v0_99_maint/lib/mpl_toolkits/mplot3d/proj3d.py
===================================================================
--- branches/v0_99_maint/lib/mpl_toolkits/mplot3d/proj3d.py 2009-08-08
06:24:00 UTC (rev 7425)
+++ branches/v0_99_maint/lib/mpl_toolkits/mplot3d/proj3d.py 2009-08-08
11:00:41 UTC (rev 7426)
@@ -10,15 +10,8 @@
import numpy as np
import numpy.linalg as linalg
-def cross(a, b):
- """
- Cross product of two vectors
- A x B = <Ay*Bz - Az*By, Az*Bx - Ax*Bz, Ax*By - Ay*Bx>
- a x b = [a2b3 - a3b2, a3b1 - a1b3, a1b2 - a2b1]
- """
- return np.array([a[1]*b[2] - a[2]*b[1], a[2]*b[0] - a[0]*b[2], \
- a[0]*b[1] - a[1]*b[0]])
+
def line2d(p0, p1):
"""
Return 2D equation of line in the form ax+by+c = 0
@@ -130,9 +123,9 @@
## old
n = n / mod(n)
- u = cross(V, n)
+ u = np.cross(V, n)
u = u / mod(u)
- v = cross(n, u)
+ v = np.cross(n, u)
Mr = [[u[0],u[1],u[2],0],
[v[0],v[1],v[2],0],
[n[0],n[1],n[2],0],
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