Supprimer la légende sur une figurine matplotlib

169

Pour ajouter une légende à un tracé matplotlib, on exécute simplement legend().

Comment supprimer une légende d'un tracé?

(Le plus proche legend([])auquel je suis arrivé est de courir pour vider la légende des données. Mais cela laisse un rectangle blanc laid dans le coin supérieur droit.)

Olivier Verdier
la source

Réponses:

229

Depuis matplotlibv1.4.0rc4 , une removeméthode a été ajoutée à l'objet de légende.

Usage:

ax.get_legend().remove()

ou

legend = ax.legend(...)
...
legend.remove()

Voir ici pour le commit où cela a été introduit.

naitsirhc
la source
2
Pour une raison quelconque, la ax.get_legend().remove()solution n'a pas fonctionné dans mon cas, tandis que la deuxième solution ( legend = ax.legend() ... legend.remove()) a fonctionné. peut-être parce que axc'était un AxesSubplotdans mon cas?
jhin
@naitsirhc, merci de votre partage.
Andrew Li le
91

Si vous souhaitez tracer une trame de données Pandas et supprimer la légende, ajoutez legend = None comme paramètre à la commande plot.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df2 = pd.DataFrame(np.random.randn(10, 5))
df2.plot(legend=None)
plt.show()
cast42
la source
86

Vous pouvez utiliser la set_visibleméthode de la légende :

ax.legend().set_visible(False)
draw()

Ceci est basé sur une réponse qui m'a été fournie en réponse à une question similaire que j'avais eue il y a quelque temps ici

(Merci pour cette réponse Jouni - Je suis désolé de ne pas avoir pu marquer la question comme réponse ... peut-être que quelqu'un qui a l'autorité peut le faire pour moi?)

ERN
la source
4
cela ne fait que cacher la légende et cela ne supprime pas l'objet, non?
vlsd du
16

vous devez ajouter les lignes de code suivantes:

ax = gca()
ax.legend_ = None
draw()

gca () retourne le handle des axes courants, et a cette propriété legend_

fceruti
la source
Merci, cela semble fonctionner. (Mais quelle horrible interface ...) Je propose de remplacer draw()par show(). Ou y a-t-il un avantage particulier à utiliser draw?
Olivier Verdier
show()serait OK si la mise à jour du graphe était la dernière commande d'un programme. draw()est très bien, car il s'agit de la commande générale de mise à jour du graphe. Vous pouvez par exemple vouloir inviter l'utilisateur à entrer dans un terminal après la mise à jour du graphique, ce qui ne peut pas être fait avec le blocage show().
Eric O Lebigot
Droite. Merci d'avoir répondu. Maintenant je suis d'accord que drawc'est plus approprié (mais j'ai toujours l'habitude showde mettre à jour mes graphiques ...).
Olivier Verdier
6

Si vous n'utilisez pas d'objets de tracé fig et hache, vous pouvez le faire comme ceci:

import matplotlib.pyplot as plt

# do plot specifics
plt.legend('')
plt.show()
Pelonomi Moiloa
la source
3

si vous appelez pyplotcommeplt

frameon=False consiste à supprimer la bordure autour de la légende

et '' transmet l'information qu'aucune variable ne devrait figurer dans la légende

import matplotlib.pyplot as plt
plt.legend('',frameon=False)
Bruno
la source
1

J'ai fait une légende en l'ajoutant à la figure, pas à un axe (matplotlib 2.2.2). Pour le supprimer, j'ai défini l' legendsattribut de la figure sur une liste vide:

import matplotlib.pyplot as plt

fig = plt.figure()
ax1 = fig.add_subplot(111)
ax2 = ax1.twinx()

ax1.plot(range(10), range(10, 20), label='line 1')
ax2.plot(range(10), range(30, 20, -1), label='line 2')

fig.legend()

fig.legends = []

plt.show()
boudewijn21
la source
0

D'après les informations de @naitsirhc, je voulais trouver la documentation officielle de l'API. Voici ma découverte et un exemple de code.

  1. J'ai créé un matplotlib.Axesobjet par seaborn.scatterplot().
  2. Le ax.get_legend()renverra une matplotlib.legned.Legendinstance.
  3. Enfin, vous appelez .remove()function pour supprimer la légende de votre tracé.
ax = sns.scatterplot(......)
_lg = ax.get_legend()
_lg.remove()

Si vous vérifiez le matplotlib.legned.Legenddocument API, vous ne verrez pas la .remove()fonction.

La raison en est que l' matplotlib.legned.Legendhéritage du fichier matplotlib.artist.Artist. Par conséquent, lorsque vous appelez ax.get_legend().remove()cela, appelez essentiellement matplotlib.artist.Artist.remove().

Au final, vous pourriez même simplifier le code en deux lignes.

ax = sns.scatterplot(......)
ax.get_legend().remove()
Andrew Li
la source