real - matplotlib python 3
Trazar el tiempo en Python con Matplotlib (4)
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 marca de tiempo.
¿Puedo trazar el tiempo en el eje xy los números en el eje y usando Matplotlib?
Lo estaba intentando, pero de alguna manera solo aceptaba matrices de carrozas. ¿Cómo puedo hacer para trazar el tiempo? ¿Debo modificar el formato de alguna manera?
7 años después y este código me ha ayudado. Sin embargo, mis tiempos todavía no se mostraban correctamente.
Usando Matplotlib 2.0.0 y tuve que agregar el siguiente bit de código de Editar el formato de fecha de las etiquetas de tick del eje x en matplotlib por 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.
También puede graficar la marca de tiempo, pares de valores usando pyplot.plot (después de analizarlos desde 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:
Tuve problemas con esto usando la versión matplotlib: 2.0.2. Ejecutando el ejemplo de arriba, obtuve un conjunto de burbujas centrado y apilado.
"Solucioné" el problema agregando otra línea:
plt.plot([],[])
El fragmento de código completo se convierte en:
import datetime
import random
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
# make up some data
x = [datetime.datetime.now() + datetime.timedelta(minutes=i) for i in range(12)]
y = [i+random.gauss(0,1) for i,_ in enumerate(x)]
# plot
plt.plot([],[])
plt.scatter(x,y)
# beautify the x-labels
plt.gcf().autofmt_xdate()
myFmt = mdates.DateFormatter(''%H:%M'')
plt.gca().xaxis.set_major_formatter(myFmt)
plt.show()
plt.close()
Esto produce una imagen con las burbujas distribuidas como se desee.
Primero debe convertir sus marcas de tiempo en objetos datetime
Python (use datetime.strptime
). Luego use date2num
para convertir las fechas al formato matplotlib.
Trace las fechas y valores usando plot_date
:
dates = matplotlib.dates.date2num(list_of_datetimes)
matplotlib.pyplot.plot_date(dates, values)