2016-07-27 111 views
0

我似乎在使用兩個分組變量在matlab中創建二維散點圖時出現問題,其中一個顯示不同的顏色,另一個顯示不同的標記。變量「分數」具有X和Y值,並且兩個分組變量是「att21」和「att22」。在matlab中使用不同的顏色和標記爲兩個不同的分組變量創建散點圖

我使用下面的代碼:

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

什麼,我得到的是: scatter plot

不過,我希望得到的是藍色的L4和紅色的L1和片狀x和o爲Chunk。我也希望這個傳說指出這一點。

我錯過了什麼?

感謝您的幫助......

回答

0

當你通過2個變量,每2個類別,你是隱式創建4個不同的組進行分組,所以你必須定義了4組顏色和標記在你的情況

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

但由於gscatter將重複模式,如果定義的顏色或標誌比組的數目少,你可以通過做

gscatter(score(:,1), score(:,2), {att21, att22}, 'rrbb', 'xo'); 
保存2個字符0

如果您不知道每個類別中的組數,可以使用命令unique獲取它們並對它們進行計數,然後使用該數字創建標記和顏色。對於示例

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); 

只要確保和clr具有比在每個分組變量

+0

感謝這麼多。它奇妙地工作! –

+0

@ G.Herzlinger很高興能幫到您,請將您的問題設置爲已回答,以便可以關閉。 –

0

OK儘可能多的羣體更多的元素,我想我想通了。只有當我知道每個分組變量中的組數時,Noel提供的解決方案纔是有效的,但不幸的是情況並非如此。

所以我想出瞭解決方案,如果使用嵌套循環。

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); 

現在散點圖是可以的,它的每個變量最多支持7個組。我留下的唯一問題是,我無法設法創建一個Legend來顯示所有組的不同標籤。

所有我設法得到是這樣的:plot with bad legend

如果任何人有我一個解決方案,將是巨大的......

非常感謝

+0

我會編輯我的答案,以包括您不知道組數的情況。最好是創建標記和顏色字符串,所以'gscatter'處理圖例。 –

相關問題