pandasデータフレームに次のデータがあります
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
毎日5つのテンプレートがあり、各テンプレートにはスコアがあります。
同じ図に、x軸に日付を、y軸にスコアを、各テンプレートの個別の折れ線グラフをプロットします。
Matplotlibを使用してこれを行うことは可能ですか?
次のようなアプローチを使用できます。各テンプレートの値に従ってデータフレームを単純にスライスし、その後プロットの日付とスコアを使用できます。
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()
Groupbyメソッドを使用できます。
data.groupby("template").plot(x="date", y="score")
同じグラフ上のすべての線でこのデータをプロットする最も簡単な方法は、各「テンプレート」値が列になるようにピボットすることだと思います。
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()
以下に従って、グループに応じて凡例を追加できます。
plt.legend(pr['template'], loc='best')