防止特定绘图条目显示在MATLAB图例上

时间:2016-11-30 22:27:17

标签: matlab plot

我需要阻止特定的绘图条目显示在Matlab图例上。

示例:

% x and y are any plot data
for i=1:5
    plot(x,y);
    plot(x2,y2,'PleaseNoLegend!'); % I need to hide this from legend
end
legend('show');

我是否可以在plot命令中设置任何标志,以便此特定条目不会显示在图例中?

3 个答案:

答案 0 :(得分:6)

您可以通过将'HandleVisibility'属性设置为'off'来实现此目的。请注意,这会将这些图的句柄隐藏到所有函数中,而不仅仅是legend

例如,

hold on
for k = 1:3
    x = 1:10;
    y = rand(1,10);
    x2 = x;
    y2 = y + 2;
    plot(x,y);
    plot(x2,y2,'--','HandleVisibility','off'); % Hide from legend
end
legend('show')

生成图表

enter image description here

答案 1 :(得分:4)

您可以使用semi-documented function called hasbehavior,它允许您在发出绘图命令后忽略图例中的各个绘图。

figure;
hold on;
for i=1:5
    plot(x,y);
    h = plot(x2,y2);
    hasbehavior(h,'legend',false);
end
legend('show');

它的半文档证明它可能迟早会在较新的MATLAB版本中破解,因此请谨慎使用。对于某些应用程序,它可能仍然是一个方便的选择。

正如@stephematician指出的那样,这个MATLAB内置在Octave中也是不可用的,这可能是其他答案更可取的另一个原因。

答案 2 :(得分:4)

正如路易斯·门多提到的那样(我不知何故错过了这个),句柄对于他的答案中的所有其他功能都是隐藏的,这在大多数情况下都是可以的,但是一个看起来与上面相同并且没有这个的替代解决方案效果是:

k_values = 1:3;
h = nan(size(k_values));
x = 1:10;

hold on
for k = k_values
    y = rand(size(x));
    y2 = y + 2;
    h(k) = plot(x,y);
    plot(x,y2,'--');
end
hold off

legend(h, strcat('data', num2str(k_values')))

final命令为plot(x,y)命令返回的每个句柄设置图例条目。第一个参数是1x3行处理数组,它们将出现在图例中,第二个参数是3x5字符矩阵,其中每一行都是一个标签。