在 MATLAB 中围绕数据点组绘制多边形

Posted

技术标签:

【中文标题】在 MATLAB 中围绕数据点组绘制多边形【英文标题】:Drawing a polygon around groups of datapoints in MATLAB 【发布时间】:2011-02-18 08:25:21 【问题描述】:

我有一组数据点,每个数据点都属于某个集群(组)。我需要围绕这些集群中的每一个绘制一个多边形。有谁知道该怎么做?

我是否使用实际数据点来绘制多边形并不重要。我只需要将它们包裹在一个多边形中。

【问题讨论】:

【参考方案1】:

试试convhull 功能。它从数据集中定义凸包的点返回索引。您必须为您绘制的每个集群执行此操作。

例如:

x=rand(1,100); %#generate x and y data for your clusters
y=rand(1,100);
k=convhull(x,y); %#generate indices marking the outermost points

hold on
plot(x,y,'b.') %# plot your cluster points
plot(x(k),y(k),'r-') %# plots only k indices, giving the convex hull

这将为您提供一个多边形,其索引与您的集群的异常值一致。

【讨论】:

【参考方案2】:

由于我对 MATLAB 不太熟悉,因此我不确定是否有预先制定的解决方案,但这听起来您需要一个凸包解决方案。

希望这会为您指明正确的方向。

【讨论】:

【参考方案3】:

convhull 仅适用于凸形(如椭圆体)。如果您的数据分布具有凹曲线,例如香蕉形状,则 convhull 将不起作用。幸运的是,MATLAB 有一个函数可以处理这个问题:alphashape

根据“alpha”值,您会在生成的多边形中获得更多或更少的面。

一旦获得了刻面的 x,y 坐标,您可以直接绘制它们,但多边形的边将是平坦的,或者:

您可以定义一个 x,y,z 网格来查看数据,而不是插值,并询问 x,y 是否在 alpha 形状内?如果是,给它一个值 z = 1,如果不是,给它一个值 z = 0。然后简单地勾勒出 z = 1 的网格。

你也可以使用impoly手动绘制多边形

Matlab 文件交换上的爱好样条也可以让您平滑多边形的边缘

【讨论】:

以上是关于在 MATLAB 中围绕数据点组绘制多边形的主要内容,如果未能解决你的问题,请参考以下文章

用matlab绘制正六边形,求代码~~

MATLAB | 如何绘制三维曲线曲面多边形投影(三视图)?

MATLAB | 如何绘制三维曲线曲面多边形投影(三视图)?

MATLAB画图工具中坐标外面的底色是灰的,该如修改?

MATLAB 50行代码绘制超好看的旋转九边形

MATLAB | 全网唯一,三元相映射图绘制(三元相分级统计地图)