Création d'un graphique avec la date et l'heure dans les étiquettes axis avec matplotlib
j'ai mes données dans un tableau de la structure suivante,
[[1293606162197, 0, 0],
[1293605477994, 63, 0],
[1293605478057, 0, 0],
[1293605478072, 2735, 1249],
[1293606162213, 0, 0],
[1293606162229, 0, 0]]
la première colonne est le temps d'époque (dans ms
), la deuxième est y1
et la troisième est y2
. J'ai besoin d'un graphique avec le temps sur l'axe des abscisses, et y1
et y2
sur les axes des ordonnées de gauche et de droite.
j'ai parcouru toute la documentation, mais je n'ai trouvé aucun moyen d'obtenir mes tiques x-axis pour afficher la date et l'heure, comme " 28/12 16: 48", c'est à dire, "date/mois heure:min". Tout ce qui m'aide avec la documentation, c'est d'afficher les dates uniquement, mais ce n'est pas ce que je veux. Toute aide serait appréciée.
et, si cela peut sembler, ce n'est pas un devoir. Il s'agit en fait d'une suite à ma question précédente, la lecture et le graphique des données lues à partir d'énormes fichiers .
1 réponses
j'espère que cela aidera. J'ai toujours eu du mal avec les rencards de matplotlib. Matplotlib nécessite un format flottant qui est jours depuis l'époque. Les fonctions d'aide num2date
et date2num
ainsi que l'intégration de python datetime
peuvent être utilisées pour convertir vers/à partir. L'activité de formatage a été supprimée de cet exemple. Vous pouvez changer un axe sur n'importe quelle parcelle en un axe de date en utilisant set_major_formatter
.
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import dates
import datetime
a = np.array([
[1293605162197, 0, 0],
[1293605477994, 63, 0],
[1293605478057, 0, 0],
[1293605478072, 2735, 1249],
[1293606162213, 0, 0],
[1293606162229, 0, 0]])
d = a[:,0]
y1 = a[:,1]
y2 = a[:,2]
# convert epoch to matplotlib float format
s = d/1000
ms = d-1000*s # not needed?
dts = map(datetime.datetime.fromtimestamp, s)
fds = dates.date2num(dts) # converted
# matplotlib date format object
hfmt = dates.DateFormatter('%m/%d %H:%M')
fig = plt.figure()
ax = fig.add_subplot(111)
ax.vlines(fds, y2, y1)
ax.xaxis.set_major_locator(dates.MinuteLocator())
ax.xaxis.set_major_formatter(hfmt)
ax.set_ylim(bottom = 0)
plt.xticks(rotation='vertical')
plt.subplots_adjust(bottom=.3)
plt.show()