2016-07-27 21 views
0

Ich habe Probleme beim Erstellen eines 2D Streudiagramms in Matlab mit zwei Gruppierungsvariablen, die verschiedene Farben für eines von ihnen und verschiedene Markierungen für das andere anzeigt . Die Variable "score" hat die X- und Y-Werte und die zwei Gruppierungsvariablen sind "att21" und "att22".Erstellen eines Streudiagramms in Matlab mit verschiedenen Farben und Markern für zwei verschiedene Gruppierungsvariablen

Ich verwende den folgenden Code ein:

f=figure; 
gscatter(score(:,1), score(:,2), {att21, att22}, 'br', 'xo'); 

was ich bekomme ist: scatter plot

jedoch, was ich will ist blau für Flake für L4 und Rot für L1 und x erhalten und o für Chunk. Ich möchte auch, dass die Legende darauf hinweist.

Was fehlt mir?

Danke für jede Hilfe ...

Antwort

0

Wenn Sie durch zwei Gruppenvariablen gruppieren, mit je 2 Kategorien, Sie sind 4 verschiedene Gruppen implizit erstellen, so dass Sie die Farbe und die Markierungen für die vier Gruppen zu definieren, in Ihrem Fall

gscatter(score(:,1), score(:,2), {att21, att22}, 'rrbb', 'xoxo'); 

Aber da gscatter wird das Muster wiederholen, wenn die definierte Farbe oder Markierung kleiner als die Anzahl der Gruppen ist, können Sie 2 Zeichen speichern, indem

gscatter(score(:,1), score(:,2), {att21, att22}, 'rrbb', 'xo'); 
tun 0

Wenn Sie die Anzahl der Gruppen in jeder Kategorie nicht kennen, können Sie sie mit dem Befehl unique abrufen und sie zählen und dann diese Nummer zum Erstellen der Markierungen und Farben verwenden. Für Ihr Beispiel

marker = '+o*.xsd'; 
clr = 'rgbymck'; 

n_groups_att1 = length(unique(att21)); 
n_groups_att2 = length(unique(att22)); 

m = marker(1:n_groups_att2); 

c = repmat(clr(1:n_groups_att1),n_groups_att2,1); 
c = c(:)'; 

gscatter(score(:,1), score(:,2), {att21, att22}, c, m); 

nur sicherstellen, dass und clr mehr Elemente als mögliche Anzahl von Gruppen in jeder Gruppenvariablen

+0

Vielen wird so viel. Es funktioniert wunderbar! –

+0

@G.Herzlinger froh, dass ich helfen konnte, bitte setze deine Frage so, dass sie beantwortet werden kann, damit sie geschlossen werden kann. –

0

OK haben, glaube ich es herausgefunden. Die Lösung von Noel ist nur dann gut, wenn ich die Anzahl der Gruppen in jeder Gruppierungsvariablen kenne, aber das ist leider nicht der Fall.

Also kam ich auf die Lösung, wenn Sie verschachtelte Schleifen verwenden.

f=figure; 
hold on; 
marker = '+o*.xsd'; 
clr = 'rgbymck'; 

att1v = unique(att1); 
att2v = unique(att2); 
attv = [att1v; att2v]; 
att1count = 1; 
att2count = 1; 

for k=1:length(score) 
    att1count = 1; 
    att2count = 1; 
    while att1count <= length(att1v) 
     if isequal(att1(k),att1v(att1count)) 
      while att2count <= length(att2v) 
       if isequal(att2(k),att2v(att2count)) 
        f=scatter(score(k,1),score(k,2),15,clr(att1count),marker(att2count)); 

       end 
       att2count = att2count + 1; 
      end 
     end 
     att1count = att1count + 1; 
    end 
end 
legend(attv); 

Jetzt ist das Streudiagramm OK und es unterstützt bis zu 7 Gruppen in jeder Variablen. Das einzige Problem, das mir bleibt, ist, dass ich keine Legende erstellen kann, die die verschiedenen Labels für alle Gruppen anzeigt.

Alles, was ich bekommen zu verwalten, ist dies: plot with bad legend

Wenn jemand eine Lösung für mich hat es große ...

Thanks a lot

+0

Ich bearbeite meine Antwort, um den Fall aufzunehmen, wenn Sie die Anzahl der Gruppen nicht kennen. Es ist besser, an der Erstellung der Marker und Farbstrings zu arbeiten, so dass 'gscatter' die Legende behandelt. –