【问题标题】:Matplotlib - multiple surface plots, wrong overlappingMatplotlib - 多个曲面图,错误重叠
【发布时间】:2013-07-14 11:59:55
【问题描述】:

我目前正在将两个完全不同的数据集绘制成一个 3D 曲面图。当我独立绘制每一个时,一切正常。但是,一旦我将它们绘制成一个,可视化就很奇怪。我按照以下方式进行绘图:

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)

输出如下:

如您所见,蓝色数据是正确的,但绿色数据不知何故位于背面,无法正确显示。如果我单独绘制绿色的,它可以完美地工作。

更改绘图顺序(或玩弄 zorder)不会改变任何事情。

希望有人能提供帮助!

【问题讨论】:

  • 这很可能是因为 matplotlib 最初旨在成为一个纯 2D 绘图库。 matplotlib 的 3D 功能是有限的,因为它们是通过转换实现的。要使用 Python 在“真实”3D 中绘图,您应该查看mayavi
  • 谢谢,我尝试通过使用 mesh() 来使用 mayavi,但生成的绘图保持空白。我使用了与我的 matplotlib 代码相同的 X、Y、Z numpy 数组。有什么想法吗?
  • 您应该打开一个新问题“我该如何处理 mayavi?”

标签: python 3d matplotlib plot


【解决方案1】:

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

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

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

如果您真的不走运,构成轴网格的灰色框也可能会绘制在您的表面上方。这更烦人。

如果你必须使用 matplotlib,那么我想你可以将你的表面分割成许多更小的表面,但你会遇到一个相当大的性能位这样做,你将覆盖图例中的值也。

【讨论】:

  • 小心“身高”和“zorder”。每个 3D 表面都是按顺序投影和渲染的 -> 你永远不能有交叉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-28
  • 2015-06-15
  • 2012-02-28
  • 1970-01-01
  • 2013-01-30
相关资源
最近更新 更多