Leyenda en seaborn

Seaborn agrega una leyenda automáticamente cuando asignas una variable a hue, style o size. La leyenda se puede personalizar con la función sns.move_legend, disponible desde seaborn 0.11.2, y con los métodos de la leyenda de matplotlib.

Leyenda por defecto

Agrupar los datos con hue crea una leyenda con un elemento por grupo. El título de la leyenda es el nombre de la columna.

import seaborn as sns
import matplotlib.pyplot as plt

mpg = sns.load_dataset("mpg")

sns.scatterplot(data = mpg, x = "horsepower", y = "mpg", hue = "origin")
# plt.show()

Leyenda por defecto de un gráfico de seaborn

Posición de la leyenda con move_legend

sns.move_legend cambia la posición de una leyenda existente. Su primer argumento son los ejes (o el objeto que devuelve una función a nivel de figura) y el segundo la posición, con los mismos valores que en matplotlib: "upper left", "lower right", "center"…

import seaborn as sns
import matplotlib.pyplot as plt

mpg = sns.load_dataset("mpg")

ax = sns.scatterplot(data = mpg, x = "horsepower", y = "mpg", hue = "origin")
sns.move_legend(ax, "lower left")
# plt.show()

Cambiar la posición de la leyenda en seaborn con move_legend

Leyenda fuera del gráfico

Utiliza bbox_to_anchor para colocar la leyenda fuera del gráfico. El siguiente ejemplo coloca la esquina superior izquierda de la leyenda junto a la esquina superior derecha de los ejes.

import seaborn as sns
import matplotlib.pyplot as plt

mpg = sns.load_dataset("mpg")

ax = sns.scatterplot(data = mpg, x = "horsepower", y = "mpg", hue = "origin", s = 50)
sns.move_legend(ax, "upper left", bbox_to_anchor = (1, 1),
                title = "Origen", fontsize = 12, title_fontsize = 13)
# plt.show()

Leyenda de seaborn fuera del gráfico

Leyenda debajo del gráfico

Para una leyenda horizontal debajo del gráfico establece ncol igual al número de grupos y elimina el borde con frameon = False.

import seaborn as sns
import matplotlib.pyplot as plt

mpg = sns.load_dataset("mpg")

ax = sns.scatterplot(data = mpg, x = "horsepower", y = "mpg", hue = "origin")
sns.move_legend(ax, "upper center", bbox_to_anchor = (0.5, -0.15),
                ncol = 3, title = None, frameon = False)
# plt.show()

Leyenda horizontal de seaborn debajo del gráfico

Título y etiquetas de la leyenda

move_legend también admite cualquier argumento de la función legend de matplotlib, como title, fontsize o title_fontsize.

import seaborn as sns
import matplotlib.pyplot as plt

mpg = sns.load_dataset("mpg")

ax = sns.scatterplot(data = mpg, x = "horsepower", y = "mpg", hue = "origin")
sns.move_legend(ax, "upper right", title = "Origen",
                fontsize = 9, title_fontsize = 11)
# plt.show()

Cambiar el título de la leyenda en seaborn

Cambiar las etiquetas

Las etiquetas de la leyenda son los valores de la columna de agrupación. La forma más sencilla de cambiarlas es renombrar los valores de los datos antes de representarlos, por ejemplo con replace.

import seaborn as sns
import matplotlib.pyplot as plt

mpg = sns.load_dataset("mpg")

mpg["origin"] = mpg["origin"].replace({"usa": "EE. UU.", "europe": "Europa", "japan": "Japón"})

sns.scatterplot(data = mpg, x = "horsepower", y = "mpg", hue = "origin")
# plt.show()

Cambiar el nombre de las etiquetas de una leyenda de seaborn

Leyenda en funciones a nivel de figura

Las funciones a nivel de figura (relplot, displot, catplot…) colocan la leyenda fuera del gráfico por defecto. Pasa el objeto que devuelven a move_legend para cambiarla, o establece legend_out = False mediante facet_kws para dibujarla dentro del gráfico.

import seaborn as sns
import matplotlib.pyplot as plt

mpg = sns.load_dataset("mpg")

g = sns.displot(data = mpg, x = "mpg", hue = "origin",
                kind = "kde", fill = True, height = 4)
sns.move_legend(g, "upper right", bbox_to_anchor = (0.95, 0.95))
# plt.show()

Leyenda de un gráfico de seaborn a nivel de figura

Leyenda para variables numéricas

Cuando hue o size es una variable numérica seaborn solo muestra algunos valores representativos (legend = "brief"). Utiliza legend = "full" para mostrar todos los valores.

import seaborn as sns
import matplotlib.pyplot as plt

mpg = sns.load_dataset("mpg")

sns.scatterplot(data = mpg, x = "horsepower", y = "mpg",
                hue = "cylinders", size = "cylinders", legend = "full")
# plt.show()

Leyenda para una variable numérica en seaborn

Eliminar la leyenda

Establece legend = False en la función de seaborn para crear el gráfico sin leyenda. Si el gráfico ya está creado elimínala con ax.get_legend().remove().

import seaborn as sns
import matplotlib.pyplot as plt

mpg = sns.load_dataset("mpg")

sns.scatterplot(data = mpg, x = "horsepower", y = "mpg", hue = "origin",
                legend = False)
# plt.show()

Eliminar la leyenda de un gráfico de seaborn

Como seaborn está construido sobre matplotlib también puedes utilizar todas las opciones de la leyenda en matplotlib. Consulta también cómo personalizar los ejes y los títulos de los gráficos de seaborn.

Data Sketches

A journey of imagination, exploration, and beautiful data visualizations

Comprar en Amazon

También te puede interesar