我似乎在使用两个分组变量在matlab中创建二维散点图时遇到问题,这两个分组变量为其中一个显示不同的颜色,另一个显示不同的标记。变量“得分”具有X和Y值,两个分组变量为“att21”和“att22”。
我使用以下代码:
f=figure;
gscatter(score(:,1), score(:,2), {att21, att22}, 'br', 'xo');
我得到的是: scatter plot
然而,我想得到的是L4的蓝色和L1的红色和Flake的x和Chunk的o。我也希望这个传说能够表明这一点。
我错过了什么?
感谢您的帮助......
答案 0 :(得分:0)
当您使用2个分组变量进行分组时,每个变量分别有2个类别,您隐式创建4个不同的组,因此您必须为4个组定义颜色和标记,在您的情况下
gscatter(score(:,1), score(:,2), {att21, att22}, 'rrbb', 'xoxo');
但是,如果定义的颜色或标记小于组的数量,gscatter
将重复该模式,您可以通过执行
gscatter(score(:,1), score(:,2), {att21, att22}, 'rrbb', 'xo');
如果您不知道每个类别中的组数,可以使用命令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);
确保marker
和clr
的元素数多于每个分组变量中可能的组数
答案 1 :(得分:0)
所以如果使用嵌套循环,我想出了解决方案。
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组。我唯一的问题是我无法创建一个图例来显示所有组的不同标签。
我所能得到的就是:plot with bad legend
如果有人为我提供解决方案,那就太棒了......
非常感谢