Trazar el tiempo en el eje independiente.
Tengo una matriz de marcas de tiempo en el formato (HH:MM:SS.mmmmmm) y otra matriz de números de punto flotante, cada uno correspondiente a un valor en la matriz de marcas de tiempo.
¿Puedo trazar el tiempo en el eje x y los números en el eje y usando Matplotlib?
Lo estaba intentando, pero de alguna manera solo aceptaba matrices de flotadores. ¿Cómo puedo hacer que trace el tiempo? ¿Tengo que modificar el formato de alguna manera?
Actualizar :
Esta respuesta está desactualizada desde la versión 3.5 de matplotlib . La plot
función ahora maneja datos de fecha y hora directamente. Consulte https://matplotlib.org/3.5.1/api/_as_gen/matplotlib.pyplot.plot_date.html
Se desaconseja el uso de plot_date. Este método existe por razones históricas y puede quedar obsoleto en el futuro.
Los datos similares a fecha y hora deben trazarse directamente usando plot.
Si necesita trazar datos numéricos simples como formato de fecha Matplotlib o necesita establecer una zona horaria, llame a ax.xaxis.axis_date / ax.yaxis.axis_date antes de trazar. Consulte Axis.axis_date.
Respuesta antigua y desactualizada:
Primero debe convertir sus marcas de tiempo a datetime
objetos Python (use datetime.strptime
). Luego utilícelo date2num
para convertir las fechas al formato matplotlib.
Trazar las fechas y valores usando plot_date
:
import matplotlib.pyplot as plt
import matplotlib.dates
from datetime import datetime
x_values = [datetime(2021, 11, 18, 12), datetime(2021, 11, 18, 14), datetime(2021, 11, 18, 16)]
y_values = [1.0, 3.0, 2.0]
dates = matplotlib.dates.date2num(x_values)
plt.plot_date(dates, y_values)
También puede trazar la marca de tiempo y los pares de valores usando pyplot.plot (después de analizarlos a partir de su representación de cadena). (Probado con matplotlib versiones 1.2.0 y 1.3.1.)
Ejemplo:
import datetime
import random
import matplotlib.pyplot as plt
# make up some data
x = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(12)]
y = [i+random.gauss(0,1) for i,_ in enumerate(x)]
# plot
plt.plot(x,y)
# beautify the x-labels
plt.gcf().autofmt_xdate()
plt.show()
Imagen resultante:
Esto es lo mismo que un diagrama de dispersión:
import datetime
import random
import matplotlib.pyplot as plt
# make up some data
x = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(12)]
y = [i+random.gauss(0,1) for i,_ in enumerate(x)]
# plot
plt.scatter(x,y)
# beautify the x-labels
plt.gcf().autofmt_xdate()
plt.show()
Produce una imagen similar a esta:
7 años después y este código me ha ayudado. Sin embargo, mis tiempos todavía no aparecían correctamente.
Usando Matplotlib 2.0.0, tuve que agregar el siguiente código de Edición del formato de fecha de las etiquetas de marca del eje x en matplotlib de Paul H.
import matplotlib.dates as mdates
myFmt = mdates.DateFormatter('%d')
ax.xaxis.set_major_formatter(myFmt)
Cambié el formato a (%H:%M) y la hora se muestra correctamente.
Todo gracias a la comunidad.