Temps de calcul en Python avec Matplotlib
j'ai un tableau de pointeurs dans le format (HH:MM:SS.hum hum) et un autre tableau de nombres flottants, chacun correspondant à une valeur du timestamp tableau.
puis-je tracer le temps sur l'axe des x et les nombres sur l'axe des y en utilisant Matplotlib?
j'essayais de le faire, mais d'une certaine façon, il n'acceptait que des tableaux de flotteurs. Comment puis-je l'amener à tracer l'heure? Dois-je modifier le format d'une façon quelconque?
4 réponses
vous devez d'abord convertir vos horodateurs en objets Python datetime
(utilisez datetime.strptime
). Ensuite, utilisez date2num
pour convertir les dates au format matplotlib.
tracer les dates et les valeurs en utilisant plot_date
:
dates = matplotlib.dates.date2num(list_of_datetimes)
matplotlib.pyplot.plot_date(dates, values)
vous pouvez également tracer l'horodatage, les paires de valeurs en utilisant .parcelle (après les avoir séparées de leur représentation de chaîne). (Testé avec les versions 1.2.0 et 1.3.1 de matplotlib.)
exemple:
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()
image résultante:
Ici est la même que celle d'un nuage de points:
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()
Produit une image similaire à celle-ci:
7 ans plus tard, et ce code m'a aidé. Cependant, mon temps n'était pas encore venu correctement.
utilisant Matplotlib 2.0.0 et j'ai dû ajouter le morceau de code suivant de éditant le formatage de date des étiquettes de tique x-axis dans matplotlib par Paul H.
import matplotlib.dates as mdates
myFmt = mdates.DateFormatter('%d')
ax.xaxis.set_major_formatter(myFmt)
j'ai changé le format à (%H:%M) et le temps affiché correctement.
merci à la communauté.
j'ai eu des problèmes avec cette utilisation de la version matplotlib: 2.0.2. En parcourant l'exemple ci-dessus, j'ai obtenu un ensemble centré de bulles empilées.
j'ai "résolu" le problème en ajoutant la ligne suivante:
plt.plot([],[])
l'extrait de code entier devient:
import datetime
import random
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
# make up some data
x = [datetime.datetime.now() + datetime.timedelta(minutes=i) for i in range(12)]
y = [i+random.gauss(0,1) for i,_ in enumerate(x)]
# plot
plt.plot([],[])
plt.scatter(x,y)
# beautify the x-labels
plt.gcf().autofmt_xdate()
myFmt = mdates.DateFormatter('%H:%M')
plt.gca().xaxis.set_major_formatter(myFmt)
plt.show()
plt.close()
cela produit une image avec les bulles distribuées comme désiré.