【问题标题】:Matlab legend for plotting in loop with different colorsMatlab图例用于以不同颜色循环绘制
【发布时间】:2016-05-15 11:46:05
【问题描述】:

我在 matlab 中有一个代码,我在其中绘制了几个 2d 点,它们属于 16 个类,所以我使用 16 种不同的颜色。有没有什么简单的方法可以有一个图例来表示每种颜色的类名?

代码如下所示:

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

【问题讨论】:

    标签: matlab loops plot colors legend


    【解决方案1】:

    您可以将单个类的所有数据点与逻辑索引一起绘制。

    假设您在某处定义了类,例如在class_number 中,它的长度与data 相同,条目范围从116,以及c_colors,长度为16 的单元格数组每个类对应的颜色:then

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

    【讨论】:

    • 我的问题不是如何用多个值调用图例,而是将点的颜色与图例的特定值相关联
    • @ConstantinePat。好的,不知道如何将它添加到您的原始版本的情节中,但建议了另一种应该适用的绘图方式。
    【解决方案2】:

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

    【讨论】:

    • 标记颜色的想法很好,因为我可以区分子类,尽管“legend('class1',...etc) 部分不起作用,因为图例没有”不知道对应的类。它只是指前16个样本,恰好是y类。
    猜你喜欢
    • 2012-04-26
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 2020-09-26
    相关资源
    最近更新 更多