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

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.


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

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


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_


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

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)

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

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()
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.