2017-04-17 88 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)。 –