2016-07-27 107 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'处理图例。 –

相关问题