Построение графика нескольких строк с помощью pandas и matplotlib
У меня есть следующие данные в 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
За каждый день будет 5 шаблонов, и каждый шаблон будет иметь оценку.
Я хочу нарисовать дату по оси x и оценить по оси y и отдельный график линии для каждого шаблона на том же рисунке.
Можно ли это сделать с помощью matplotlib?
Ответы
Ответ 1
Вы можете использовать такой подход, как следующий. Вы можете просто срезать блок данных в соответствии со значениями каждого шаблона, а затем использовать даты и оценки для графика.
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()
Ответ 2
Вы можете использовать метод groupby:
data.groupby("template").plot(x="date", y="score")
Ответ 3
Я думаю, что самый простой способ построить эти данные со всеми строками на одном и том же графике - это развернуть его так, чтобы каждое значение "template" было столбцом:
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()
Ответ 4
Вы можете добавить легенду в соответствии с группами:
plt.legend(pr['template'], loc='best')