Python 用透视图绘制三维曲面和线

Python 用透视图绘制三维曲面和线,python,matplotlib,plot,3d,Python,Matplotlib,Plot,3d,我试图画一条穿过三维表面的线,作为指示轴的方法。但是,这只会导致线完全绘制在曲面的顶部或下方——更改zorder并不能解决这一问题 我要找的是线条看起来像是穿透了表面 我的代码和输出如下: fig = plt.figure(figsize=(9,9)) ax = plt.axes(projection='3d') ax.plot_surface(X,Z,Y, linewidth=0, cmap=cm.jet,

我试图画一条穿过三维表面的线,作为指示轴的方法。但是,这只会导致线完全绘制在曲面的顶部或下方——更改
zorder
并不能解决这一问题

我要找的是线条看起来像是穿透了表面

我的代码和输出如下:

fig = plt.figure(figsize=(9,9))
ax = plt.axes(projection='3d')

ax.plot_surface(X,Z,Y,
                linewidth=0,
                cmap=cm.jet,
                facecolors=cm.jet(r_3d/max(abs(r_3d.flatten()))),
                edgecolor='none',
                shade=False,
                antialiased=False)

ax.plot([0,0],[-0.3,0.3],[0,0],linewidth=2,c='k')
在曲面顶部绘制的线示例

所需输出的手绘示例


我想你可以用
zorder
(示例)解决这个问题,尽管我还没有专门尝试过3d绘图
zorder
更改打印顺序,或更改打印特定项目的深度。大的z顺序在顶部打印,小的z顺序在后面打印,因此,如果将3d项目的z顺序设置为1,并将线设置为z顺序为零,则应该可以工作

更改
zorder
基本上是一个全有或全无的开关——当更改
zorder
时,线条完全在曲面的前面或后面绘制。使用
zorder
的想法是分割曲面:在背面绘制整个曲面,然后绘制线条,然后绘制离查看器最近的曲面的一半。但是我认为
plot\u surface
不太喜欢画半个曲面。你也可以只画一个完整的3d曲面和两条线。也许@JohanC谢谢你!我认为MayaVi正是我在这里需要的,如果你把输入的X,Y,Z添加到曲面上,这将有助于我们重新创建输出。