J'essayais de faire un nuage de points, et mon axe x doit être chaque jour individuel dans une année. J'ai d'abord lu dans le fichier de données et j'obtiens la colonne de date, qui est remplie d'entiers comme 19800801. Je convertis donc ce integer
en datetime
en écrivant:
datetimes_0 = datetime.strptime(str(dates_pitts[0]), '%Y%m%d')
Ensuite, je veux extraire uniquement le mois et le jour de l'objet datetime en écrivant:
s = datetimes_0.strftime("%m%d")
J'ai réalisé qu'ils retournent la valeur de strftime
n'est plus un objet datetime alors j'ai essayé de le reconvertir en objet datetime en faisant
s0= datetime.strptime(s, '%m%d')
Mais au lieu de me donner seulement le mois et le jour, cela me rend toute l'année, le mois et le jour. Ma question est de savoir comment extraire un objet datetime uniquement du mois et du jour (les deux) à partir d'un entier donné comme 19800801?
Si vous essayez de tracer des données temporelles dans matplotlib, l'approche habituelle consiste à convertir d'abord vos dates en objets datatime
, puis à obtenir matplotlib pour convertir ces valeurs dans sa propre représentation interne à l'aide de date2num()
fonction. Ensuite, vous pouvez indiquer à matplotlib comment formater les graduations sur l'axe des x en utilisant un formateur, dans ce cas un DateFormatter()
. Ainsi, vous pouvez par exemple choisir d'afficher le mois et le jour pour chaque tick.
Dans cet exemple, j'affiche le mois, avec le jour sur la ligne ci-dessous:
from matplotlib import pyplot, dates
from datetime import datetime
data = [("19800801", 16), ("19800810", 10), ("19800901", 15), ("19800905", 14)]
xaxis = [datetime.strptime(d, '%Y%m%d') for d, v in data]
yaxis = [v for d, v in data]
ax = pyplot.gca()
xaxis = dates.date2num(xaxis) # Convert to maplotlib format
hfmt = dates.DateFormatter('%m\n%d')
ax.xaxis.set_major_formatter(hfmt)
pyplot.xlabel('Date')
pyplot.ylabel('Value')
pyplot.plot(xaxis, yaxis)
pyplot.tight_layout()
pyplot.show()
Cela s'afficherait comme suit:
Vous pouvez ensuite étendre ceci pour utiliser une DayLocator()
qui indique à matplotlib de placer les xticks aux emplacements exacts du jour comme suit:
ax.xaxis.set_major_locator(dates.DayLocator())
Te donne:
Cela prendra un entier (en supposant que c'est une époque valide) et le convertira en un objet python datetime:
>>> import datetime
>>> date = datetime.datetime.fromtimestamp(19800801)
>>> print date.month
8
>>> print date.day
17
ou en utilisant strftime (renvoie une chaîne et non un objet datetime):
>>> datetime.datetime.fromtimestamp(19800801).strftime('%m%d')
'0817'
sortie du mois et du jour comme un seul entier:
>>> int(datetime.datetime.fromtimestamp(19800801).strftime('%m%d'))
817