在不同的matlab运行中为图例选择特定的行

时间:2017-05-20 16:06:39

标签: matlab plot matlab-figure legend

我做了一个模拟,计算物体的轨迹并绘制它。

该图如下所示:

figure(1)
plot(ArrayRT1,ArrayRT2);
hold on
plot(ArrayRD1,ArrayRD2);
plot(ArrayRM1,ArrayRM2);
title('Interception Trajectory')
xlabel('Downrange (Kft)')
ylabel('Altitude (Kft) ')
grid on

其中:

plot(ArrayRT1,ArrayRT2) - 第一个物体轨迹
plot(ArrayRD1,ArrayRD2) - 第二个物体轨迹
plot(ArrayRM1,ArrayRM2) - 第三个物体轨迹

现在,我运行相同的模拟而没有关闭具有不同初始条件的图形来检查它们如何影响轨迹,因此基本上在第二次运行之后我将在图表上有6条线。

当我制作图例时,如何仅为4行显示图例: 第1轮1,2,3和第6轮(第2轮第3轮)

谢谢。

1 个答案:

答案 0 :(得分:0)

选项1

使用语法legend(subset,___)仅将图例设置为轴中的特定对象。这需要获取所有这些对象的句柄。您可以通过将其分配给句柄数组来实现,如下例所示:

x = 1:10;
% plotting all the lines:
figure(1)
hold on
p(1) = plot(x,2*x);
p(2) = plot(x,3*x);
p(3) = plot(x,4*x);
p(4) = plot(x,2*x+1);
p(5) = plot(x,3*x+1);
p(6) = plot(x,4*x+1);
hold off
% set the legend to a subset of the lines
legend(p([1:3 6]),{'Line 1', 'Line 2','Line 3','Line 6'})

或者,您可以“标记”要附加图例的行,并使用findobj找到其句柄,如下面选项2 中所述。

选项2

您可以将图表的属性DisplayName设置为“无图例”(或任何其他字符串),然后使用循环将其关闭以用于这些特定图。这是一个例子:

x = 1:10;
% plotting all the lines:
figure(1)
hold on
plot(x,2*x,'DisplayName','Line 1');
plot(x,3*x,'DisplayName','Line 2');
plot(x,4*x,'DisplayName','Line 3');
plot(x,2*x+1,'DisplayName','no legend'); % tag for no legend
plot(x,3*x+1,'DisplayName','no legend');% tag for no legend
plot(x,4*x+1,'DisplayName','Line 6');
hold off
% set the legend off for all lines with 'no legend'
set_leg_off = findobj('DisplayName','no legend');
for k = 1:numel(set_leg_off)
    set_leg_off(k).Annotation.LegendInformation.IconDisplayStyle = 'off';
end
% show the legend
legend show

请注意:

  1. 您不需要为所有线路设置DisplayName,仅适用于您要从图例中删除的线路。但是,如果您只是编写legend show,它会在计算数据行时忽略它们,因此如果省略第6行的DisplayName,它将为其指定标签“data1”。
  2. 您可以使用其他属性(如tag)来标记非图例线(或任何其他属性,以区分您想要绘制的线和不想要的线),然后如果您稍后决定为了向他们展示他们不会出现标签“没有传说”。请记住纠正对您使用的财产的findobj来电。
  3. 请注意,更改对象的tagDisplayName 不会影响它们在图例中的外观,这只是为{{{{ 3}}函数,因此您只能在它们上循环并关闭图例。如果您想稍后打开图例,则需要再次使用此循环。
  4. 在这两种情况下,结果都是:

    findobj