Matlab 八度-为什么surf不工作,而trisurf工作?
我能够绘制一个三曲面图,但surf不起作用 我做错了什么Matlab 八度-为什么surf不工作,而trisurf工作?,matlab,octave,Matlab,Octave,我能够绘制一个三曲面图,但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,
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格式(此处未显示逗号)
surf
错误消息在Matlab或倍频程中不同
来自Matlab的错误消息:
Z必须是矩阵,而不是标量或向量
这里的问题非常清楚,因为您指定了Z
(对于您tz
)作为向量
来自倍频程的错误消息:
曲面:行(Z)必须与长度(Y)相同,列(Z)必须与长度(X)相同
这里你错了,因为在你的例子中,列(Z)=1,但长度(X)=26,所以这里是错误的
这样做的后果之一是,使用surf
时,网格上不能有“洞”或未定义的点。在您的示例中,X轴网从1到5,Y轴网从2到4.5,但未定义坐标点(2,4.5)
@Luis Mendo、Matlab和Octave确实允许原型
surf(矩阵x、矩阵y、矩阵z)
,但第三个参数矩阵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。
但您可以使用您喜欢的值进行更改。错误消息中明确指出了原因:surf
期望x
,y
作为向量(定义笛卡尔网格)和z
作为矩阵(该网格上的数据)具有适当的大小。在您的例子中,这三个参数似乎是向量(可能不是网格状的)。我看不到关于向量或矩阵的任何信息!你看到的是不同的错误消息吗?你能告诉我如何从我现有的内容转换到向量或矩阵吗?你是对的。我正在考虑一种称为surf
,即surf(vector\ux,vector\uy,matrix\uz)
,但它也可以是surf(矩阵x,矩阵y,矩阵z)
。我建议您看看中的示例。事实上,我之所以在StackOverflow上提出这个问题,是因为我不理解文档!我使用的是倍频程,所以如何将z转换为适当的形式?我真的不明白。我有3列x、y、z数据。trisurf可以轻松地绘制它们。我不明白是tz矩阵,或者为什么我需要为surf创建它!也许有一个倍频程函数可以创建一个合适的tz?@Manimoon surf规则说tz需要是一个矩阵而不是一个向量。在我的例子中,tz是你的tz,我重新排序,使它成为一个矩阵。@Manimoon可能是的。仔细看,我的第一行是你向量的第一部分等等。。。
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);