python - 如何在 matplotlib mplot3D 或类似文件中显示 3D 数组等值面的 3D 图?

标签 python matplotlib scipy visualization volume

我有一个 3 维 numpy 数组。我想(在 matplotlib 中)显示该数组等值面的漂亮 3D 图(或者更严格地说,显示通过在采样点之间插值定义的 3D 标量场的等值面)。

matplotlib 的 mplot3D 部分提供了很好的 3D 绘图支持,但是(据我所知)它的 API 没有任何东西可以简单地采用 3D 标量值数组并显示等值面。但是,它确实支持显示一组多边形,所以我想我可以实现行进立方体算法来生成这样的多边形。

似乎很可能已经在某个地方实现了一个对 scipy 友好的行进立方体,但我还没有找到它,或者我错过了一些简单的方法。或者,我欢迎任何指向其他工具的指针,这些工具可以从 Python/numpy/scipy 世界轻松使用可视化 3D 数组数据。

最佳答案

只是为了详细说明我上面的评论,matplotlib 的 3D 绘图确实不适用于像等值面这样复杂的东西。它旨在为非常简单的 3D 绘图生成漂亮的、出版质量的矢量输出。它无法处理复杂的 3D 多边形,因此即使自己实现行进立方体来创建等值面,它也无法正确渲染它。

但是,您可以改为使用 mayavi (它是 mlab API 比直接使用 mayavi 方便一点),它使用 VTK处理和可视化多维数据。

作为一个简单的示例(从 mayavi 库示例之一修改):

import numpy as np
from enthought.mayavi import mlab

x, y, z = np.ogrid[-10:10:20j, -10:10:20j, -10:10:20j]
s = np.sin(x*y*z)/(x*y*z)

src = mlab.pipeline.scalar_field(s)
mlab.pipeline.iso_surface(src, contours=[s.min()+0.1*s.ptp(), ], opacity=0.3)
mlab.pipeline.iso_surface(src, contours=[s.max()-0.1*s.ptp(), ],)

mlab.show()

enter image description here

关于python - 如何在 matplotlib mplot3D 或类似文件中显示 3D 数组等值面的 3D 图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6030098/

相关文章:

python - 在 Python 中验证数字签名的 PDF

python - 来自 Google Finance 的网络抓取 : returned data list always empty

python - Astropy matplotlib 和绘制银河坐标

python - 尝试从 csv 绘制数据集而不是生成数据集时,与 scikit-learn fit() 方法不匹配

python - 如何向 Selenium RC TestSuite 输入参数?

python - SDL: "working natively in C++"是什么意思?

python - 从数据帧创建一系列饼图,并将颜色链接到索引值

python - 不要打印 "optimization terminated successfully"scipy.optimize.fmin?

python - 如何用不同颜色填充KDE曲线下的区间

python - 求解隐式 ODE(微分代数方程 DAE)