MatLab:可选打开图例

MatLab: optional turn on legend

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

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

现在,我需要另一个脚本,只有当原始图中的 name1 name2name3 实际上设置为某个非默认值时才应该打开图例,即不'',不然根本不需要图例

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

我可以这样做吗?

您可以使用 findobj 定位当前坐标区内具有 DisplayName 属性 并且已将其定义为 '' 以外的对象的所有绘图对象。 findobj returns 一个句柄数组,然后可以将其传递给 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'));

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

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

legend([hplot1, hplot2])