matplotlib中是否有类似深度缓冲区的东西?

13

我试图使用matplotlib画一些曲线。
但是,由于这些曲线在视口中重叠,因此仅使用z-order无法解决问题。
所以我想知道是否有一个类似深度缓冲区的函数可以用于matplotlib。
我正在尝试绘制像这样的东西,并且红线不应始终位于3D空间的顶部。


我的3D图在某些视角下看起来不正确。这可能是mplot3d最常见的问题... http://matplotlib.org/mpl_toolkits/mplot3d/faq.html#my-3d-plot-doesn-t-look-right-at-certain-viewing-angles - endolith
2个回答

19

我认为在matplotlib中做这样的事情很困难,因为它是一个具有一些3D绘图能力的二维绘图库。 我建议使用一些真正的3D绘图库,例如visvis,mayavi,vpython。例如,在visvis中,您可以创建一个像这样的3D曲线:

输入图像描述

import numpy as np
import visvis as vv
app = vv.use()

f = vv.clf()
a = vv.cla()

angle = np.linspace(0, 6*np.pi, 1000)
x = np.sin(angle)
y = np.cos(angle)
z = angle / 6.0
vv.plot(x, y, z, lw=10)

angle += np.pi*2/3.0
x = np.sin(angle)
y = np.cos(angle)
z = angle / 6.0 - 0.5
vv.plot(x, y, z, lc ="r", lw=10)

app.Run()

mayavi:

在此处输入图片描述

import numpy as np
from mayavi import mlab

angle = np.linspace(0, 6*np.pi, 1000)
x = np.sin(angle)
y = np.cos(angle)
z = angle / 6.0

mlab.plot3d(x, y, z, color=(1,0,0), tube_radius=0.1)

angle += np.pi*2/3.0
x = np.sin(angle)
y = np.cos(angle)
z = angle / 6.0 - 0.5
mlab.plot3d(x, y, z, color=(0,0,1), tube_radius=0.1)

mlab.axes()
mlab.show()

1

谢谢您的建议。我已经阅读了该页面,但似乎不适用于3D绘图。而且很难弄清如何填充正确的区域。 - silvesthu
是的,肯定会很麻烦。我认为如果你真的非常想要它,它可能会起作用... - reptilicus
是的,你说得对。我想我会找到一个解决方法。在这里使用Python只是为了进行简单的测试。 - silvesthu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接