J'ai les données suivantes dans un pandas dataframe
date template score
0 20140605 0 0.138786
1 20140605 1 0.846441
2 20140605 2 0.766636
3 20140605 3 0.259632
4 20140605 4 0.497366
5 20140606 0 0.138139
6 20140606 1 0.845320
7 20140606 2 0.762876
8 20140606 3 0.261035
9 20140606 4 0.498010
Pour chaque jour, il y aura 5 modèles et chaque modèle aura un score.
Je veux tracer la date sur l'axe des x et marquer sur l'axe des y et un graphique linéaire séparé pour chaque modèle dans la même figure.
Est-il possible de le faire en utilisant matplotlib?
Vous pouvez utiliser une approche comme la suivante. Vous pouvez simplement découper la trame de données en fonction des valeurs de chaque modèle, puis utiliser les dates et les scores pour le tracé.
from pandas import *
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime as dt
#The following part is just for generating something similar to your dataframe
date1 = "20140605"
date2 = "20140606"
d = {'date': Series([date1]*5 + [date2]*5), 'template': Series(range(5)*2),
'score': Series([random() for i in range(10)]) }
data = DataFrame(d)
#end of dataset generation
fig, ax = plt.subplots()
for temp in range(5):
dat = data[data['template']==temp]
dates = dat['date']
dates_f = [dt.datetime.strptime(date,'%Y%m%d') for date in dates]
ax.plot(dates_f, dat['score'], label = "Template: {0}".format(temp))
plt.xlabel("Date")
plt.ylabel("Score")
ax.legend()
plt.show()
Vous pouvez utiliser la méthode groupby:
data.groupby("template").plot(x="date", y="score")
Je pense que la façon la plus simple de tracer ces données avec toutes les lignes sur le même graphique est de les faire pivoter de telle sorte que chaque valeur de "modèle" soit une colonne:
pivoted = pandas.pivot_table(data, values='score', columns='template', index='date')
# Now there will be an index column for date and value columns for 0,1,2,3,4
pivoted.plot()
Vous pouvez ajouter la légende selon les groupes avec:
plt.legend(pr['template'], loc='best')