2013-07-14 127 views
1

我目前正在绘制两个完全不同的数据集到一个3D曲面图中。当我独立绘制每一个时,一切正常。但是,只要我将它们绘制成一个,可视化就很奇怪。我做的绘图方式如下:Matplotlib - 多重曲面图,错误重叠

fig = plt.figure(figsize=(20,10)) 
ax = fig.add_subplot(111, projection='3d') 
ax.plot_surface(X,Y,Z, color=color, antialiased=True) 
(get new X,Y, Z values) 
ax.plot_surface(X,Y,Z, color=color, antialiased=True) 
ax.view_init(30, 360) 

输出如下:

output

正如你可以看到,蓝色的数据是正确的,但绿色的是莫名其妙的背面并没有正确的可视化。如果我单独绘制绿色的那个,它完美地起作用。

改变绘图的顺序(或使用zorder玩耍)不会改变任何东西。

希望有人能帮助!

+1

这很可能是因为matplotlib最初打算成为一个纯2D绘图库。 matplotlib的3D功能是有限的,因为它们是通过转换实现的。要使用Python绘制“真实”3D图像,您应该查看[mayavi](http://code.enthought.com/projects/mayavi/)。 – hooy

+0

谢谢,我试图通过使用mesh()来使用mayavi,但生成的绘图保持空白。我已经使用了与我的matplotlib代码相同的X,Y,Z numpy数组。有任何想法吗? – fsociety

+0

可能重复的[如何画这样的图?](http://stackoverflow.com/questions/14824893/how-to-draw-diagrams-like-this) – tacaswell

回答

0

Matplotlib只是一个2D绘图库。通过将3D表面投影到图像平面上来实现3d图。

如果您有多个3d表面,它会将每个表面变成2d形状,然后为每个形状计算单个高度,然后按该顺序显示。

据我所知,zorder选项不起作用,它只是改变曲面的顺序。

如果你真的不走运,组成轴网格的灰色框可能会被绘制在曲面上方。这更令人讨厌。

你必须使用matplotlib,那么我想你可以将你的表面分成许多小的表面,但是你会遇到一个相当大的表现,这样做,你会覆盖传奇也是。

+0

要小心“高度”与“zorder”。每个3D表面都是按顺序投影和渲染的 - >您永远不会有交叉。 – tacaswell