Trazar el tiempo en el eje independiente.

Resuelto randomThought asked hace 15 años • 5 respuestas

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?

randomThought avatar Oct 16 '09 01:10 randomThought
Aceptado

Actualizar :

Esta respuesta está desactualizada desde la versión 3.5 de matplotlib . La plotfunció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 datetimeobjetos Python (use datetime.strptime). Luego utilícelo date2numpara 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)

ingrese la descripción de la imagen aquí

codeape avatar Oct 15 '2009 18:10 codeape

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:

Trazado lineal


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:

Gráfico de dispersión

moooeeeep avatar May 07 '2013 20:05 moooeeeep

7 años después y este código me ha ayudado. Sin embargo, mis tiempos todavía no aparecían correctamente.

ingrese la descripción de la imagen aquí

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. ingrese la descripción de la imagen aquí

Todo gracias a la comunidad.

GeorgeLPerkins avatar Jul 13 '2017 21:07 GeorgeLPerkins