2010-05-11 702 views
6

我有一組數據點,每個數據點都屬於某個特定的羣集(組)。我需要在這些簇的每一個周圍繪製一個多邊形。有誰知道如何去做?在MATLAB中的數據點組周圍繪製多邊形

如果我使用或不使用實際的數據點來繪製多邊形,這並不重要。我只是需要他們被包裹在一個多邊形。

回答

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

我不確定是否有預先制定的解決方案,因爲我對MATLAB不太熟悉,但是這聽起來像是需要凸包解決方案。

希望這點能指引您朝着正確的方向發展。

1

convhull僅適用於具有凸形狀(如橢圓體)的情況。如果您的數據分佈具有凹曲線,例如香蕉形狀,則convhull將無法工作。幸運的是,MATLAB有一個函數來處理這個問題:alphashape

根據「alpha」值,您可以在生成的多邊形中獲得更多或更少的構面。

一旦你有X,小面的y座標,您可以直接繪製出來,但多邊形將有平坦的側面,或:

,而不是插的,你可以定義一個X,Y,Z電網在其中查看數據,並要求,是在α形狀內的x,y?如果是,給它一個值z = 1,並且如果不給它一個值z = 0。然後簡單輪廓網格其中z = 1

也可以使用impoly繪製多邊形手動

matlab文件交換中的hobbysplines也允許你平滑多邊形的邊緣