2013-03-27 5 views
1

.dat 파일에 X, Y, Z 좌표 데이터가 매우 큰 데이터 세트 (~ 500 만 행)가 있습니다. 이것을 3D 산포도로 가져올 수 있지만 점 사이의 3D 표면 메쉬에서 보간하고 싶습니다. this을 포함한 몇 가지 예를 살펴 보았지만 잘못된 인덱스 오류가 발생하지 않고 작동하도록 할 수는 없습니다.X, Y, Z 좌표 데이터로 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 

내가 파이썬 매우 새로 온 사람이 알아낼 수 없습니다. 어떤 아이디어? 감사!

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] 
+0

문제를 나타내는 데이터를 제공하면 더 많은 답변을 얻을 수 있습니다. – unutbu

+0

데이터 예제를 복사하여 붙여 넣을 수 있습니까? 또한 모든 Y 값은 동일합니다. 의도적입니까? – tacaswell

+0

Y 값이 동일하면 정확합니다. 이것은 총 데이터 포인트가 500 만 개에 이르는 처음 20 개 값이며 Y 값은이 범위에서 매우 천천히 변합니다. 또한 데이터가 복사 가능하다고 생각합니다. 방금 시도했는데 효과가있었습니다. 내게 알려주지 않으면, 나는 그것을 시도하고 시정 할 것이다. –

답변

1

확신 문제가 당신이 잘못 griddata (documentation)를 호출하는 것입니다 : 여기

내가 테스트로 사용하고있는 데이터 세트의 일부입니다. 시도해보십시오 :

Z = scipy.interpolate.griddata((xs, ys), zs, X, Y) 
+0

나는 griddata에 대한 문서를 읽고이 제안을 시도했다. 나는 그것을 음모에 넣을 수 없었다. "griddata()가 적어도 5 개의 인수 (주어진 5 개)"또는 "IndexError : invalid index" –

+1

'scipy.interpolate.griddata (points, values, xi, method = 'linear', fill_value = nan) 오류가 발생했습니다.)'는'pylab.griddata (x, y, z, xi, yi, interp = 'nn')와 동일하지 않습니다. – szmoore

+0

@matches 좋은 지적입니다. mpl 버전을 사용하여 답변을 게시해야합니다. – tacaswell

관련 문제