matplotlib 绘制通过3D空间中所有数据点的曲面

gj3fmq9x  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(170)

我不确定这是否可行,但基本上我有一个对应于x,y和z坐标的数据列表。
下图显示了我使用散点图(我使用Python pyplot库创建的)绘制这些点时的结果。

我的问题是,有没有办法画出一个平面的图形,它通过所有这些点,而不是把它们画成单个点?
当我在网上搜索时,我发现的都是告诉我如何找到通过3个点的平面方程的资源,但正如你所看到的,我有很多点。

v2g6jxz6

v2g6jxz61#

让我们说,有你的情节,你使用这个代码

fig, ax = plt.subplots(subplot_kw=dict(projection='3d'))
ax.scatter(x, y, z)
plt.show()

假设你知道nrowsncols,你的基本网格的行数(y)和列(x)。
如果这些假设是正确的,那么你就可以用这段代码绘制一个连接这些点的曲面

fig, ax = plt.subplots(subplot_kw=dict(projection='3d'))
ax.plot_surface(*(v.reshape(nrows, ncols) for v in (x, y, z)))
plt.xlabel('x') ; plt.ylabel('y')
plt.show()

或者,如果你想要更高级的东西

fig, ax = plt.subplots(subplot_kw=dict(projection='3d'),
                       layout='constrained')
surf = ax.plot_surface(*(v.reshape(nrows, ncols) for v in(x, y, z)),
                       cmap='Blues_r', ec='gray', lw=0.2)
plt.xlabel('x') ; plt.ylabel('y')
plt.colorbar(surf)
plt.show()

我的代码的前奏,如果你想检查我的结果,是

import numpy as np
import matplotlib.pyplot as plt

nrows, ncols = 63, 126
x = np.linspace(0, 12.5, ncols)
y = np.linspace(-6.2, 6.2, nrows)

X, Y = np.meshgrid(x, y)
x, y = (V.flatten() for V in (X, Y))
z = np.sin(x)-np.cos(y)

fig, ax = ...
...

相关问题