繁体   English   中英

表面图用3个向量Matlab

[英]Surface plot with 3 vectors Matlab

我需要能够使用来自3个向量的数据进行表面绘图。 我发现了类似的信息,但似乎没有方法可以用于我的数据。 我的X和Y列均匀分布,但不是按升序排列。 我尝试了不同的方法,但它们似乎都没有给我我想要的东西,这是一个将关闭点连接在一起的简单表面。 我尝试了以下方法:

[X Y]=meshgrid(x,y);
Z=griddata(x,y,z, X,Y);
surf(X,Y,Z);

这不是我想要的,因为它在z = 0处创建了一个表面,使其看起来更像是一个体积图,而不仅仅是一个表面。 它在我的计算机上也运行得非常慢(可能来自创建所有网格点)。 如果我能得到一些不需要太多内存的东西,那么它将是理想的(我的向量每个都有大约20k的值),但这不是必需的。

***编辑:我也尝试使用此处找到的scatInterpolant方法,但MATLAB似乎无法识别该函数,我收到此错误:

Undefined function 'scatteredInterpolant' for input arguments of type 'double'.

这是我的问题的图像: 这里

你可以看到我们在表面下看不到,有一些z = 0平面阻挡它。

如果您有任何帮助,我们将不胜感激。

提前致谢。

**编辑2:我添加了样本向量 ,它们是从左到右的x,y和z值。

***编辑3:这是我得到的三角测量图像。 正如你所看到的,由于某些原因,某些点被忽略了,这给了那些长而怪异的蓝色三角形。

麦克风

如果你有由向量描述的点,并且你想要绘制它们,你总是可以使用Delauny三角剖分。 matlab中的函数称为Tri = delauny(X,Y,Z) 此功能生成的数据可以用trimesh(Tri,X,Y,Z)trisurf(Tri,X,Y,Z)显示 请记住,trisurf仅适用于3D数据。 如果要调整图表中图表的透明度,请使用alpha设置。

我希望这有帮助

由于传统方法似乎失败了,我建议你手动完成。

  1. 创建一个充满NaN值的Z矩阵。 矩阵的大小应取决于您的xy值。
  2. 循环遍历所有出现的xy ,并将它们的(平均值?) z值放在Z矩阵的正确位置。
  3. 循环遍历所有NaN值并插入它们的值。 也许使用filter2
  4. 使用surf绘制结果曲面

对我来说,看起来你只需要在绘图之前对数据进行排序。

这是一个我认为与你的情况类似的例子(因为我无法下载你的数据)。

x = [2 1 4 3 -1 -3 -4 -2];
y = [1 2 3 4 -1 -2 -3 -4];
z = 32 - x.*x - y.*y;

[X1 Y1] = meshgrid(x,y);
Z1 = 32 - X1.*X1 -Y1.*Y1; 
surf(X1,Y1,Z1)

aux = sort([x;y],2);
x = aux(1,:);
y = aux(2,:);

[X2 Y2] = meshgrid(x,y);

Z2 = 32 - X.*X - Y.*Y;
figure()
surf(X2,Y2,Z2)

第一个数字导致一个非常有问题的表面: 图1(未分类图)

第二个图包含所需的表面: 图2(排序图)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM