【发布时间】:2021-08-23 12:05:13
【问题描述】:
给定一个使用 Matplotlib 显示的带有少量点的 2D 表面:
import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
x = np.arange(0, 4, 1)
y = np.arange(0, 4, 1)
x, y = np.meshgrid(x, y)
z = np.array([
[0, 1, 1, 0],
[1, 2, 2, 1],
[1, 3, 2, 1],
[0, 1, 1, 0]])
surf = ax.plot_surface(x, y, z, cmap=cm.cool)
plt.show()
如何插入数据以使表面更平滑?理想情况下,我想使用样条插值(类似于this example)。因此,我尝试使用interpolate.bisplrep from Scipy,但遇到了各种TypeError: len(x)==len(y)==len(z) must hold 错误。如何准备数据?
【问题讨论】:
-
如果我没记错的话,这只是一个 2D 表面。
-
Matplotlib 将其称为 3D surface,而 Scipy 将其称为 2-D surface。不确定哪一个在技术上是正确的,因为我希望 2D 表面是平面。
-
我认为平面是表面的一种特殊情况。也可以有像你这里有的具有局部曲率的表面。我们所知道的表面是嵌入在 3D 空间中的 2D 对象。
标签: python numpy matplotlib scipy