2016-12-29 67 views
1

我想通过Python中的散景获得线条图。我是Bokeh的新手,我试图将悬停工具提示应用于情节。该图的x轴具有时间戳值,它们被转换为时间戳字符串。我在这里回顾了一些相同的问题,并试图对我的案例使用解决方法,但似乎没有工作。在阴谋它给出???时间应该显示。Python:散焦悬停日期时间

对我的代码有任何建议吗?

时间戳是格式2016-12-29 02:49:12

也可以有人告诉我如何格式化x-axis蜱垂直显示?

p = figure(width=1100,height=300,tools='resize,pan,wheel_zoom,box_zoom,reset,previewsave,hover',logo=None) 
p.title.text = "Time Series for Price in Euros" 
p.grid.grid_line_alpha = 0 
p.xaxis.axis_label = "Day" 
p.yaxis.axis_label = "Euros" 
p.ygrid.band_fill_color = "olive" 
p.ygrid.band_fill_alpha = 0.1 
p.circle(df['DateTime'],df['EuP'], size=4, legend='close', 
    color='darkgrey', alpha=0.2) 
p.xaxis.formatter = DatetimeTickFormatter(formats=dict(
hours=["%d %B %Y"], 
days=["%d %B %Y"], 
months=["%d %B %Y"], 
years=["%d %B %Y"], 
)) 

source = ColumnDataSource(data=dict(time=[x.strftime("%Y-%m-%d %H:%M:%S")for x in df['DateTime']])) 
hover = p.select(dict(type=HoverTool)) 
hover.tooltips = {"time":'@time', "y":"$y"} 
hover.mode = 'mouse' 
p.line(df['DateTime'],df['EuP'],legend='Price',color='navy',alpha=0.7) 

回答

4

你提示的问题是你创建的源与日期的字符串表示,但p.line()通话是不知道它。所以你必须传入一个带有tooltip,x和y值的columndatasource。

这里是你的代码的工作变型:

from bokeh.plotting import figure, show 
from bokeh.models.formatters import DatetimeTickFormatter 
from bokeh.models import ColumnDataSource 
from bokeh.models.tools import HoverTool 
import pandas as pd 
import numpy as np 

data = { 
    'DateTime' : pd.Series(
     ['2016-12-29 02:49:12', 
     '2016-12-30 02:49:12', 
     '2016-12-31 02:49:12'], 
     dtype='datetime64[ns]'), 
    'EuP' : [20,40,15] 
} 
df = pd.DataFrame(data) 
df['tooltip'] = [x.strftime("%Y-%m-%d %H:%M:%S") for x in df['DateTime']] 
p = figure(width=1100,height=300,tools='resize,pan,wheel_zoom,box_zoom,reset,previewsave,hover',logo=None) 
p.title.text = "Time Series for Price in Euros" 
p.grid.grid_line_alpha = 0 
p.xaxis.axis_label = "Day" 
p.yaxis.axis_label = "Euros" 
p.ygrid.band_fill_color = "olive" 
p.ygrid.band_fill_alpha = 0.1 
p.circle(df['DateTime'],df['EuP'], size=4, legend='close', 
    color='darkgrey', alpha=0.2) 
p.xaxis.formatter = DatetimeTickFormatter(formats=dict(
hours=["%d %B %Y"], 
days=["%d %B %Y"], 
months=["%d %B %Y"], 
years=["%d %B %Y"], 
)) 
hover = p.select(dict(type=HoverTool)) 
tips = [('when','@tooltip'), ('y','$y')] 
hover.tooltips = tips 
hover.mode = 'mouse' 
p.line(x='DateTime', y='EuP', source=ColumnDataSource(df), 
     legend='Price',color='navy',alpha=0.7) 
show(p) 

还要注意有关于缺乏的背景虚化提示格式化选项打开的问题。有可能是没有对datestrings格式化为一个单独的列一个简单的方法:

https://github.com/bokeh/bokeh/issues/1239

也可以有人告诉我如何格式化x轴蜱垂直显示?

他们看起来很好,对不起,我无法帮助那个。

希望这会有所帮助!

PS它会更好下一次,如果你发布的import语句工作脚本和嘲笑了数据帧,使它可以测试。花费了一些时间才把它全部整理出来。但我学习背景虚化,这样是好的:)

+0

此代码在python2.7我的0.12.3版本的背景虚化工作非常。但它有一个弃用警告:背景虚化/ UTIL/deprecation.py:33:BokehDeprecationWarning:DatetimeTickFormatter.formats被弃用散景0.12.3和将被删除,使用单独的DatetimeTickFormatter领域代替。 警告(消息) –

+0

@PabloReyes是的我也得到了弃用警告。由于它超出了问题的范围,我没有考虑它。 :) –