Re: [Matplotlib-users] deleting gray panels in Axes3D
On Wed, Feb 23, 2011 at 4:19 PM, Rene Breton superlumini...@gmail.comwrote: Hi all, I'm making a 3d plot using Axes3D (plot_surface) and I want to get rid of the 3d gray box that surrounds the object so that only the object shows up. Is there a way to do it? After creating my Axes3D instance, I can't find much else than methods to change the x,y,z labels and axis limits. I found a hack using myAXINFO to change the color of each panel but the axis line still remains there. Ideally, there would be methods to access the color, visibility, etc., of these elements. Maybe it's somewhere I can't find them... Here's a code snippet derived from one of the website's examples: # from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm from matplotlib.ticker import LinearLocator, FixedLocator, FormatStrFormatter import matplotlib.pyplot as plt import numpy as np fig = plt.figure() ax = fig.gca(projection='3d') X = np.arange(-5, 5, 0.25) Y = np.arange(-5, 5, 0.25) X, Y = np.meshgrid(X, Y) R = np.sqrt(X**2 + Y**2) Z = np.sin(R) surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet, linewidth=0, antialiased=False) ax.set_zlim3d(-1.01, 1.01) # The following makes the panels white, but the axis line remains there myAXINFO = { 'x': {'i': 0, 'tickdir': 1, 'juggled': (1, 0, 2), 'color': (1.0, 1.0, 1.0, 1.0, 1.0)}, 'y': {'i': 1, 'tickdir': 0, 'juggled': (0, 1, 2), 'color': (1.0, 1.0, 1.0, 1.0, 1.0)}, 'z': {'i': 2, 'tickdir': 0, 'juggled': (0, 2, 1), 'color': (1.0, 1.0, 1.0, 1.0, 1.0)} } ax.w_zaxis._AXINFO = myAXINFO ax.w_yaxis._AXINFO = myAXINFO ax.w_xaxis._AXINFO = myAXINFO plt.show() # Thanks! Rene Rene, Unfortunately, you have stumbled upon one of the ugliness of the mplot3d implementation. I am hoping to have more control available for the next release. But right now, there is no way to turn off the axes spines (because they aren't implemented as spines). If you really want to dig into the source code, you could change the color argument to the Line2D call in the init3d() method in matplotlib/lib/mpl_toolkits/axis3d.py I am sorry I can not be more helpful. Ben Root -- Free Software Download: Index, Search Analyze Logs and other IT data in Real-Time with Splunk. Collect, index and harness all the fast moving IT data generated by your applications, servers and devices whether physical, virtual or in the cloud. Deliver compliance at lower cost and gain new business insights. http://p.sf.net/sfu/splunk-dev2dev ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] deleting gray panels in Axes3D
Thanks much for the quick answer Ben! At least now I know it doesn't exist, yet. I might dig into the source code to change the color as you suggest. As a workaround, maybe I will simply tweak the .ps output in Adobe Illustrator; should be easy enough to remove such thing. By the way, I'm very glad you (and people) took over the mplot3d. I really think that 3D plotting was the number one missing thing in Matplotlib and Python more generally. (mayavi2 is way to complicated and clunky for what most people need) If I may make another suggestion, besides getting more control over the axes spines, it would be to allow the axes rendering to mix multiple plot objects. Let's say one plots a sphere and a cylinder (like a rod) that goes through the sphere and get the part of the cylinder that lies inside the sphere to be hidden. Of course, I realize it might not be trivial to do, depending exactly how plots are rendered. Cheers, Rene On 11-02-23 05:33 PM, Benjamin Root wrote: On Wed, Feb 23, 2011 at 4:19 PM, Rene Breton superlumini...@gmail.com mailto:superlumini...@gmail.com wrote: Hi all, I'm making a 3d plot using Axes3D (plot_surface) and I want to get rid of the 3d gray box that surrounds the object so that only the object shows up. Is there a way to do it? After creating my Axes3D instance, I can't find much else than methods to change the x,y,z labels and axis limits. I found a hack using myAXINFO to change the color of each panel but the axis line still remains there. Ideally, there would be methods to access the color, visibility, etc., of these elements. Maybe it's somewhere I can't find them... Here's a code snippet derived from one of the website's examples: # from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm from matplotlib.ticker import LinearLocator, FixedLocator, FormatStrFormatter import matplotlib.pyplot as plt import numpy as np fig = plt.figure() ax = fig.gca(projection='3d') X = np.arange(-5, 5, 0.25) Y = np.arange(-5, 5, 0.25) X, Y = np.meshgrid(X, Y) R = np.sqrt(X**2 + Y**2) Z = np.sin(R) surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet, linewidth=0, antialiased=False) ax.set_zlim3d(-1.01, 1.01) # The following makes the panels white, but the axis line remains there myAXINFO = { 'x': {'i': 0, 'tickdir': 1, 'juggled': (1, 0, 2), 'color': (1.0, 1.0, 1.0, 1.0, 1.0)}, 'y': {'i': 1, 'tickdir': 0, 'juggled': (0, 1, 2), 'color': (1.0, 1.0, 1.0, 1.0, 1.0)}, 'z': {'i': 2, 'tickdir': 0, 'juggled': (0, 2, 1), 'color': (1.0, 1.0, 1.0, 1.0, 1.0)} } ax.w_zaxis._AXINFO = myAXINFO ax.w_yaxis._AXINFO = myAXINFO ax.w_xaxis._AXINFO = myAXINFO plt.show() # Thanks! Rene Rene, Unfortunately, you have stumbled upon one of the ugliness of the mplot3d implementation. I am hoping to have more control available for the next release. But right now, there is no way to turn off the axes spines (because they aren't implemented as spines). If you really want to dig into the source code, you could change the color argument to the Line2D call in the init3d() method in matplotlib/lib/mpl_toolkits/axis3d.py I am sorry I can not be more helpful. Ben Root -- Free Software Download: Index, Search Analyze Logs and other IT data in Real-Time with Splunk. Collect, index and harness all the fast moving IT data generated by your applications, servers and devices whether physical, virtual or in the cloud. Deliver compliance at lower cost and gain new business insights. http://p.sf.net/sfu/splunk-dev2dev ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] deleting gray panels in Axes3D
On Wed, Feb 23, 2011 at 4:52 PM, Rene Breton superlumini...@gmail.comwrote: Thanks much for the quick answer Ben! At least now I know it doesn't exist, yet. I might dig into the source code to change the color as you suggest. As a workaround, maybe I will simply tweak the .ps output in Adobe Illustrator; should be easy enough to remove such thing. Another issue may be the tickmarks, which are made separately in another segment of code. By the way, I'm very glad you (and people) took over the mplot3d. I really think that 3D plotting was the number one missing thing in Matplotlib and Python more generally. (mayavi2 is way to complicated and clunky for what most people need) Thank you for your vote of confidence. This is exactly the intent of mplot3d, which is to allow for the possibility of basic 3d plotting features without the need to go all-in to a major 3d plotting system. We are still a long way from what I envision for mplot3d. If I may make another suggestion, besides getting more control over the axes spines, it would be to allow the axes rendering to mix multiple plot objects. Let's say one plots a sphere and a cylinder (like a rod) that goes through the sphere and get the part of the cylinder that lies inside the sphere to be hidden. Of course, I realize it might not be trivial to do, depending exactly how plots are rendered. You are not the first to request this, and you will not be the last. Unfortunately, it is an intractable problem that can never be completely solved by the 2d rendering framework employed by matplotlib. If/When matplotlib gains an opengl backend, this problem will be revisited. Please do continue to feel free to continue commenting on mplot3d and how you think it can be better. And, as always, patches are welcome! Ben Root -- Free Software Download: Index, Search Analyze Logs and other IT data in Real-Time with Splunk. Collect, index and harness all the fast moving IT data generated by your applications, servers and devices whether physical, virtual or in the cloud. Deliver compliance at lower cost and gain new business insights. http://p.sf.net/sfu/splunk-dev2dev ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users