2017-04-21 63 views
0

我需要为散点图的特定点指定某些颜色。我已经写了这样的事情:在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', '颜色' 和 '检查' 具有相同的尺寸(15000×1)。 '检查'中的数字是'0','1','2','3'或'4'。我只需要根据我在“检查”矩阵中的数字为散点图分配五种​​不同的颜色。颜色应该是我在代码中使用的那些颜色,因为我需要这个阴谋与我已有的另一个条形图匹配。任何帮助将不胜感激!

回答

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

感谢您的回答。它效果很好。但是你知道我可以如何为这5种不同颜色的散点图添加一个图例吗? – Antonio

+0

嗯,这是一个混乱的方式来做到这一点,但我找不到更干净的方法。基本上,我们需要创建5个不同的散点图,以便图例条目参考这5个不同的图。 (x(Check == 1),y(Check == 1),'filled','Cdata',Check(Check == 1));'';'; (x(Check == 2),y(Check == 2),'filled','CData',Check(Check == 2))' ...对3-5做相同的处理 ' hold';' 'legend('1','2','3','4','5');' – user2831602

+0

非常感谢您的回答。我尝试了你所说的,但它给了我整个传奇只有一种颜色!你对什么是错的有什么想法吗?我也使用colormap(Color),但它不起作用。 – Antonio

1

您需要ColorColor = 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中指定的颜色列表。添加另一种情况非常简单,只需向数组中添加一个额外的颜色即可。

+0

很大的帮助,谢谢! – Antonio