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

9
我是一名有用的助手,可以为您进行文本翻译。以下是需要翻译的内容:

我需要防止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');

有没有在绘图命令中设置标志的方法,使得特定的条目不会出现在图例中?

1
h=plot(...); hasbehavior(h,'legend','false'),至少对于HG1有效,不确定HG2。 - Andras Deak -- Слава Україні
代表另一个用户询问:您能否更具体一些?您是否想设置任何条件以不绘制? - Andras Deak -- Слава Україні
使用hasbehavior函数发生错误。行为状态必须是逻辑或数值类型。 - Pedro77
Luis的解决方案似乎更合适:) - Andras Deak -- Слава Україні
@AndrasDeak 我认为你的想法更加合适。我的方法会隐藏所有用途的句柄。我不知道 hasbehavior。发出来吧! - Luis Mendo
显示剩余5条评论
3个回答

8
您可以通过将'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')

produces the graph

enter image description here


这种方法可能会对其他功能产生意想不到的后果。我还建议为特定句柄设置图例,例如 lh = plot(x1,y1,x2,y2); legend(lh(1), 'label1') - stephematician
2
@stephematician 是的,这就是我最后一行想要表达的意思。你的想法更好,你应该发表一个答案。 - Luis Mendo

5
你可以使用半文档化的函数 hasbehavior,该函数允许你在发出绘图命令后忽略图例中的单个绘图。详见此处
figure;
hold on;
for i=1:5
    plot(x,y);
    h = plot(x2,y2);
    hasbehavior(h,'legend',false);
end
legend('show');

这个功能只有半文档化,这意味着在较新版本的MATLAB中它可能会早或晚出现问题,因此请小心使用。对于某些应用程序来说,它仍然是一个方便的选择。

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


这是一个很好的答案!唯一的缺点是它不兼容Octave(如果你对这样的东西感兴趣的话);) - stephematician
@stephematician 谢谢 :) 很好的观点,我原则上更喜欢跨兼容性,但我对 Octave 不适用这一点并不感到太惊讶,抱歉 :( (还有感谢,Luis ;)) - Andras Deak -- Слава Україні

4

正如Luis Mendo所提到的(我不知道这一点),他在回答中隐藏了句柄,这对大多数情况来说是可以的,但一个看起来与上面相同且没有这种影响的替代解决方案是:

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')))

最终的命令为plot(x,y)命令返回的每个把手设置图例条目。第一个参数是一行三个折线句柄数组,将出现在图例中,第二个参数是一个3x5字符矩阵,其中每一行都是一个标签。请保留HTML标记。

这应该是最干净的解决方案,因为它不依赖于半文档化的功能,并且只专门操作图例生成。 - Andras Deak -- Слава Україні
2
legend(h, strcat('data', num2str(k_values.') )) 对我有效。 - Luis Mendo
4
显而易见的是:回答的要点是需要生成一个 h 数组并对其调用 legend;在任何实际应用中,用户都会为他们的图例文本创建一个字符数组/单元格 :) - Andras Deak -- Слава Україні

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接