【问题标题】:Octave - why is surf not working but trisurf does?Octave - 为什么 surf 不起作用,而 trisurf 起作用?
【发布时间】:2018-10-26 20:54:57
【问题描述】:

我可以绘制 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)必须与长度相同 (十)

我的数据是 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 期望 x、y 作为向量(定义笛卡尔网格)和 z 作为矩阵(该网格上的数据)有合适的尺寸。在您的情况下,这三个参数似乎是向量(并且可能不像网格)。
  • 我没有看到任何关于向量或矩阵的信息!您是否正在查看不同的错误消息?你能告诉我如何从我所拥有的转换为向量或矩阵吗?
  • 你是对的。我在想一种具体的形式叫surf,即surf(vector_x, vector_y, matrix_z),但也可以是surf(matrix_x, matrix_y, matrix_z)。我建议你看看documentation中的例子
  • 其实我之所以把这个问题放到StackOverflow上是因为看不懂文档!

标签: matlab octave


【解决方案1】:

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

【讨论】:

  • 我使用的是八度音阶,请问如何将 z 转换为合适的形式?
  • 我真的不明白。我有 3 列 x、y、z 数据。 trisurf 轻松绘制它们。我不明白这个 tz 矩阵是什么,或者为什么我需要为冲浪创建它!
  • 也许有一个八度函数可以创建一个合适的 tz?
  • @ManInMoon 冲浪规则说 tz 需要是矩阵而不是向量。 tz 在我的例子中是你的 tz 我重新排序所以它变成了一个矩阵。
  • @ManInMoon 是的,也许。仔细看,我的第一行是你的矢量等的第一部分......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-17
  • 1970-01-01
相关资源
最近更新 更多