web-dev-qa-db-fra.com

Comment afficher la légende pour seulement un sous-ensemble spécifique de courbes dans le tracé?

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

Il y a plusieurs courbes dans mon tracé. Je ne souhaite afficher la légende que pour certains d'entre eux. Comment fait-on ça?

Par exemple, comment rendre visible uniquement la légende de la courbe cosinus dans le tracé ci-dessus? Lorsque j'appelle les fonctions legend() en tant que legend('', 'cosine'); au lieu d'ajouter le troisième paramètre vide, la troisième ligne verte est en effet supprimée de la légende. Mais cela ne résout pas mon problème, car la ligne rouge indésirable reste visible.

38
hkBattousai

Enregistrez simplement le légende gère dans une variable et passez le tableau à legend. Dans votre cas, ce ne serait qu'une valeur, comme ceci:

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

Vous devriez obtenir ce complot:

enter image description here

27
Eitan T

Je n'aime pas stocker les valeurs des poignées, cela devient un gâchis quand j'ai beaucoup de graphiques dans mes figures. J'ai donc trouvé une autre solution.

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

Cela me donne le même graphique que celui montré dans la réponse d'Eitan T.

Il convient de noter que cela affectera également d'autres fonctions de matlab, par exemple cla supprimera uniquement les tracés mentionnés dans la légende. Recherchez HandleVisibility dans la documentation Matlab pour en savoir plus.

35
Mixopteryx

Commençons par vos variables et traçons-les:

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

Il existe une propriété appelée IconDisplayStyle . Il est enterré assez profondément. Le chemin à suivre est le suivant:

Ligne -> Annotation -> LegendInformation -> IconDisplayStyle

La définition de la propriété IconDisplayStyleoff vous permettra de sauter cette ligne. Par exemple, je vais désactiver la légende de hs.

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

Bien sûr, vous pouvez continuer et le faire comme ceci:

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

Mais je trouve cela beaucoup plus difficile à comprendre.

Maintenant, la fonction legend sautera simplement hs.

Terminer mon code avec ceci:

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

vous donnera ceci: enter image description here

EDIT: Jonas a fait une belle suggestion dans les commentaires: Définir la propriété DisplayName de hc comme ceci:

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

vous donnera la légende dont vous avez besoin. Vous aurez associé votre descripteur de ligne à 'cosine'. Donc, vous pouvez simplement appeler la légende avec 'off' ou 'show' paramètres.

5
HebeleHododo

Vous pouvez simplement changer l'ordre dans lequel les courbes sont tracées et appliquer la légende à la première courbe:

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

si je veux mettre une légende pour le cosinus et le sinus:

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

Pour développer la réponse de Sebastian, j'ai un cas spécial où je trace plusieurs lignes dans l'un des deux formats (poutres en treillis en compression ou en tension) et j'ai pu tracer des poignées de tracé spécifiques dans la légende tant que les étiquettes étaient les mêmes longueur

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

Où 4 espaces ont été ajoutés derrière "Tension" afin que le nombre de caractères soit cohérent.

1
Jwhales