Frage Wie zeige ich die Legende nur für eine bestimmte Teilmenge von Kurven im Plot an?


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

The Plotting

Es gibt mehrere Kurven in meinem Plotten. Ich möchte die Legende nur für einige von ihnen anzeigen. Wie mache ich es?

Zum Beispiel, wie mache ich nur die Legende für die Kosinus-Kurve in der obigen Zeichnung sichtbar? Wenn ich anrufe legend() funktioniert als legend('', 'cosine'); anstatt den leeren dritten Parameter hinzuzufügen, wird tatsächlich die dritte grüne Linie aus der Legende entfernt. Aber das löst mein Problem nicht, denn die unerwünschte rote Linie bleibt sichtbar.


34
2017-12-03 15:06


Ursprung


Antworten:


Speichern Sie einfach die gewünschten Legendenhandles in einer Variablen und übergeben Sie das Array an legend. In Ihrem Fall wäre es nur ein Wert, so:

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

Sie sollten diese Handlung bekommen:

enter image description here


26
2017-12-03 15:22



Ich mag es nicht, die Handle-Werte zu speichern, es wird ein Chaos, wenn ich viele Graphen in meinen Zahlen habe. Deshalb habe ich eine andere Lösung gefunden.

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

Dies gibt mir die gleiche Grafik wie in Eitan T's Antwort.

Es sollte angemerkt werden, dass dies auch andere Matlab-Funktionen beeinflussen wird, beispielsweise cla entferne nur die in der Legende erwähnten Plots. Suchen Sie in der Matlab-Dokumentation nach HandleVisibility, um mehr darüber zu erfahren.


31
2017-11-18 12:55



Beginnen wir mit Ihren Variablen und zeichnen Sie sie auf:

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

Es gibt eine Eigenschaft namens IconDisplayStyle. Es ist ziemlich tief begraben. Der Pfad, dem Sie folgen müssen, ist:

Linie -> Annotation -> LegendInformation -> IconDisplayStyle

Einstellen der IconDisplayStyle Eigentum off Sie können diese Zeile überspringen. Als Beispiel werde ich abschalten hs's Legende.

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

Natürlich kannst du weitermachen und es so machen:

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

Aber ich finde es viel schwerer zu verstehen.

Jetzt die legend Funktion wird einfach überspringen hs.

Beende meinen Code damit:

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

werde dir das geben: enter image description here

EDIT: Jonas hatte einen schönen Vorschlag in den Kommentaren: Einstellen der DisplayName Eigenschaft von HC wie folgt:

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

gibt dir die Legende, die du brauchst. Sie haben Ihr Line-Handle damit verknüpft 'cosine'. So können Sie einfach die Legende mit aufrufen 'off' oder 'show' Parameter.


5
2017-12-03 15:36



Sie könnten einfach die Reihenfolge ändern, in der die Kurven gezeichnet werden, und die Legende auf die erste Kurve anwenden:

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

wenn ich eine legende für cosine und -sine einfügen möchte:

plot(t,c,t,m,t,s)  % cosine and -sine are first and second curves
legend('cosine', '-sine')

1
2017-07-05 09:18



Sebastian Antwort zu erweitern, ich habe ein Sonderfall, wo ich mehrere Zeilen in einem von zwei Formaten bin Plotten (Fachwerkträger entweder in Druck oder Zug) und war in der Lage bestimmte Handlung plotten Griffe in der Legende, solange die Etiketten waren die gleichen Länge

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

Wo hinter "Tension" 4 Leerzeichen hinzugefügt wurden, damit die Anzahl der Zeichen konsistent ist.


1
2018-03-07 21:38



Schneller Plot-Hack:

  1. Schneiden Sie alles aus, was nicht in der Legende erscheinen soll
  2. Legende anwenden
  3. Einfügen

-2
2018-03-10 15:14