表面图用3个向量Matlab

时间:2013-11-21 02:34:59

标签: matlab vector plot

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

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

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

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

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

此处还有我的问题图片: here

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

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

提前致谢。

**编辑2:我添加了示例vectors,它们是我从左到右的x,y和z值。

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

麦克

3 个答案:

答案 0 :(得分:1)

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

我希望这会有所帮助

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

对我而言,您似乎只需在绘图前对数据进行排序。

以下是一个我认为与您的案例类似的示例(因为我无法下载您的数据)。

{{1}}

第一个数字会产生一个非常有问题的表面:figure 1 (unsorted plot)

第二个数字包含所需的表面:figure 2 (sorted plot)