Cómo agregar un título a Seaborn Facet Plot

97

¿Cómo agrego un título a esta parcela de Seaborne? Démosle un título 'YO SOY UN TÍTULO'.

tips = sns.load_dataset("tips")
g = sns.FacetGrid(tips, col="sex", row="smoker", margin_titles=True)
g.map(sns.plt.scatter, "total_bill", "tip")

trama

No soy george
fuente

Respuestas:

168

Después de esas líneas:

plt.subplots_adjust(top=0.9)
g.fig.suptitle('THIS IS A TITLE, YOU BET') # can also get the figure from plt.gcf()

Si agrega un subtítulo sin ajustar el eje, los títulos de las facetas de seaborn se superponen.

(Con datos diferentes):

ingrese la descripción de la imagen aquí

cphlewis
fuente
6
Esto funcionó para mí, pero tuve que usar en plt.subplots_adjust(top=0.8)lugar de top=0.9.
Mack
5
suptitletambién tiene un yparámetro. Esto funcionó para mí:g.fig.suptitle('foo', y=1.05)
trianta2
1
Esto no funciona si usa col_wrapya que tanto la figura como la subtrama del último eje (abajo a la derecha) heredarán el mismo título.
xApple
25

En el cuaderno ipython, ¡esto funcionó para mí!

sns.plt.title('YOUR TITLE HERE')
Meera Lakhavani
fuente
10
Probé esto y agregó un título a la figura inferior derecha, no a la figura completa
crypdick
12
El acceso a plttravés del snspaquete ha quedado obsoleto en 0.8.1. Esto debe hacerse usandoplt.title('YOUR TITLE HERE')
Mack
2
AttributeError: el módulo 'seaborn' no tiene el atributo 'plt'
xApple
AttributeError: módulo 'seaborn' no tiene atributo 'plt'
seralouk
3

Lo que funcionó para mí fue:

sns.plt.suptitle('YOUR TITLE HERE')

pmetzner
fuente
2
AttributeError: el módulo 'seaborn' no tiene el atributo 'plt'
xApple
1
AttributeError: módulo 'seaborn' no tiene atributo 'plt'
seralouk
1
plt.suptitle("Title") 

o

plt.title("Title")

Esto funcionó para mí.

Vraj Patel
fuente
La segunda solución no funciona, mientras que la primera crea una intercalación desagradable de títulos de subtítulos y facetas. Necesitas usar usando coordenadas.
MERose el
0

Las respuestas usando sns.plt.title()ysns.plt.suptitle() ya no funcionan.

En su lugar, debe usar la title()función de matplotlib :

import matplotlib.pyplot as plt
sns.FacetGrid(<whatever>)
plt.title("A title")
Crypdick
fuente
1
Esto no establece el título en la ubicación correcta para mí.
Gabriel Romon
4
Lo intentaste plt.suptitle()?
crypdick
Su respuesta no funciona ya que afecta el título de la subtrama de los últimos ejes (abajo a la derecha). Su sugerencia plt.suptitle()también modifica los últimos ejes así como la figura principal.
xApple
0

El título no estará alineado al centro con los títulos de la subtrama. Para establecer la posición del título, puede usar plt.suptitle("Title", x=center)

En mi caso, mis subtramas estaban en una cuadrícula de 2x1, por lo que pude usar bbox = g.axes[0,0].get_position()para encontrar el cuadro delimitador y luegocenter=0.5*(bbox.x1+bbox.x2)

ndw
fuente