2016-02-05 229 views
0

我有一个matlab代码,其中我绘制了几个2d点,属于16类,所以我使用16种不同的颜色。有没有简单的方法让图例表示每种颜色的类名?Matlab的图形绘制循环用不同的颜色

代码看起来是这样的:

for i=1:length(data) 
    color = class_color(i); 
    plot(data(i,1),data(i,2),'*','Color',color); 
    hold on; 
end 

回答

0

这是一个坏主意,用16种颜色来区分数据点。喜欢的颜色将融合在一起。我建议使用不同的标记+颜色。四个标记,如'*','x','+','.'等,每个标记有四种颜色。那么你可以使用legend('Class 1','Class 2', Class n')。它应该显示特定颜色的每个标记。这可能是这样的情况,如果最好写出没有循环的每一行,并且在每个标记/颜色/类描述它是什么之后添加%注释,以防以后必须回到此代码。这不是一个真正的解决方案,但是这就是我要做的。

+0

标记颜色的想法是一个很好的想法,因为我可以区分不同的子类,虽然“legend('class1',... etc)部分不起作用,因为图例不知道相应的类,它只是指前16个样本,它们恰好是ay类的 –

0

您可以绘制单个类的所有数据点以及逻辑索引。

假设你有某处定义的类,在class_number这是相同的长度data说,与条目从116,和c_colors,长度为16的单元阵列与对应于每个类别的颜色:然后

for jj = 1:16 
    mask = (class_number==jj); 
    plot(data(mask,1),data(mask,2),'*','Color',c_colors{jj}); 
    hold on 
end 
hold off 

(未测试)。

然后,您可以将类的名称存储在单元格数组中,并在其上调用legend

class_name{1} = 'Type a'; 
class_name{2} = 'Type b'; 
% etc, up to 
class_name{15} = 'Type o'; 
class_name{16} = 'Type p'; 
legend(class_name); 
+0

我的问题不是如何用多个值调用图例,而不是将点的颜色与图例的特定值相关联 –

+0

@ConstantinePat好吧,不知道如何将它添加到你的原始版本的情节,但建议另一种绘图方式应该与它一起工作。 – Steve