Rotar el texto de la etiqueta en seaborn

3 minutos de lectura

avatar de usuario de dan
dan

tengo un diagrama de factores simple

import seaborn as sns
g = sns.factorplot("name", "miss_ratio", "policy", dodge=.2, 
    linestyles=["none", "none", "none", "none"], data=df[df["level"] == 2])

ingrese la descripción de la imagen aquí

El problema es que las etiquetas x se ejecutan juntas, lo que las hace ilegibles. ¿Cómo rotas el texto para que las etiquetas sean legibles?

  • Esto me ayudó: stackoverflow.com/questions/74715767/…

    –Jimmy Carter

    17 de febrero a las 1:44

  • Para seaborn.objects con v0.12vea Cómo rotar los xticks con seaborn.objects

    –Trenton McKinney

    1 jun a las 19:50


Tuve un problema con la respuesta de @mwaskorn, a saber, que

g.set_xticklabels(rotation=30)

falla, porque esto también requiere las etiquetas. Un poco más fácil que la respuesta de @Aman es simplemente agregar

plt.xticks(rotation=45)

  • También puedes obtener las etiquetas así. g.set_xticklabels(g.get_xticklabels(), rotation=30). Asígnelo a una variable si desea suprimir la salida.

    – joelostblom

    7 de febrero de 2016 a las 3:43

  • Creo que esto es correcto, al configurar plt.xtics trabajó para mi.

    – muamar

    29 de agosto de 2018 a las 18:56

  • Cuando pruebo esto, mis xticklabels ya no están alineados con los x ticks. ¿Alguien sabe por qué?

    – Rylan Schaefer

    8 abr 2021 a las 22:37

  • Recomiendo agregar también plt.tight_layout()para que los márgenes se ajusten al texto

    – ovnis

    25 oct 2021 a las 13:26

  • g.set_xticklabels(rotation=30) trabaja en FacetGrid ahora

    – ovnis

    5 de noviembre de 2021 a las 17:08

avatar de usuario de mwaskom
mwaskom

Puede rotar las etiquetas de marca con el tick_params método en matplotlib Axes objetos. Para proporcionar un ejemplo específico:

ax.tick_params(axis="x", rotation=90)

Este sigue siendo un objeto matplotlib. Prueba esto:

# <your code here>
locs, labels = plt.xticks()
plt.setp(labels, rotation=45)

No funcionará ninguna trama marina compatible con facetgrid (por ejemplo, catplot)

g.set_xticklabels(rotation=30) 

sin embargo, barplot, countplot, etc. funcionarán ya que no son compatibles con facetgrid. A continuación funcionará para ellos.

g.set_xticklabels(g.get_xticklabels(), rotation=30)

Además, en caso de que tenga 2 gráficos superpuestos uno encima del otro, pruebe set_xticklabels en el gráfico que lo admita.

Si alguien se pregunta cómo hacer esto para clustermap CorrGrids (parte de un ejemplo marino dado):

import seaborn as sns
import matplotlib.pyplot as plt
sns.set(context="paper", font="monospace")

# Load the datset of correlations between cortical brain networks
df = sns.load_dataset("brain_networks", header=[0, 1, 2], index_col=0)
corrmat = df.corr()

# Set up the matplotlib figure
f, ax = plt.subplots(figsize=(12, 9))

# Draw the heatmap using seaborn
g=sns.clustermap(corrmat, vmax=.8, square=True)
rotation = 90 
for i, ax in enumerate(g.fig.axes):   ## getting all axes of the fig object
     ax.set_xticklabels(ax.get_xticklabels(), rotation = rotation)


g.fig.show()

Avatar de usuario de Robvh
Robvh

También puedes usar plt.setp como sigue:

import matplotlib.pyplot as plt
import seaborn as sns

plot=sns.barplot(data=df,  x=" ", y=" ")
plt.setp(plot.get_xticklabels(), rotation=90)

para rotar las etiquetas 90 grados.

avatar de usuario de serv-inc
serv-inc

Para seaborn.heatmappuede rotarlos usando (basado en la respuesta de @Aman)

pandas_frame = pd.DataFrame(data, index=names, columns=names)
heatmap = seaborn.heatmap(pandas_frame)
loc, labels = plt.xticks()
heatmap.set_xticklabels(labels, rotation=45)
heatmap.set_yticklabels(labels[::-1], rotation=45) # reversed order for y

¿Ha sido útil esta solución?