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

プロット

私のプロットにはいくつかの曲線があります。一部の凡例のみを表示したい。どうすればいいのですか?

たとえば、上のプロットで正弦曲線の凡例のみを表示するにはどうすればよいですか?空の3番目のパラメーターを追加する代わりにlegend()関数を呼び出すと、実際に3番目の緑色の線が凡例から削除されます。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

これにより、EitanTの回答に示されているのと同じグラフが得られます。

これは他のmatlab関数にも影響することに注意してください。たとえばcla、凡例に記載されているプロットのみが削除されます。詳細については、MatlabドキュメントでHandleVisibilityを検索してください。

于 2013-11-18T12:55:11.167 に答える
27

目的の凡例ハンドルを変数に格納し、配列をに渡すだけlegendです。あなたの場合、それは次のように1つの値になります。

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

あなたにこれを与えるでしょう: ここに画像の説明を入力してください

編集:ジョナスはコメントで素晴らしい提案をしました:DisplayNamehcのプロパティを次のように設定します:

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

あなたが必要とする伝説をあなたに与えるでしょう。ラインハンドルをに関連付けます'cosine''off'したがって、または'show'パラメータを使用して凡例を呼び出すことができます。

于 2012-12-03T15:36:45.453 に答える
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 に答える
1

セバスチャンの答えを拡張するために、2つの形式(圧縮または引張のいずれかのトラスビーム)のいずれかで複数の線をプロットし、ラベルが同じである限り、凡例に特定のプロットハンドルをプロットできるという特殊なケースがあります長さ

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 に答える
-2

迅速なプロット内ハック:

  1. 凡例に表示したくないものをすべてカットします
  2. 凡例を適用する
  3. ペースト
于 2017-03-10T15:14:22.173 に答える