我有一组数据点,每个数据点都属于某个集群(组)。我需要围绕这些集群中的每一个绘制一个多边形。有谁知道该怎么做?
我是否使用实际数据点来绘制多边形并不重要。我只需要将它们包裹在多边形中。
我有一组数据点,每个数据点都属于某个集群(组)。我需要围绕这些集群中的每一个绘制一个多边形。有谁知道该怎么做?
我是否使用实际数据点来绘制多边形并不重要。我只需要将它们包裹在多边形中。
试试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
这将为您提供一个多边形,其索引与您的集群的异常值一致。
我不确定是否有预制的解决方案,因为我对 MATLAB 不太熟悉,但这听起来像你需要一个凸包解决方案。
希望这能为您指明正确的方向。
convhull 仅在您具有凸形(如椭圆体)时才有效。如果您的数据分布具有凹曲线,例如香蕉形状,则 convhull 将不起作用。幸运的是,MATLAB 有一个函数可以处理这个问题:alphashape
根据“alpha”值,您会在生成的多边形中获得或多或少的面。
一旦获得了刻面的 x,y 坐标,您可以直接绘制它们,但多边形将具有平坦的边,或者:
您可以定义一个 x,y,z 网格,而不是插值,在其中查看数据,并询问 x,y 是否在 alpha 形状内?如果是,给它一个值 z = 1,如果不是,给它一个值 z = 0。然后简单地勾勒 z = 1 的网格。
您也可以使用 impoly 手动绘制多边形
Matlab 文件交换上的 hobbysplines 还允许您平滑多边形的边缘