在matlab中使用不同颜色和标记为两个不同的分组变量创建散点图

时间:2016-07-27 06:35:49

标签: matlab grouping scatter-plot

我似乎在使用两个分组变量在matlab中创建二维散点图时遇到问题,这两个分组变量为其中一个显示不同的颜色,另一个显示不同的标记。变量“得分”具有X和Y值,两个分组变量为“att21”和“att22”。

我使用以下代码:

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

我得到的是: scatter plot

然而,我想得到的是L4的蓝色和L1的红色和Flake的x和Chunk的o。我也希望这个传说能够表明这一点。

我错过了什么?

感谢您的帮助......

2 个答案:

答案 0 :(得分:0)

当您使用2个分组变量进行分组时,每个变量分别有2个类别,您隐式创建4个不同的组,因此您必须为4个组定义颜色和标记,在您的情况下

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

但是,如果定义的颜色或标记小于组的数量,gscatter将重复该模式,您可以通过执行

来保存2个字符
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);

确保markerclr的元素数多于每个分组变量中可能的组数

答案 1 :(得分:0)

好吧,我想我弄明白了。只有当我知道每个分组变量中的组数时,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组。我唯一的问题是我无法创建一个图例来显示所有组的不同标签。

我所能得到的就是:plot with bad legend

如果有人为我提供解决方案,那就太棒了......

非常感谢