2016-10-20 6 views
1

у меня есть свои точки данных и номер кластера следующим образом:Plotting точка данных в различных кластерах

X  Y  cluster 
-0.42042 0.2071 0 
-1.4986 -1.8658 0 
-0.50905 -0.0751 0 
2.1978 1.9568 1 
1.4901 1.6177 1 
1.6961 1.8293 1 
1.6021 0.0857 1 
0.87831 0.71435 1 
2.6688 1.3426 1 
-1.741 0.90686 2 
-1.8332 0.35599 2 
-3.0733 0.42656 2 
-2.1991 0.41843 2 
-2.8099 0.93542 2 
-1.3631 1.0914 2 

Приведенные выше данные были несортированный, так что я использовал sortrows для сортировки по количеству кластеров, и я получаю выше данные ,

Мне нужно построить эти кластеры. Есть ли какая-либо функция MATLAB для построения кластеров? Я знаю, что мы можем использовать что-то вроде этого: plot(M(:,1), M(:,2), '.');

Но этот график все значения в одном кластере. Мне нужно построить в трех кластерах по данным. Кластеры равны 0, 1,2. Таким образом, должны быть построены три кластера с тремя разными цветами. Так что-то вроде этого:

enter image description here

Любая идея, как это сделать?

ответ

1

Вам необходимо разделить данные на три группы и составить их индивидуально. Что-то вроде этого если у вас есть три переменные X, Y и cluster:

grp1 = cluster==0; 
grp2 = cluster==1; 
grp3 = cluster==2; 

Затем сюжет каждой группы в отдельности:

plot(X(grp1),Y(grp1),'.', X(grp2),Y(grp2),'.', X(grp3),Y(grp3),'.') 
+0

спасибо за ваш совет. Как мы разделим эти данные на три группы? – gpuguy

+0

@gpuguy Вы делите данные на 3 группы, как показано в ответе, используя переменные 'grp1',' grp2' и 'grp3'. Попробуйте код и проверите переменные, это должно стать ясным ... – Justin

+0

В следующий раз просто используйте [gscatter] (http://stackoverflow.com/a/40197358/2627163);) – EBH

2

Таким образом, вы можете сделать это несколькими способами: Вы можете использовать текущую цветовую карту для цветов и просто:

scatter(x,y,'cdata',cluster,'marker','.'); 

или как вы писали в своем Код

scatter(M(:,1),M(:,2),'cdata',M(:,3),'marker','.'); 

вы также можете использовать предварительно определенную цветовую карту вместо стандартного

ClusterColorMap=rand(max(M(:,3)),3); %random colormap 
colormap(ClusterColorMap); 
scatter(M(:,1),M(:,2),'cdata',M(:,3),'marker','.'); 

здесь ClusterColorMap будет иметь 3 строки, каждая из которых содержит определенный цвет (в формате RGB в 3-х колонок, выбранных здесь случайным образом). Если вы знаете количество расширенных кластеров, вы можете установить для этой матрицы определенные значения.

+0

Если я рассмотрю ваш второй метод, пожалуйста, объясните, как это напечатает три кластера, для каждого из 0, 1,2? – gpuguy

+0

Получил меня там, имел опечатку в моем коде и добавил несколько объяснений. bw, вы могли бы сделать что-то подобное с графиком, но для рассеянного точечного рассеяния данных() предполагается, что лучше –

1

Вот прямой способ сделать это:

gscatter(x,y,cluster) 

Вот пример с вашими данными:

clusters

и если вы хотите, чтобы установить цвета, символы и т.д. ..

gscatter(x,y,cluster,'cmk','p*^') 

cluster2