2016-10-20 6 views
1

ich meine Datenpunkte und Cluster-Nummer haben wie folgt:Plotten Datenpunkt in verschiedenen Clustern

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 

Die obigen Daten war unsortiert, so habe ich sortrows in Bezug auf die Cluster-Nummer zu sortieren und ich erhalte die oben genannten Daten .

Ich muss diese Cluster plotten. Gibt es eine MATLAB-Funktion zum Zeichnen von Clustern? Ich weiß, dass wir etwas wie das verwenden können: plot(M(:,1), M(:,2), '.');

Aber das plotten alle Werte in einem Cluster. Ich muss in drei Clustern nach Daten plotten. Die Cluster sind 0, 1,2. Daher sollten drei Cluster mit drei verschiedenen Farben gezeichnet werden. So etwas wie folgt aus:

enter image description here

eine Ahnung, wie man das macht?

Antwort

1

Sie müssen Ihre Daten in drei Gruppen aufteilen und einzeln grafisch darstellen. So etwas wie dies vorausgesetzt, Sie haben drei Variablen X, Y und cluster:

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

Dann jede Gruppe zeichnen einzeln:

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

danke für Ihren Rat. Wie teilen wir diese Daten in drei Gruppen ein? – gpuguy

+0

@gpuguy Sie teilen die Daten in 3 Gruppen auf, wie in der Antwort gezeigt, mit den Variablen 'grp1',' grp2' und 'grp3'. Probieren Sie den Code und überprüfen Sie die Variablen, sollte es klar werden ... – Justin

+0

Das nächste Mal, verwenden Sie einfach [gscatter] (http://stackoverflow.com/a/40197358/2627163);) – EBH

2

So tun Sie können es in mehrfacher Hinsicht: Sie können die Verwendung aktuelle Farbkarte für die Farben und einfach:

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

oder wie Sie in Ihrem geschrieben haben

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

Sie könnten auch eine vordefinierte Farbkarte anstelle des

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

hier ClusterColorMap 3 Zeilen müssten Standard verwenden, die jeweils eine bestimmte Farbe, die (im RGB-Format in den 3 Spalten hier gewählt als zufällig). Wenn Sie die Anzahl der Cluster in Advanced kennen, können Sie diese Matrix auf bestimmte Werte setzen.

+0

Wenn ich Ihre zweite Methode, bitte betrachten erklären, wie dies drei Cluster für jeweils 0, 1,2 drucken? – gpuguy

+0

Hat mich dort gebracht, hatte einen Tippfehler in meinem Code und fügte ein paar Erläuterungen hinzu. bw, du könntest etwas Ähnliches mit plot machen, aber für Streupunktdaten sollte streat() besser sein –

1

Hier ist ein direkter Weg, dies zu tun:

gscatter(x,y,cluster) 

Hier ist ein Beispiel mit Ihren Daten:

clusters

und wenn Sie die Farben einstellen, Symbole usw. ..

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

cluster2

Verwandte Themen