MatLab:可选打开传奇

时间:2016-05-26 21:17:52

标签: matlab matlab-figure legend

我正在尝试编写代码来设置数字和图例看起来不错。我制作了绘制数字的代码

figure(1)
hold on
plot(x1, y1, 'DisplayName', name1)
plot(x2, y2, 'DisplayName', name2)
plot(x3, y3, 'DisplayName', name3)

现在,我需要另一个脚本,只有当原始数字中的name1 name2name3实际设置为某个非默认值,即''时才会启用图例。 1}},否则我根本不需要传奇。

function optionallegend(figure)
if ????
     legend('show');
end

我能这样做吗?

1 个答案:

答案 0 :(得分:3)

您可以使用findobj找到当前轴中具有DisplayName属性的所有绘图对象,并将其定义为''以外的其他对象。 findobj返回一个句柄数组,然后可以将其传递给legend。如果没有符合该标准的图表,则不会显示任何图例。

plots = findobj(gca, '-not', 'DisplayName', '', '-property', 'DisplayName');

if ~isempty(plots); legend(plots); end

作为一个例子

figure;
hax = axes();
hold(hax, 'on')

plot(rand(5,1), 'DisplayName', 'Plot #1');
plot(rand(5,1))
plot(rand(5,1), 'DisplayName', 'Plot #3');

legend(findobj(hax, '-not', 'DisplayName', '', '-property', 'DisplayName'));

enter image description here

如果您想仅为特定绘图绘制图例,则可以显式存储绘图句柄并将其直接传递给legend

hplot1 = plot(rand(5,1), 'DisplayName', 'Plot #1');
hplot2 = plot(rand(5,1), 'DisplayName', 'Plot #2');

legend([hplot1, hplot2])