在 MATLAB 中为散点图的某些点分配某些颜色

Assign certain colors to certain dots of a scatter plot in MATLAB

我需要为散点图的某些点分配某些颜色。我写过这样的东西:

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'、'Color' 和 'Check' 具有相同的尺寸 (15000 x 1)。 'Check' 中的数字是“0”、“1”、“2”、“3”或“4”。我只需要根据 'Check' 矩阵中的数字为散点图分配五种​​不同的颜色。颜色应该是我在代码中使用的颜色,因为我需要此图与我已有的另一个条形图相匹配。任何帮助将不胜感激!

你需要 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 中指定的颜色列表。添加另一个案例就像向数组添加额外的颜色一样简单。

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();