Подтвердить что ты не робот

Построение графика нескольких строк с помощью 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?

4b9b3361

Ответ 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')