2014-11-08 117 views
2

我想绘制一个使用具有4列的数据的3D表面绘图,即它将x,y,z,c。下面示出的数据 -用Python中的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` 

前三列代表在x,y,z和第四列c将是彩条即表面颜色将根据到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 2014-11-11 21:22:08

回答

0

The plot_surface function requires 2D arrays as an arguments。在你的代码片段Z变量是一维数组,所以Z.shape不能被解压缩成两个元素(行和列)。

我相信,这样的事情可能是正确的:

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

example

+0

我试着给一个meshgrid,因为我的数据是4D数组我仍然得到一个错误,我对脚本的更改 – xyz123 2014-11-11 07:08:44

+0

我试着给一个meshgrid,因为我的数据是4D数组我仍然得到一个错误,我所做的更改(xi,yi) Z = griddata(x,y,z,xi,yi)'仍然出现'TypeError:unhashable type'错误''numpy.ndarray' ' – xyz123 2014-11-11 07:22:27

+0

你可以更新你的问题,并显示新的代码和新的错误回溯? – erthalion 2014-11-12 14:56:40