我可以绘制trisurf图表,但是surf不起作用。
我在做什么错了?
pkg load statistics;
figure (1,'name','Matrix Map');
colormap('hot');
t = dlmread('C:\Map3D.csv');
tx =t(:,1);ty=t(:,2);tz=t(:,3);
tri = delaunay(tx,ty);
handle = surf(tx,ty,tz); #This does NOT work
#handle = trisurf(tri,tx,ty,tz); #This does work
错误:表面:行(Z)必须与长度(Y)相同,列(Z)必须与长度相同
(X)
我的数据以CSV格式显示(此处未显示逗号)
1 2 -0.32
2 2 0.33
3 2 0.39
4 2 0.09
5 2 0.14
1 2.5 -0.19
2 2.5 0.13
3 2.5 0.15
4 2.5 0.24
5 2.5 0.33
1 3 0.06
2 3 0.44
3 3 0.36
4 3 0.45
5 3 0.51
1 3.5 0.72
2 3.5 0.79
3 3.5 0.98
4 3.5 0.47
5 3.5 0.55
1 4 0.61
2 4 0.13
3 4 0.44
4 4 0.47
5 4 0.58
1 4.5 0.85
答案 0 :(得分:1)
surf
错误消息在Matlab或Octave中是不同的。
来自Matlab的错误消息:
Z必须是矩阵,而不是标量或向量。
由于您将Z
(为您tz
)指定为向量,因此这里的问题很明显。
八度提示错误消息:
表面:行(Z)必须与长度(Y)相同,并且列(Z)必须与长度(X)相同
这是错误的,因为在您的示例中,列(Z)= 1,但长度(X)= 26,所以这是错误的。
其后果之一是,使用surf
时,网格上将不会出现“孔”或未定义的点。在您的情况下,您具有从1到5的X网格和从2到4.5的Y网格,但是未定义坐标点(2,4.5)。
@Luis Mendo,Matlab和Octave确实允许原型surf(matrix_x, matrix_y, matrix_z)
,但第三个参数matrix_z
仍必须是矩阵(而不是标量或向量)。显然,仅一行或一列的矩阵不被视为矩阵。
要解决此问题,我建议类似以下内容:
tx = 1:5; % tx is a vector of length 5
ty = 2:0.5:4.5; % ty is a vector of length 6
tz = [-0.32 0.33 0.39 0.09 0.14;
-0.19 0.13 0.15 0.24 0.33;
0.06 0.44 0.36 0.45 0.51;
0.72 0.79 0.98 0.47 0.55;
0.61 0.13 0.44 0.47 0.58;
0.85 0. 0. 0. 0.]; % tz is a matrix of size 6*5
surf(tx,ty,tz);
请注意,我不得不在未定义网格的地方发明一些值,我放置了0.
,但您可以使用自己喜欢的值对其进行更改。