在 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 | 如何绘制三维曲线曲面多边形投影(三视图)?