自从最初发布此答案以来,Bokeh有了新的工作来简化事情。悬停工具可以通过指定格式化程序将datetime字段直接格式化为datetime,例如:
HoverTool(tooltips=[('date', '@DateTime{%F}')], formatters={'@DateTime': 'datetime'})
不再需要如下所示预先格式化数据源中的日期字段。有关更多信息,请参见格式化工具提示字段。
老答案 :
工具提示的问题是您使用日期的字符串表示形式创建了一个源,但是
p.line()调用并未意识到这一点。因此,您必须传入具有工具提示,x和y值的columndatasource。
这是您的代码的有效变体:
from bokeh.plotting import figure, showfrom bokeh.models.formatters import DatetimeTickFormatterfrom bokeh.models import ColumnDataSourcefrom bokeh.models.tools import HoverToolimport pandas as pdimport numpy as npdata = { '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 = 0p.xaxis.axis_label = "Day"p.yaxis.axis_label = "Euros"p.ygrid.band_fill_color = "olive"p.ygrid.band_fill_alpha = 0.1p.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 = tipshover.mode = 'mouse'p.line(x='DateTime', y='EuP', source=ColumnDataSource(df), legend='Price',color='navy',alpha=0.7)show(p)
另请注意,关于散景工具提示中缺少格式选项的问题尚待解决。可能有一种更简单的方法,不必将日期字符串格式化为单独的列:
https://github.com/bokeh/bokeh/issues/1239
还可以告诉我如何格式化X轴刻度线以垂直显示吗?
他们对我来说很好,对不起,我对此无能为力。
希望这可以帮助!
PS,如果您发布带有导入语句的工作脚本以及模拟的数据框以使其能够进行测试,那么下一次会更好。花了一些时间来解决所有问题。但是我正在学习Bokeh,所以很好:)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)