2014-11-08 3 views
2

4 개의 열, 즉 x, y, z, c를 갖는 데이터를 사용하여 3D 표면 플롯을 플롯하려고합니다. 데이터는 아래 -파이썬에서 4 개의 배열 데이터로 플롯 3D 표면 플롯

0.452 -172.799 -172.800 0.000000 
0.452 -172.799 -158.400 -9.305322 
0.452 -172.799 -144.000 -12.062071 
0.452 -172.799 -129.600 -9.008698 
0.452 -172.799 -115.200 -5.402975 
0.452 -172.799 -100.800 -3.957608 
0.452 -172.799 -86.400 -5.113347 
0.452 -172.799 -72.000 -4.784993 
0.452 -172.799 -57.600 -6.659095 
0.452 -172.799 -43.200 -4.405937 
0.452 -172.799 -28.800 -6.110385 
0.452 -172.799 -14.400 -5.896424 
0.452 -172.799 -0.001 -4.405937 
0.452 -172.799 14.399 -6.489442 
0.452 -172.799 28.799 -5.662057 
0.452 -172.799 43.199 -7.710180 
0.452 -172.799 57.599 -7.710180 
0.452 -172.799 71.999 -8.011659 
0.452 -172.799 86.399 -6.489442 
0.452 -172.799 100.799 -6.817796 
0.452 -172.799 115.199 -5.662057 
0.452 -172.799 129.599 -5.402975 
0.452 -172.799 143.999 -5.662057 
0.452 -172.799 158.399 -3.957608 
0.452 -172.799 172.799 -2.701488 
0.615 -172.799 -172.800 -8.444175 
0.615 -172.799 -158.400 -13.183417` 

처음 세 열이 년 Colorbar 즉 표면색은 C에 따라 부여 될 수있을 것 인 X, Y, Z 및 네번째 컬럼 (C)를 나타낸다.

지금은 몇 가지 간단한 코드를 시도했지만 여전히 오류가 발생했습니다. 내가 밖으로 시도 무엇인가 -

import pylab as p 
import numpy as np 
from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
import matplotlib.cm as cm 
data = np.genfromtxt('test1.pmf') 
x=data[:,1] 
y=data[:,2] 
h=data[:,3] 
z=data[:,0] 
datamin=min(h) 
datamax=max(h) 
fig=p.figure() 
ax=fig.add_subplot(111, projection='3d') 
pmf = ax.plot_surface(x, y, z, facecolors=cm.ocean(h)) 
p.colorbar(pmf) 
p.show()  

난 등이 잘못하고있는 중이 야

pmf = ax.plot_surface(x, y, z, facecolors=cm.ocean(h)) 
File "/usr/lib/pymodules/python2.7/mpl_toolkits/mplot3/axes3d.py",line663,in    
plot_surface rows, cols = Z.shape ValueError: need more than 1 value to unpack 

어떤 생각으로 오류가있어?

정말 고마워요!

+0

은'x' 좌표를 참조하십시오. 그것이 표면이 될 것이라고 어떻게 기대합니까? – hitzg

답변

0

plot_surface 기능 requires 2D arrays as an arguments. 코드 스 니펫 Z에서 변수는 1D 배열이므로 Z.shape을 두 요소 (행 및 열)로 압축 해제 할 수 없습니다. 내가 믿는

,이 같은 뭔가가 정확 될 수 있습니다

x, y = np.meshgrid(x, y) 
z = z.reshape(x.shape) 

당신이 (두 번째 열)을 변경하지 않습니다 제공하는 데이터의 example

+0

내 데이터가 4D 배열 이었기 때문에 meshgrid를 시도했는데 여전히 오류가 발생했습니다. 스크립트에 변경된 내용 - – xyz123

+0

내 데이터가 4D 배열 이었기 때문에 meshgrid를 시도 했으므로 오류가 발생했습니다. 변경 사항 (X, Y, Z, xi, yi)'여전히 오류가 발생합니다. 'TypeError : unhashable type :'numpy.ndarray ' ' – xyz123

+0

질문을 업데이트하고 새 코드 및 새 오류 백 트레이스를 표시 할 수 있습니까? – erthalion