首页 > 解决方案 > 如何在for循环后在图中插入图例

问题描述

我在 MATLAB 的 3D 图中插入图例时遇到问题。我有一个数据列表,特别是我有一个nx3填充了要绘制的数据的矩阵,我想通过应用阈值来分离这些数据。

在我的情况下,阈值是一个时间,因此如果第ith 个数据低于阈值时间,它将以蓝色绘制,否则以红色绘制。

代码是

figure(1)
plot3(ra(1),dec(1),Time2plot(1),'*','Color','r', 'DisplayName', 'observation day');
hold on;
plot3(ra(end),dec(end),Time2plot(end),'*','Color','b','DisplayName', 'next day');
legend show;

for i = 1:length(Time2plot)
    if timeofday(Time2plot(i)) > B(1) && timeofday(Time2plot(i)) < B(2)
        hold on;
        plot3(ra(i),dec(i),Time2plot(i),'*','Color', 'b');

    else
        hold on;
        plot3(ra(i),dec(i),Time2plot(i),'*','Color','r');

    end
end

hold on;
title(['RA Dec in 3D ', date(1,1)]);
xlabel('RA');
ylabel('Dec');
zlabel('Time');
ztickformat('HH:mm:ss');
grid on;

其中 B 是阈值。结果是在此处输入图像描述

我希望图例中只有两行:“第二天”和“观察日”,而不是所有数据。

标签: matlabplotmatlab-figure

解决方案


如果您的图形已经有图例,并且您legend再次使用 - 命令,旧的图例将被覆盖。因此,在您的情况下,您应该能够执行以下操作:

legend('observation day','next day');

只需将此行附加到您的代码中,您就会得到一个包含两个条目的图例。
当您要保留的图例条目不是前两个时,情况变得有点棘手。在这种情况下,您首先必须置换Children轴对象的 ,以便它们成为第一个条目。让我们假设'observation day'是您的传奇的第 3 个条目和'next day'第 4 个条目。在这种情况下,您需要在应用新图例之前执行以下操作:

h=gca;
h.Children=h.Children([(3:4).';(1:2).';(5:length(h.Children)).'])

推荐阅读