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?

103
demandé sur Peter Mortensen 2009-10-15 22:07:10

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)
121
répondu codeape 2017-01-02 13:18:19

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:

Line Plot


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:

Scatter Plot

62
répondu moooeeeep 2016-10-06 07:25:33

7 ans plus tard, et ce code m'a aidé. Cependant, mon temps n'était pas encore venu correctement.

enter image description here

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. enter image description here

merci à la communauté.

8
répondu GeorgeLPerkins 2017-07-13 21:05:01

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.

graph with centered stack of bubbles

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é.

graph with bubbles distributed over time

5
répondu Kirk 2017-09-28 11:42:13