【问题标题】:Assign certain colors to certain dots of a scatter plot in MATLAB在 MATLAB 中为散点图的某些点分配某些颜色
【发布时间】:2017-04-21 13:51:42
【问题描述】:

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

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

【问题讨论】:

    标签: matlab scatter-plot


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回答。它工作得很好。但是您知道如何为这 5 种不同颜色在散点图中添加图例吗?
    • 嗯,这是一种混乱的方式,但我找不到更干净的方式。基本上,我们需要创建 5 个不同的散点图叠加,以便图例条目引用这 5 个不同的图。 Figure; hold on; scatter(x(Check==1), y(Check==1),'filled','Cdata', Check(Check==1)); scatter(x(Check==2), y(Check==2),'filled','CData', Check(Check==2)) ... 对 3-5 做同样的事情 hold off; legend('1','2','3','4','5');
    • 非常感谢您的回答。我试过你说的,但它只给了我整个传奇的一种颜色!您对出了什么问题有任何想法吗?我也使用 colormap(Color) 但它不起作用。
    【解决方案2】:

    您需要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 中指定的颜色列表。添加另一种情况就像为数组添加额外的颜色一样简单。

    【讨论】:

      猜你喜欢
      • 2013-04-06
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      • 2018-04-08
      相关资源
      最近更新 更多