Hello,
I have been noticing odd behaviors when plotting polygons and surfaces using
mplot3d. Some polygon faces were being slightly transparent, for example
when you rotate the sphere in the 'surface3d_demo2.py' example. Some faces
were completely missing, for example in the 'hist3d_demo.py' example. In
the surface3d_demo3.py example, I wasn't fully happy with the appearance of
the plot and I was fairly sure it wasn't 100% correct.
I believe I have the problem tracked down to the "_shade_colors()" method in
axes3d.py. I have a patch and it needs to be applied to both the
development branch and one for the release candidate. However, I am almost
certain that it could break some others 3d display code and I would like
people to check it out first before it gets applied.
The 'mplot3d_vectshade.patch' can be used against the current development
branch, while 'mplot3d_vectshade_rc2.patch' can be used against the latest
in the maintenance branch.
Thanks, and I would greatly appreciate your input!
Ben Root
Index: lib/mpl_toolkits/mplot3d/axes3d.py
===
--- lib/mpl_toolkits/mplot3d/axes3d.py (revision 8898)
+++ lib/mpl_toolkits/mplot3d/axes3d.py (working copy)
@@ -818,13 +818,13 @@
if len(shade[mask]) > 0:
norm = Normalize(min(shade[mask]), max(shade[mask]))
-if art3d.iscolor(color):
-color = color.copy()
-color[3] = 1
-colors = np.outer(0.5 + norm(shade) * 0.5, color)
-else:
-colors = colorConverter.to_rgba_array(color) * \
-(0.5 + 0.5 * norm(shade)[:, np.newaxis])
+color = colorConverter.to_rgba_array(color)
+# shape of color should be (M, 4) (where M is number of faces)
+# shape of shade should be (M,)
+# colors should have final shape of (M, 4)
+alpha = color[:, 3]
+colors = (0.5 + norm(shade)[:, np.newaxis] * 0.5) * color
+colors[:, 3] = alpha
else:
colors = color.copy()
Index: lib/mpl_toolkits/mplot3d/axes3d.py
===
--- lib/mpl_toolkits/mplot3d/axes3d.py (revision 8900)
+++ lib/mpl_toolkits/mplot3d/axes3d.py (working copy)
@@ -782,14 +782,13 @@
if len(shade[mask]) > 0:
norm = Normalize(min(shade[mask]), max(shade[mask]))
-if art3d.iscolor(color):
-color = color.copy()
-color[3] = 1
-colors = [color * (0.5 + norm(v) * 0.5) for v in shade]
-else:
-colors = [np.array(colorConverter.to_rgba(c)) * \
-(0.5 + norm(v) * 0.5) \
-for c, v in zip(color, shade)]
+color = colorConverter.to_rgba_array(color)
+# shape of color should be (M, 4) (where M is number of faces)
+# shape of shade should be (M,)
+# colors should have final shape of (M, 4)
+alpha = color[:, 3]
+colors = (0.5 + norm(shade)[:, np.newaxis] * 0.5) * color
+colors[:, 3] = alpha
else:
colors = color.copy()
--
Gaining the trust of online customers is vital for the success of any company
that requires sensitive data to be transmitted over the Web. Learn how to
best implement a security strategy that keeps consumers' information secure
and instills the confidence they need to proceed with transactions.
http://p.sf.net/sfu/oracle-sfdevnl ___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel