我正在尝试从一个大文件中绘制一些数据。数据具有以下形式:
0.025876 139 0
0.030881 140 0
0.030982 141 0
0.035602 142 0
0.035521 143 0
0.038479 144 0
0.040668 145 0
0.040121 146 0
0.037953 147 0
0.039027 148 0
0.038338 149 0
0.047557 139 1
0.045105 140 1
0.044943 141 1
0.042370 142 1
0.042025 143 1
0.038946 144 1
0.037953 145 1
0.033373 146 1
0.030070 147 1
0.029118 148 1
0.025552 149 1
原则上,每条线对应一个三维点,我会“简单地”绘制从这些点生成的 3d 表面,类似于我可以使用 gnuplot 中的 splot 函数为那些了解它的人做的事情。
在网上寻找我的问题的答案,我用 matplolib 轮廓函数尝试了以下事情:
#!/usr/bin/python
from numpy import *
import pylab as p
import sys
import mpl_toolkits.mplot3d.axes3d as p3
s = str(sys.argv[1])
f = open(s)
z,y,x = loadtxt(f, unpack = True)
f.close
#x = [1,2,3]
#y = [1,2,3]
#z = [1,8,16]
data = zip(x,y,z)
#map data on the plane
X, Y = meshgrid(arange(0, 89, 1), arange(0, 300, 1))
Z = zeros((len(X),len(Y)),'Float32')
for x_,y_,z_ in data:
Z[x_, y_] = z_ #this should work, but only because x and y are integers
#and arange was done with a step of 1, starting from 0
fig=p.figure()
ax = p3.Axes3D(fig)
ax.contourf(X,Y,Z)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
p.show()
这段代码实际上可以很好地处理上面代码中带有标签的向量 x、y 和 z。
但是知道我正在尝试使用上面给出的数据,我在 matplotlib 中得到“输入 x 和 y 必须是 1D 或 2D”错误。
我已经读到这可能与 Z 的形状与 X 或 Y 不同的事实有关……但我不确定如何处理这个问题。
顺便说一句,您可能已经意识到,我是 Python 的超级新手,如果代码对你们中的某些人来说非常难看,我深表歉意。
无论如何,任何帮助都将受到欢迎。
谢谢 !
法比安