Saltar al contenido

Cómo disminuir la densidad de x-ticks en seaborn

Solución:

Frecuencia de tick

Parece haber varios problemas aquí:

    1. Está usando el operador = mientras usa plt.xticks. ¡Debería usar una llamada a función en su lugar (pero no aquí; lea el punto 2 primero)!
    1. countplot de seaborn devuelve un objeto de ejes, no una figura
      • debe utilizar el enfoque a nivel de ejes para cambiar los ticks x (que no es plt.xticks())

Prueba esto:

for ind, label in enumerate(plot_.get_xticklabels()):
    if ind % 10 == 0:  # every 10th label is kept
        label.set_visible(True)
    else:
        label.set_visible(False)

Colores

Creo que la configuración de datos no es óptima aquí para este tipo de gráfico. Seaborn interpretará cada valor único como una nueva categoría e introducirá un nuevo color. Si estoy en lo cierto, el número de colores / y x-ticks es igual al número de np.unique (datos).

Compare sus datos con los ejemplos de seaborn (que se basan en datos que se pueden importar para verificar).

También creo que trabajar con seaborn es mucho más fácil usando marcos de datos pandas (y no matrices numpy; a menudo preparo mis datos de manera incorrecta y la selección de subconjuntos necesita preprocesamiento; los marcos de datos ofrecen más). Creo que la mayoría de los ejemplos de seaborn utilizan esta entrada de datos.

Como una ligera modificación de la respuesta aceptada, normalmente seleccionamos etiquetas en función de su valor (y no de índice), por ejemplo, para mostrar solo valores que son divisibles por 10, esto funcionaría:

for label in plot_.get_xticklabels():
    if np.int(label.get_text()) % 10 == 0:  
        label.set_visible(True)
    else:
        label.set_visible(False)

Desde que has etiquetado matplotlib, una solución diferente de poner las garrapatas visibles True/False es trazar cada nla etiqueta de la siguiente manera

fig = plt.figure(); np.random.seed(123)

data = np.hstack((np.random.normal(10, 5, 10000), np.random.normal(30, 8, 10000))).astype(int)
plot_ = sns.countplot(data)

fig.canvas.draw()
new_ticks = [i.get_text() for i in plot_.get_xticklabels()]
plt.xticks(range(0, len(new_ticks), 10), new_ticks[::10])

ingrese la descripción de la imagen aquí

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *