在MATLAB中为散点图的某些点指定某些颜色

时间:2017-04-21 13:51:43

标签: matlab scatter-plot

我需要为散点图的某些点指定某些颜色。我写过这样的话:

Color = zeros(size(Check,1),1);

for i = 1:size(Check,1)
    if Check(i) == 0
        Color(i) = [0.3010  0.7450  0.9330];
    elseif Check(i) == 1
        Color(i) = [0.4660  0.6740  0.1880];
    elseif Check(i) == 2
       Color(i) = [0.9290  0.6940  0.1250];
    elseif Check(i) == 3
        Color(i) = [0.8500  0.3250  0.0980];
    elseif Check(i) == 4
        Color(i) = [0.6350  0.0780  0.1840];
    end
end

scatter(x,y,Color,'filled','s');

请注意' x',' y','颜色'和'检查'具有相同的尺寸(15000 x 1)。 '检查'中的数字是' 0',' 1',' 2',' 3'或' 4'。我只需要根据我在'检查'中的数字为我的散点图分配五种​​不同的颜色。矩阵。颜色应该是我在代码中使用的颜色,因为我需要这个绘图来匹配我已经拥有的另一个条形图。任何帮助将受到高度赞赏!

2 个答案:

答案 0 :(得分:2)

MATLAB中的散点图具有CData属性,可用于为绘图指定颜色。这可以是nx3矩阵,就像您在Color变量中一样。但是,CData属性也可以是向量,您可以使用colormap()函数!

像adjpayot一样开始:

Color = [0.3010  0.7450  0.9330;
0.4660  0.6740  0.1880;
0.9290  0.6940  0.1250;
0.8500  0.3250  0.0980;
0.6350  0.0780  0.1840];

% Assume you have a figure open already
scatter(x,y,'filled', 'CData', Check);
colormap(Color);
colorHandle = colorbar();

答案 1 :(得分:1)

您需要Color成为Color = zeros(size(Check,1),3); 这是因为颜色是RGB值,因此每个颜色通道需要一个数字。 这意味着你的代码的其余部分必须是:

Color = zeros(size(Check,1),3);

for i = 1:size(Check,1)
    if Check(i) == 0
        Color(i,) = [0.3010  0.7450  0.9330];
    elseif Check(i) == 1
        Color(i,:) = [0.4660  0.6740  0.1880];
    elseif Check(i) == 2
       Color(i,:) = [0.9290  0.6940  0.1250];
    elseif Check(i) == 3
        Color(i,:) = [0.8500  0.3250  0.0980];
    elseif Check(i) == 4
        Color(i,:) = [0.6350  0.0780  0.1840];
    end
end

scatter(x,y,Color,'filled','s');

如果你想要,你也可以通过以下方式摆脱循环:

Color=[0.3010  0.7450  0.9330;
0.4660  0.6740  0.1880;
0.9290  0.6940  0.1250;
0.8500  0.3250  0.0980;
0.6350  0.0780  0.1840]

scatter(x,y,Color(Check+1,:),'filled','s');

在该代码中,我使用Check索引Color中指定的颜色列表。添加另一个案例就像为阵列添加额外的颜色一样简单。