我有三个列表X,,,,Y。Z每条数据都通过索引关联起来。
X = [1,1,1,1,2,2,2,2,3,3,3,3]
Y = [1,4,5,6,1,4,5,6,1,4,5,6]
Z = [2,6,3,6,2,7,4,6,2,4,2,3]
Run Code Online (Sandbox Code Playgroud)
X 和 Y 列表仅包含 3 或 4 个唯一值 - 但 X 和 Y 的每个组合都是唯一的并且具有关联的 Z 值。
我需要使用 生成曲面图.plot_surface。我知道我需要meshgrid为此创建一个,但我不知道如何生成这个,因为我有包含重复数据的列表,并且保持 Z 列表的完整性至关重要。我也可以使用tri_surf,因为它可以立即工作,但这并不是我所需要的。
我当然使用 mplot3d 库。
考虑到您的数据集的分散性,我建议tri_surf. 既然你说“这不完全是[你]所需要的”,你的另一个选择是创建一个meshgrid,然后用插入你的输入点scipy.interpolate.griddata。
import numpy as np
import scipy.interpolate as interp
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
X = [1,1,1,1,2,2,2,2,3,3,3,3]
Y = [1,4,5,6,1,4,5,6,1,4,5,6]
Z = [2,6,3,6,2,7,4,6,2,4,2,3]
plotx,ploty, = np.meshgrid(np.linspace(np.min(X),np.max(X),10),\
np.linspace(np.min(Y),np.max(Y),10))
plotz = interp.griddata((X,Y),Z,(plotx,ploty),method='linear')
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(plotx,ploty,plotz,cstride=1,rstride=1,cmap='viridis') # or 'hot'
Run Code Online (Sandbox Code Playgroud)
结果: