手动设置绘图图例/更改顺序

Set plot legend manually / change order

以下问题:

我有 5000 个二维 (x/y) 数据点,其中包含 10 个不同的 classes。 (存储在 5000x2 矩阵中) 所有数据点都绘制在一张图中,每个 class 都有自己的 color/marker 样式。

数据点的顺序是随机的!(所以它可能以 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 显示每个 class 一次的图例,与它获得 plottet 的顺序无关。

有什么想法吗?

尝试将您的数据点分成不同的 class,然后使用绘图命令绘制每个 class。然后,每个 class 会自动得到一个新的颜色, legend 会自动标记每个。例如,如果您将每个数据点的 classes 加载到一个名为 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