Python 从X、Y、Z坐标数据创建三维曲面网格

Python 从X、Y、Z坐标数据创建三维曲面网格,python,matplotlib,Python,Matplotlib,我在一个.dat文件中有一个非常大的X,Y,Z坐标数据集(~500万行)。我可以将其作为3D散射导入打印,但希望在点之间的3D曲面网格处进行插值。我已经看了一些例子,包括,但是如果没有得到无效的索引错误,就无法让它工作 以下是我所拥有的: from pylab import * import numpy as np from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm import matplotlib.pyplot

我在一个.dat文件中有一个非常大的X,Y,Z坐标数据集(~500万行)。我可以将其作为3D散射导入打印,但希望在点之间的3D曲面网格处进行插值。我已经看了一些例子,包括,但是如果没有得到无效的索引错误,就无法让它工作

以下是我所拥有的:

from pylab import *
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import matplotlib.pyplot as plt
from matplotlib.mlab import griddata

x, y, z = loadtxt('test.dat', unpack = True)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

xs = x
ys = y
zs = z


fig = plt.figure()
ax = fig.gca(projection='3d')

xi = np.linspace(min(xs), max(xs))
yi = np.linspace(min(ys), max(ys))

X, Y = np.meshgrid(xi, yi)
Z = griddata(xs, ys, zs, xi, yi)

surf = ax.plot_surface(X, Y, Z, rstride=5, cstride=5, cmap=cm.jet,
                       linewidth=1, antialiased=True)

ax.set_zlim3d(np.min(Z), np.max(Z))
fig.colorbar(surf)

plt.show()
下面是我得到的错误:

python test2.py
Traceback (most recent call last):
  File "test2.py", line 25, in <module>
    Z = griddata(xs, ys, zs, xi, yi)
  File "/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/matplotlib/mlab.py", line 2768, in griddata
    tri = delaunay.Triangulation(x,y)
  File "/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/matplotlib/delaunay/triangulate.py", line 90, in __init__
    self.hull = self._compute_convex_hull()
  File "/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/matplotlib/delaunay/triangulate.py", line 115, in _compute_convex_hull
    edges.update(dict(zip(self.triangle_nodes[border[:,0]][:,1],
IndexError: invalid index

很确定问题是您调用的
griddata
错误()。尝试:


如果您提供一些数据来说明问题,您可能会得到更多答案。您是否可以重新格式化数据示例,以便它们可以复制粘贴?另外,你所有的Y值都是相同的,这是故意的吗?Y值相同是正确的。这些只是约500万个总数据点的前20个值,Y值在该范围内变化非常缓慢。而且,我相信这些数据是可以复制的。我只是试了一下,结果成功了;如果不让我知道,我会尝试更正它。
x
返回一个len 1列表,它是所有内容的总和,
y
引发一个错误,您需要在条目之间加上coma。我阅读了griddata的文档,并尝试了这个建议。我没能把它搞清楚。我收到一个错误,说“GrDATA()至少有5个参数(5给出)或“索引错误:无效代码”<代码> SISPY。插值。GrDATA(点,值,席席,方法=‘线性’,fILIVALION= Na)< /> >与<代码> PyLab.GrDATA(x,y,z,Xi,y,in pn= nN) >匹配好点。您应该使用mpl版本发布答案。
x = [-0.91392505 -0.89382458 -0.87372404 -0.85362357 -0.83352304 -0.81342256
 -0.79332203 -0.77322155 -0.75312102 -0.73302054 -0.71292001 -0.69281954
 -0.672719   -0.65261853 -0.63251805 -0.61241752 -0.59231698 -0.57221651
 -0.55211604 -0.5320155 ]
y = [ 111.25222  111.25222  111.25222  111.25222  111.25222  111.25222
  111.25222  111.25222  111.25222  111.25222  111.25222  111.25222
  111.25222  111.25222  111.25222  111.25222  111.25222  111.25222
  111.25222  111.25222]
z = [  1.42150589e-06   7.77236906e-08   3.33243515e-05   1.70491203e-05
   6.01433214e-08   9.20339880e-06   4.21266122e-06   3.39080143e-04
   1.37568408e-04   7.34613104e-06   1.07246015e-05   3.39363214e-06
   1.09533859e-04   6.55860058e-05   2.83635192e-04   1.87549119e-06
   9.96281233e-06   2.78222607e-04   2.88286283e-05   4.60408737e-05]
Z = scipy.interpolate.griddata((xs, ys), zs, X, Y)