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', '');
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.
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:
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.
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é IconDisplayStyle
off
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:
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.
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')
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.