Arreglando demasiados ticks #

Una causa común del comportamiento inesperado de los ticks es pasar una lista de cadenas en lugar de números u objetos de fecha y hora. Esto puede suceder fácilmente sin previo aviso al leer un archivo de texto delimitado por comas. Matplotlib trata las listas de cadenas como variables categóricas ( trazado de variables categóricas ) y, de forma predeterminada, pone una marca por categoría y las traza en el orden en que se proporcionan. Si no se desea esto, la solución es convertir las cadenas a un tipo numérico como en los siguientes ejemplos.

Ejemplo 1: las cadenas pueden dar lugar a un orden inesperado de marcas numéricas #

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots(1, 2, constrained_layout=True, figsize=(6, 2.5))
x = ['1', '5', '2', '3']
y = [1, 4, 2, 3]
ax[0].plot(x, y, 'd')
ax[0].tick_params(axis='x', color='r', labelcolor='r')
ax[0].set_xlabel('Categories')
ax[0].set_title('Ticks seem out of order / misplaced')

# convert to numbers:
x = np.asarray(x, dtype='float')
ax[1].plot(x, y, 'd')
ax[1].set_xlabel('Floats')
ax[1].set_title('Ticks as expected')
Las garrapatas parecen fuera de servicio/fuera de lugar, las garrapatas son las esperadas
Text(0.5, 1.0, 'Ticks as expected')

Ejemplo 2: las cadenas pueden generar muchos ticks #

Si x tiene 100 elementos, todas cadenas, entonces tendríamos 100 marcas (ilegibles), y nuevamente la solución es convertir las cadenas en flotantes:

fig, ax = plt.subplots(1, 2, figsize=(6, 2.5))
x = [f'{xx}' for xx in np.arange(100)]
y = np.arange(100)
ax[0].plot(x, y)
ax[0].tick_params(axis='x', color='r', labelcolor='r')
ax[0].set_title('Too many ticks')
ax[0].set_xlabel('Categories')

ax[1].plot(np.asarray(x, float), y)
ax[1].set_title('x converted to numbers')
ax[1].set_xlabel('Floats')
Demasiados ticks, x convertidos a números
Text(0.5, -3.555555555555568, 'Floats')

Ejemplo 3: las cadenas pueden conducir a un orden inesperado de marcas de fecha y hora #

Un caso común es cuando las fechas se leen de un archivo CSV, deben convertirse de cadenas a objetos de fecha y hora para obtener los localizadores y formateadores de fechas adecuados.

fig, ax = plt.subplots(1, 2, constrained_layout=True, figsize=(6, 2.75))
x = ['2021-10-01', '2021-11-02', '2021-12-03', '2021-09-01']
y = [0, 2, 3, 1]
ax[0].plot(x, y, 'd')
ax[0].tick_params(axis='x', labelrotation=90, color='r', labelcolor='r')
ax[0].set_title('Dates out of order')

# convert to datetime64
x = np.asarray(x, dtype='datetime64[s]')
ax[1].plot(x, y, 'd')
ax[1].tick_params(axis='x', labelrotation=90)
ax[1].set_title('x converted to datetimes')

plt.show()
Fechas desordenadas, x convertidas a datetimes

Tiempo total de ejecución del script: (0 minutos 1.403 segundos)

Galería generada por Sphinx-Gallery