Eliminar la leyenda en una figura matplotlib


169

Para agregar una leyenda a un diagrama matplotlib, simplemente se ejecuta legend().

¿Cómo eliminar una leyenda de una trama?

(Lo más cerca que llegué a esto es correr legend([])para vaciar la leyenda de los datos. Pero eso deja un feo rectángulo blanco en la esquina superior derecha).

Respuestas:


229

A partir de matplotlibv1.4.0rc4 , removese ha agregado un método al objeto de leyenda.

Uso:

ax.get_legend().remove()

o

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

Vea aquí la confirmación donde se introdujo esto.


2
Por alguna razón, la ax.get_legend().remove()solución no funcionó en mi caso, mientras que la segunda solución ( legend = ax.legend() ... legend.remove()) funcionó. tal vez porque axfue un AxesSubploten mi caso?
jhin

@naitsirhc, gracias por compartir.
Andrew Li

91

Si desea trazar un marco de datos de Pandas y desea eliminar la leyenda, agregue leyenda = Ninguno como parámetro al comando de trazado.

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

Podrías usar el set_visiblemétodo de la leyenda :

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

Esto se basa en una respuesta que se me proporcionó en respuesta a una pregunta similar que tuve hace algún tiempo aquí

(Gracias por esa respuesta, Jouni: lo siento, no pude marcar la pregunta como contestada ... ¿tal vez alguien que tenga la autoridad pueda hacerlo por mí?)


44
esto solo oculta la leyenda y, de hecho, no elimina el objeto, ¿verdad?
vlsd

16

tienes que agregar las siguientes líneas de código:

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

gca () devuelve el identificador de ejes actual y tiene esa propiedad legend_


Gracias, eso parece funcionar. (Pero qué interfaz tan horrible ...) Sugiero reemplazar draw()por show(). ¿O hay una ventaja particular en el uso draw?
Olivier Verdier

show()estaría bien si la actualización del gráfico fuera el último comando de un programa. draw()está bien, ya que es el comando general de actualización de gráficos. Por ejemplo, es posible que desee solicitar al usuario alguna entrada en un terminal después de actualizar el gráfico, lo que no se puede hacer con el bloqueo show().
Eric O Lebigot

Correcto. Gracias por la respuesta. Ahora estoy de acuerdo en que drawes más apropiado (pero siempre he usado showpara actualizar mis gráficos ...).
Olivier Verdier

6

Si no está utilizando objetos de trazado de higos y hachas, puede hacerlo así:

import matplotlib.pyplot as plt

# do plot specifics
plt.legend('')
plt.show()

3

si llamas pyplotcomoplt

frameon=False es eliminar el borde alrededor de la leyenda

y '' está pasando la información de que ninguna variable debe estar en la leyenda

import matplotlib.pyplot as plt
plt.legend('',frameon=False)

1

Hice una leyenda agregándola a la figura, no a un eje (matplotlib 2.2.2). Para eliminarlo, configuro el legendsatributo de la figura en una lista vacía:

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

Según la información de @naitsirhc, quería encontrar la documentación oficial de la API. Aquí están mis hallazgos y algunos códigos de muestra.

  1. Creé un matplotlib.Axesobjeto por seaborn.scatterplot().
  2. El ax.get_legend()devolverá una matplotlib.legned.Legendinstancia.
  3. Finalmente, llamas a la .remove()función para eliminar la leyenda de tu trama.
ax = sns.scatterplot(......)
_lg = ax.get_legend()
_lg.remove()

Si revisa el matplotlib.legned.Legenddocumento API, no verá la .remove()función.

La razón es que el matplotlib.legned.Legendheredado matplotlib.artist.Artist. Por lo tanto, cuando llamas ax.get_legend().remove()eso básicamente llama matplotlib.artist.Artist.remove().

Al final, incluso podría simplificar el código en dos líneas.

ax = sns.scatterplot(......)
ax.get_legend().remove()
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.