我在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可以做到这一点吗?
发布于 2014-06-06 21:14:59
您可以使用如下所示的方法。您可以简单地根据每个模板的值对数据帧进行切片,然后将日期和分数用于绘图。
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()
发布于 2014-06-07 23:47:06
您可以使用groupby方法:
data.groupby("template").plot(x="date", y="score")
发布于 2015-12-06 04:34:55
我认为在同一张图上绘制所有线条的数据的最简单方法是旋转它,使每个“模板”值都是一列:
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()
https://stackoverflow.com/questions/24080275
复制相似问题