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

时间:2010-05-11 20:50:03

标签: matlab cluster-analysis plot polygon

我有一组数据点,每个数据点都属于某个群集(组)。我需要在每个簇周围绘制一个多边形。有谁知道怎么做?

如果我使用或不使用实际数据点来绘制多边形,则无关紧要。我只需要将它们包裹在一个多边形中。

3 个答案:

答案 0 :(得分:7)

尝试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

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

答案 1 :(得分:1)

我不确定是否有预先制定的解决方案,因为我对MATLAB不太熟悉,但这听起来像是你需要一个凸壳解决方案。

希望这能指出你正确的方向。

答案 2 :(得分:1)

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

取决于" alpha"值,您在结果多边形中得到更多或更少的面。

一旦你有了facet的x,y坐标,你可以直接绘制它们,但是多边形将有平坦的边,或者:

而不是插值,你可以定义一个x,y,z网格来查看数据,并问,在alpha形状中是x,y吗?如果是,给它一个值z = 1,如果没有给它一个值z = 0.然后简单地勾画出z = 1的网格。

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

Matlab文件交换中的

hobbysplines还允许您平滑多边形的边缘