使用mplot3d

时间:2016-02-07 21:24:18

标签: python matplotlib

我有三个列表,XYZ。每条数据都通过索引关联。

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]

X和Y列表仅包含3或4个唯一值 - 但X和Y的每个组合都是唯一的,并且具有关联的Z值。

我需要使用.plot_surface生成表面图。我知道我需要为此创建一个meshgrid,但我不知道如何生成这个,因为我有包含重复数据的列表,并且保持Z列表的完整性至关重要。我也可以使用tri_surf,因为这可以直接使用,但它不是我需要的。

我当然使用mplot3d库。

1 个答案:

答案 0 :(得分:1)

鉴于数据集的分散性,我建议tri_surf。由于您说“它不是您需要的”,您的另一个选择是创建meshgrid,然后使用scipy.interpolate.griddata 插入输入点。< / p>

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'

结果:

<code>interp</code>d surface