我可以绘制一个三冲浪图,但冲浪不起作用。
我做错了什么?
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( 必须与长度相同 (十(
我的数据采用 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
surf
错误消息在Matlab或Octave中是不同的。
来自 Matlab 的错误消息:
Z 必须是矩阵,而不是标量或向量。
问题在这里很清楚,因为您指定了Z
(tz
(作为向量。
来自Octave的错误消息:
表面:行 (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.
但您可以使用您喜欢的值更改它。