es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mostrar solo la hora en el eje con matplotlib.plot_dates.

Así que he pasado algún tiempo gestionando trazar datos utilizando el tiempo en el eje x, y la forma en que he encontrado para hacerlo es usar matplotlib.plot_date después de convertir objetos datetime en objetos pltdates.

X_d = pltdates.date2num(X) # X es una matriz que contiene objetos datetime
(...)
plt.plot_date(X_d, Y)

Funciona muy bien, todos mis datos se trazan correctamente.

Plot con fechas que aparecen en el eje x

Sin embargo, todas las medidas que quiero trazar se realizaron el mismo día (17/12/2021), la única diferencia es la hora.

Como se muestra en la imagen, matplotlib todavía muestra el número del día (17) aunque sea el mismo en todo el gráfico.

¿Alguien tiene alguna pista de cómo mantener solo la hora, aún utilizando matplotlib.plot_date?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para mantener solo la hora en el eje x y eliminar las fechas duplicadas, puedes utilizar la clase DateFormatter de matplotlib. Aquí tienes un ejemplo de modificación de código:

    import matplotlib.pyplot as plt
    import matplotlib.dates as pltdates
    from matplotlib.dates import DateFormatter
    
    # Suponiendo que X e Y contienen objetos de fecha y hora y las mediciones correspondientes de los datos
    X_d = pltdates.date2num(X)
    fig, ax = plt.subplots()
    ax.plot_date(X_d, Y)
    
    # Utiliza DateFormatter para mostrar solo la hora
    date_formatter = DateFormatter('%H:%M:%S')
    ax.xaxis.set_major_formatter(date_formatter)
    

    Este código crea un objeto DateFormatter que formatea las etiquetas del eje x para mostrar solo horas, minutos y segundos. Luego, establece el formateador para el eje x utilizando ax.xaxis.set_major_formatter. Esto debería eliminar las fechas duplicadas y mostrar solo las horas en el eje x como se desea.

Comments are closed.