如何在python中创建3D高度图

Posted

技术标签:

【中文标题】如何在python中创建3D高度图【英文标题】:how to create a 3D height map in python 【发布时间】:2015-08-22 18:54:55 【问题描述】:

我有一个二维数组 Z,它存储该元素位置的高度。除了使用 here 方法创建与 Z 大小相同的数组 X 和 Y 之外,还有没有更简单的方法来创建 3D 高度图?

3D 表面高度图类似于第一个表面图here。

【问题讨论】:

比 plot(xs, ys, zs) 更简单??听起来很难,你的问题到底是什么? 为什么meshgrid很难? meshgrid 并不难。我只是想知道这是否已经是最简单的方法了。 还有一件事是,如果我使用我提供的链接中的方法,那么基本上我很不方便旋转图形并查看图形的详细信息,因为有很多点( Z 类似于 500x500 数组)并且图形的弹出窗口一直滞后。是否有其他地块可以缓解这个问题并提供类似的结果? 你需要它作为表面吗?通常相同的信息包含在像 imshow 或 matshow 这样的简单二维图中。对于大型矩阵,它们的速度要快得多。 【参考方案1】:

这里是matplotlib的代码

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

z = np.array([[x**2 + y**2 for x in range(20)] for y in range(20)])
x, y = np.meshgrid(range(z.shape[0]), range(z.shape[1]))

# show hight map in 3d
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x, y, z)
plt.title('z as 3d height map')
plt.show()

# show hight map in 2d
plt.figure()
plt.title('z as 2d heat map')
p = plt.imshow(z)
plt.colorbar(p)
plt.show()

这里是 z 的 3D 图:

这里是 z 的二维图:

【讨论】:

ax.invert_yaxis() 如果你想要 x=0, y=0 的绘图原点【参考方案2】:

即使我同意其他人的观点,meshgrids 并不难,但我仍然认为Mayavi 包提供了解决方案(检查函数surf)

from mayavi import mlab mlab.surf(Z) mlab.show()

【讨论】:

以上是关于如何在python中创建3D高度图的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中创建 xyz 高度数据的曲面图

如何在 Qt3D 中创建撤消/重做操作? [关闭]

如何使用 Tkinter 在 Python 2.7 中创建等宽列

如何在 Python 中创建分类气泡图?

如何在python中创建堆叠的条形图[重复]

在 Plotly 中创建 3D 曲面图