在matlab中使用不同的颜色和标记为两个不同的分组变量创建散点图
我似乎在使用两个分组变量在matlab中创建二维散点图时出现问题,其中一个显示不同的颜色,另一个显示不同的标记。变量“分数”具有X和Y值,并且两个分组变量是“att21”和“att22”。在matlab中使用不同的颜色和标记为两个不同的分组变量创建散点图
我使用下面的代码:
f=figure;
gscatter(score(:,1), score(:,2), {att21, att22}, 'br', 'xo');
什么,我得到的是: scatter plot
不过,我希望得到的是蓝色的L4和红色的L1和片状x和o为Chunk。我也希望这个传说指出这一点。
我错过了什么?
感谢您的帮助......
当你通过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
具有比在每个分组变量
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
如果任何人有我一个解决方案,将是巨大的......
非常感谢
我会编辑我的答案,以包括您不知道组数的情况。最好是创建标记和颜色字符串,所以'gscatter'处理图例。 –
感谢这么多。它奇妙地工作! –
@ G.Herzlinger很高兴能帮到您,请将您的问题设置为已回答,以便可以关闭。 –