八度-为什么冲浪不起作用而trisurf起作用?

时间:2018-10-26 10:36:28

标签: matlab octave

我可以绘制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

1 个答案:

答案 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.,但您可以使用自己喜欢的值对其进行更改。