2017-04-17 85 views
1

散景中每日数据做年年折线图的最佳方法是什么?散景年线图程序

现在即时将日期线(任意2016年)和年份列添加到每日值的初始数据框。然后,通过一年填充在NAS(不同年份数据缺失而异)枢轴转动范围内的数据,然后通过线横跨一年的cols建设背景虚化的图线:

说我有三年的数据表:

柱:日期和值

df = df.set_index('Date') 

df['dateline'] = df.index.to_series().dt.strftime('%d-%b-2016') 
df['year'] = df.index.to_series().dt.strftime('%Y') 

pv = pd.pivot_table(df, index=df['dateline'], columns=df.index.year, 
        values='value', aggfunc='sum') 

pv.index = pd.to_datetime(pv.index, format = '%d-%b-%Y') 
pv.sort_index(inplace=True) 
pv = pv.apply(lambda x: x.fillna(method = 'ffill' , limit = 4)) 


p.line(x= pv.index , y = pv[2017], line_width=1.5, line_color = "red" ,legend = '2017') 
p.line(x= pv.index , y = pv[2016], line_width=1.5, line_color = "blue" ,legend = '2016') 
p.line(x= pv.index , y = pv[2015], line_width=1.5, line_color = "green" , legend = '2015') 
p.line(x= pv.index , y = pv[2014], line_width=1.5, line_color = "orange" ,legend = '2014') 

我的问题是可以进一步优化?我想在未来使用悬停,那么最好的设置是什么?下一步将是循环多年的专栏,但我需要去那条路线吗?

来自R即将我想保持长格式的数据,并完成类似:

p.line(df, x='dateline' , y = 'value' , color = 'year') 

感谢您的提示。

回答

0

一种解决办法是把你的日期,并创造了一年柱和使用.DT年列日访问器

确保DF [“日期”]是一个datetime列。

df['year'] = df['date'].dt.year 
df['dayofyear'] = df['date'].dt.dayofyear 

df.head() 

      year  value dayofyear 
date         
2014-01-31 2014 1.964372   31 
2014-02-28 2014 2.386228   59 
2014-03-31 2014 2.695743   90 
2014-04-30 2014 2.712133  120 
2014-05-31 2014 2.033271  150 


from bokeh.charts import Line 
p = Line(df,x='dayofyear', y='value',color='year') 
show(p) 

enter image description here

+0

伟大谢谢。那么是否有可能将x轴从dayofyear格式化为'%d-%b'(日,月),并为悬停工具提供相同的格式? –

+0

是的,你应该能够在你认为合适的时候标记这些刻度。如果你不介意,并且你发现这有帮助,你会[接受](http://stackoverflow.com/help/someone-answers)这个答案。 –

+0

@python_analysis看到这个SO [post](http://stackoverflow.com/questions/37173230/how-do-i-use-custom-labels-for-ticks-in-bokeh)。 –