如前所述,
plot_surface
需要二维数组数据或网格——类似于如果您熟悉的话如何创建热图。如果你的数据在X、Y轴(你看起来是这样)之间有规则的间隔,那么你可以简单地使用Z数据格式化成2D数组,如前面注释中链接的例子所示:
grid_x, grid_y = np.meshgrid(x, y)
# I'm assuming that your data is already mesh-like, which it looks like it is.
# The data would also need to be appropriately sorted for `reshape` to work.
# `dx` here is number of unique x values, and `dy` is number unique y values.
grid_z = z.reshape(dy, dx)
ax.plot_scatter(grid_x, grid_y, grid_z)
但是,在X、Y、Z点间距不均的一般情况下,可以插值数据以创建网格。Scipy有这个功能
griddata
将插值到定义的网格网格上。您可以使用它来绘制数据:
from scipy.interpolate import griddata
xy = np.column_stack([x, y])
grid_x, grid_y = np.mgrid[0:1:100j, 0:1:100j] # grid you create
grid_z = griddata(xy, z, (grid_x, grid_y))
ax.plot_scatter(grid_x, grid_y, grid_z)