From: Alexander Dietz <alexanderdietz1@go...>  20110505 19:37:26
Attachments:
Message as HTML

Hi, I have the following situation. I have been following the example to create a 3d surface, as explained here: http://matplotlib.sourceforge.net/examples/mplot3d/surface3d_demo2.html and I have altered the code slightly to plot a straight red line from the center outside of the sphere (see code at the end of this email). As one can see, the whole line is visible always, no matter how the sphere is turned. Is there a way to 'hide' those parts of the red line, which are 'behind' the blue surface? Like you stick a pencil into an apple and turn the apple, so you can see parts of the pencil, depending on how the apple is rotated (except the part of the pencil inside the apple)? If someone can help me with that problem that would be great. Thanks Alex from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np fig = plt.figure() #ax = fig.add_subplot(111, projection='3d') ax = Axes3D(fig) u = np.linspace(0, 2 * np.pi, 100) v = np.linspace(0, np.pi, 100) x = 10 * np.outer(np.cos(u), np.sin(v)) y = 10 * np.outer(np.sin(u), np.sin(v)) z = 10 * np.outer(np.ones(np.size(u)), np.cos(v)) ax.plot([0,15],[0.0,0.0],'r', lw=4) ax.plot_surface(x, y, z, rstride=4, cstride=4, color='b') plt.show() 
From: Benjamin Root <ben.root@ou...>  20110505 22:24:57

On Thursday, May 5, 2011, Alexander Dietz <alexanderdietz1@...> wrote: > Hi, > > I have the following situation. I have been following the example to create a 3d surface, as explained here: > > http://matplotlib.sourceforge.net/examples/mplot3d/surface3d_demo2.html > > and I have altered the code slightly to plot a straight red line from the center outside of the sphere (see code at the end of this email). As one can see, the whole line is visible always, no matter how the sphere is turned. Is there a way to 'hide' those parts of the red line, which are 'behind' the blue surface? Like you stick a pencil into an apple and turn the apple, so you can see parts of the pencil, depending on how the apple is rotated (except the part of the pencil inside the apple)? > > If someone can help me with that problem that would be great. > > > Thanks > Alex > > > > > > > from mpl_toolkits.mplot3d import Axes3D > import matplotlib.pyplot as plt > import numpy as np > > fig = plt.figure() > #ax = fig.add_subplot(111, projection='3d') > ax = Axes3D(fig) > > u = np.linspace(0, 2 * np.pi, 100) > v = np.linspace(0, np.pi, 100) > > x = 10 * np.outer(np.cos(u), np.sin(v)) > y = 10 * np.outer(np.sin(u), np.sin(v)) > z = 10 * np.outer(np.ones(np.size(u)), np.cos(v)) > > ax.plot([0,15],[0.0,0.0],'r', lw=4) > > ax.plot_surface(x, y, z, rstride=4, cstride=4, color='b') > > plt.show() > Mplot3d is not a true 3d plotting system. I would recommend mayavi for that. Because mplot3d is a hack to render 3d objects with a 2d rendering system, matplotlib can't get the the layering right. Maybe in the far future this will be changed, but for now, it is a design limitation. Ben 
From: Alexander Dietz <alexanderdietz1@go...>  20110506 07:25:57
Attachments:
Message as HTML

Hi Benjamin, thanks for your answer  I feared you would reply as you did. I will have a look at mayavi then. Thanks Alex On Fri, May 6, 2011 at 00:24, Benjamin Root <ben.root@...> wrote: > On Thursday, May 5, 2011, Alexander Dietz > <alexanderdietz1@...> wrote: > > Hi, > > > > I have the following situation. I have been following the example to > create a 3d surface, as explained here: > > > > http://matplotlib.sourceforge.net/examples/mplot3d/surface3d_demo2.html > > > > and I have altered the code slightly to plot a straight red line from the > center outside of the sphere (see code at the end of this email). As one can > see, the whole line is visible always, no matter how the sphere is turned. > Is there a way to 'hide' those parts of the red line, which are 'behind' the > blue surface? Like you stick a pencil into an apple and turn the apple, so > you can see parts of the pencil, depending on how the apple is rotated > (except the part of the pencil inside the apple)? > > > > If someone can help me with that problem that would be great. > > > > > > Thanks > > Alex > > > > > > > > > > > > > > from mpl_toolkits.mplot3d import Axes3D > > import matplotlib.pyplot as plt > > import numpy as np > > > > fig = plt.figure() > > #ax = fig.add_subplot(111, projection='3d') > > ax = Axes3D(fig) > > > > u = np.linspace(0, 2 * np.pi, 100) > > v = np.linspace(0, np.pi, 100) > > > > x = 10 * np.outer(np.cos(u), np.sin(v)) > > y = 10 * np.outer(np.sin(u), np.sin(v)) > > z = 10 * np.outer(np.ones(np.size(u)), np.cos(v)) > > > > ax.plot([0,15],[0.0,0.0],'r', lw=4) > > > > ax.plot_surface(x, y, z, rstride=4, cstride=4, color='b') > > > > plt.show() > > > > Mplot3d is not a true 3d plotting system. I would recommend mayavi > for that. Because mplot3d is a hack to render 3d objects with a 2d > rendering system, matplotlib can't get the the layering right. Maybe > in the far future this will be changed, but for now, it is a design > limitation. > > Ben > 