Solución:
Frecuencia de tick
Parece haber varios problemas aquí:
-
- 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)!
-
- 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()
)
- debe utilizar el enfoque a nivel de ejes para cambiar los ticks x (que no es
- countplot de seaborn devuelve un objeto de ejes, no una figura
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 n
la 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])