手动设置图例/更改顺序

时间:2015-02-03 14:15:44

标签: matlab plot legend

以下问题:

我有5000个二维(x / y)数据点,由10个不同的类组成。 (存储在5000x2矩阵中) 所有数据点都是一个图中的plottet,每个类都有自己的颜色/标记样式。

Datapoints的顺序是随机!(所以也许它从class1开始,也许是class8,......也许有一个class5后面跟着另一个class5,依此类推。 ..)

简化的代码段:

figure(1)
for k=1:5000
...
   if class == 1
      ColorValue = 'r'; MarkValue = '+';
      legendset = [legendset;'class1'];
   elseif class == 2
   ...
   end

   plot( Data(k,1), Data(k,2),'color', ColorValue, 'marker', MarkValue );
   hold on;
end

legend(legendset(1:10));

所以在'legendset'中,我按照plottet的顺序设置了图例值,但是因为它没有顺序并且出现重复,所以图例完全搞砸了。

我想要一个传奇,它从class1-10中显示每个类一次,与plottet的顺序无关。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

尝试将数据点分成不同的类,然后使用plot命令绘制每个类。然后,每个类将自动获得一种新颜色,legend将自动标记每个颜色。例如,如果您将每个数据点的类加载到名为Classes的向量中(例如,使用您的示例说明Classes = [1 8 5 5 ...]),您可能会执行以下操作:

nClasses = 10;

for i = 1:nClasses
    % Extract just the data points with class i:
    DataI = Data(Classes == i, :);

    % Form a string with the class name:
    ClassName = sprintf('Class %d', i);

    % Plot this data. The 'DisplayName' property will appear
    %  in the legend.
    plot(DataI(:,1), DataI(:,2), 'DisplayName', ClassName);
    hold all;
end

legend