40
t = 0 : 0.01 : 2 * pi;
s = sin(t);
c = cos(t);
m = -sin(t);

hold on;
plot(t, s, 'r');
plot(t, c, 'b');
plot(t, m, 'g');
hold off;

legend('', 'cosine', '');

阴谋

我的绘图中有几条曲线。我只想显示其中一些的图例。我该怎么做?

例如,如何在上面的绘图中只显示余弦曲线的图例?当我调用legend()函数legend('', 'cosine');而不是添加空的第三个参数时,确实从图例中删除了第三条绿线。但这并不能解决我的问题,因为不需要的红线仍然可见。

4

6 回答 6

39

我不喜欢存储句柄值,当我的图中有很多图表时,它会变得一团糟。因此我找到了另一个解决方案。

t = 0 : 0.01 : 2 * pi;
s = sin(t);
c = cos(t);
m = -sin(t);
hold on;
plot(t, s, 'r', 'HandleVisibility','off'); % Plotting and telling to hide legend handle
h2 = plot(t, c, 'b', 'DisplayName', 'cosine');  % Plotting and giving legend name
plot(t, m, 'g', 'HandleVisibility','off'); % Plotting and telling to hide legend handle

legend show  % Generating legend based on already submitted values

这给了我与 Eitan T 的答案相同的图表。

应该注意的是,这也会影响其他 matlab 函数,例如cla只会删除图例中提到的图。在 Matlab 文档中搜索 HandleVisibility 以了解更多信息。

于 2013-11-18T12:55:11.167 回答
27

只需将所需的图例句柄存储在变量中并将数组传递给legend. 在您的情况下,它只是一个值,如下所示:

hold on;
plot(t, s, 'r');
h2 = plot(t, c, 'b');  % # Storing only the desired handle
plot(t, m, 'g');
hold off;

legend(h2, 'cosine');  % # Passing only the desired handle

你应该得到这个情节:

在此处输入图像描述

于 2012-12-03T15:22:18.097 回答
6

让我们从您的变量开始并绘制它们:

t = 0 : 0.01 : 2 * pi;
s = sin(t);
c = cos(t);
m = -sin(t);

figure;
hold ('all');
hs = plot(t, s);
hc = plot(t, c);
hm = plot(t, m);

有一个名为IconDisplayStyle的属性。它埋得很深。您需要遵循的路径是:

Line -> Annotation -> LegendInformation -> IconDisplayStyle

设置该IconDisplayStyle属性off将使您跳过该行。例如,我将关闭hs的图例。

hsAnno = get(hs, 'Annotation');
hsLegend = get(hsAnno, 'LegendInformation');
set(hsLegend, 'IconDisplayStyle', 'off');

当然,您可以继续这样做:

set(get(get(hs, 'Annotation'), 'LegendInformation'), 'IconDisplayStyle', 'off');

但我发现它更难理解。

现在,该legend功能将跳过hs.

以此结束我的代码:

legend('cosine', 'repeat for this handle')

会给你这个: 在此处输入图像描述

编辑:乔纳斯在评论中有一个很好的建议:DisplayName像这样设置 hc 的属性:

set(hc, 'DisplayName', 'cosine');
legend(gca, 'show');

会给你你需要的传说。您将把您的线路句柄与'cosine'. 因此,您可以使用'off''show'参数调用图例。

于 2012-12-03T15:36:45.453 回答
1

为了扩展塞巴斯蒂安的答案,我有一个特殊情况,我正在以两种格式(压缩或拉伸的桁架梁)之一绘制几条线,并且只要标签相同,就能够在图例中绘制特定的绘图句柄长度

for ii=1:nBeams
    if X(ii)<0 %Bars with negative force are in compession
        h1=plot(linspace(beamCord(ii,1),beamCord(ii,3)),...
            linspace(beamCord(ii,2),beamCord(ii,4)),'r:');
    elseif X(ii)>0 %Bars with positive force are in tension
        h2=plot(linspace(beamCord(ii,1),beamCord(ii,3)),...
            linspace(beamCord(ii,2),beamCord(ii,4)),'b');
    end
end

legend([h1;h2],['Compression';'Tension    ']);

其中 'Tension' 后面加了 4 个空格,使字符数一致。

于 2014-03-07T21:38:44.570 回答
1

您可以更改绘制曲线的顺序并将图例应用于第一条曲线:

t = 0 : 0.01 : 2 * pi;
s = sin(t);
c = cos(t);
m = -sin(t);

plot(t,c,t,s,t,m)  % cosine is plotted FIRST
legend('cosine')   % legend for the FIRST element

如果我想为余弦和正弦添加图例:

plot(t,c,t,m,t,s)  % cosine and -sine are first and second curves
legend('cosine', '-sine')
于 2013-07-05T09:18:06.893 回答
-2

快速的情节黑客:

  1. 剪掉所有不想出现在图例中的东西
  2. 应用图例
  3. 粘贴
于 2017-03-10T15:14:22.173 回答