手动设置绘图图例/更改顺序
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
以下问题:
我有 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