Edición del formato de fecha de las etiquetas de marca del eje x

3 minutos de lectura

Avatar de usuario de Osmond Bishop
obispo osmond

Estoy buscando editar el formato de las fechas en el eje x. La siguiente imagen muestra cómo aparecen en mi gráfico de barras de forma predeterminada. Me gustaría eliminar la repetición de ‘diciembre’ y ‘2012’ y solo tener los números de fecha reales a lo largo del eje x.

¿Alguna sugerencia sobre cómo puedo hacer esto?

ingrese la descripción de la imagen aquí

  • La respuesta aquí funcionó para mí: stackoverflow.com/questions/30133280/…

    – Mahdi

    21 de septiembre de 2016 a las 8:53

En breve:

import matplotlib.dates as mdates
myFmt = mdates.DateFormatter('%d')
ax.xaxis.set_major_formatter(myFmt)

Muchos ejemplos en el sitio web de matplotlib. El que más uso es aquí

  • ¿Hay algún método alternativo sin usar el ax.xaxis pero usando plt.<command>?

    – 3kstc

    16 de junio de 2017 a las 5:45

  • @3kstc Tal vez, pero no puedo imaginar una situación en la que confiar ambiguamente en la máquina de estado sea preferible al comando más explícito.

    – Pablo H.

    16 de junio de 2017 a las 15:56

  • Para obtener una vista rápida de todos los formatos de fecha y hora posibles, utilice strftime.org.

    – La Importancia De Ser Ernesto

    8 de febrero de 2018 a las 19:14

  • Nota ax se define en la respuesta de @Robino

    – javerim

    24 de enero de 2019 a las 3:56

  • @3kstc Si quieres usar plt en vez de ax tu puedes hacer: plt.gca().xaxis.set_major_formatter(myFmt)

    – Charelf

    11 de noviembre de 2021 a las 14:35


Avatar de usuario de Robino
robino

Si bien la respuesta dada por Paul H muestra la parte esencial, no es un ejemplo completo. Por otro lado el ejemplo matplotlib parece bastante complicado y no muestra cómo usar los días.

Entonces, para todos los que lo necesitan, aquí hay un ejemplo de trabajo completo:

from datetime import datetime
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter

myDates = [datetime(2012,1,i+3) for i in range(10)]
myValues = [5,6,4,3,7,8,1,2,5,4]
fig, ax = plt.subplots()
ax.plot(myDates,myValues)

myFmt = DateFormatter("%d")
ax.xaxis.set_major_formatter(myFmt)

## Rotate date labels automatically
fig.autofmt_xdate()
plt.show()

del paquete matplotlib.fechas como se muestra en este ejemplo el formato de fecha se puede aplicar a la etiqueta del eje y las marcas para el gráfico.

A continuación, he dado un ejemplo para etiquetar marcas de eje para multiparcelas

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd

df = pd.read_csv('US_temp.csv')
plt.plot(df['Date'],df_f['MINT'],label="Min Temp.")
plt.plot(df['Date'],df_f['MAXT'],label="Max Temp.")
plt.legend()
####### Use the below functions #######
dtFmt = mdates.DateFormatter('%b') # define the formatting
plt.gca().xaxis.set_major_formatter(dtFmt) # apply the format to the desired axis
plt.show()

Tan simple como eso

avatar de usuario de lepi
lepi

Esto funciona perfectamente para mí.

import matplotlib.pyplot as plt
from matplotlib.ticker import (MultipleLocator, FormatStrFormatter,
                               AutoMinorLocator)
import matplotlib.dates as mdates

dtFmt = mdates.DateFormatter('%Y-%b') # define the formatting
plt.gca().xaxis.set_major_formatter(dtFmt) 
# show every 12th tick on x axes
plt.gca().xaxis.set_major_locator(mdates.MonthLocator(interval=1))
plt.xticks(rotation=90, fontweight="light",  fontsize="x-small",)

ejemplo de formato

¿Ha sido útil esta solución?