2016-07-26 74 views
2

我已阅读文档并已搜索Google和StackOverflow以获得答案,但没有更明智的方法。在景中从x轴获取所需的日期时间值

我有一个包含两个变量“分数”和“压力”的圆形象形的散点图,以及第三个变量“日期”作为日期时间x轴(图片here)。我希望用户能够点击圆圈并将其带到一个显示由相应日期标识的特定数据点的详细视图的URL。

我已经启用了带有openURL回调的tap工具,它在URL的末尾附加了日期时间值。问题是,一旦数据点被点击,传递的日期时间值不是所需的格式:'2016-07-20'。我得到的是以下值:'1468969200000'。因此,用户被重定向到'url/1468969200000 /'而不是'url/2016-07-20 /'。

有没有办法改变点击数据点后传递的日期值的格式?

这里是我的代码(在jupyter笔记本运行):

import datetime 
from bokeh.plotting import figure, output_notebook, show 
from bokeh.models import Range1d, OpenURL, TapTool, HoverTool, ColumnDataSource, DatetimeTickFormatter 

data = {'score': [4.33, 2.66, 4.66, 2.66, 2.66, 1.66, 1.0, 4.33], 
     'stress': [3.66, 3.0, 3.0, 1.33, 3.66, 3.33, 1.0, 4.33], 
     'date': [ 
      datetime.date(2016, 7, 17), 
      datetime.date(2016, 7, 18), 
      datetime.date(2016, 7, 19), 
      datetime.date(2016, 7, 20), 
      datetime.date(2016, 7, 21), 
      datetime.date(2016, 7, 22), 
      datetime.date(2016, 7, 23), 
      datetime.date(2016, 7, 24) 
     ] 
     } 

source = ColumnDataSource(data=data) 

TOOLS = ['hover', 'pan', 'tap'] 

plot = figure(x_axis_type='datetime', plot_height=250, tools=TOOLS) 

plot.circle('date', 'score', legend='score', size=15, color='red', source=source) 
plot.circle('date', 'stress', legend='stress', size=10, color='orange', source=source) 
plot.y_range = Range1d(1, 5, bounds=(1,5)) 
plot.x_range = Range1d(datetime.date(2016, 7, 17), datetime.date(2016, 7, 23)) 

hover = plot.select(type=HoverTool) 
hover.tooltips = [ 
    ("score", "@score"), 
    ("stress", "@stress"), 
    ("date", "@date") 
    ] 

url = 'url/@date/' 
taptool = plot.select(type=TapTool) 
taptool.callback = OpenURL(url=url) 

show(plot) 

回答

1

简单的解决方法是提供字符串格式的日期除了。

dateStr= {'dateStr': [x.isoformat() for x in data['date']]} 
data.update(dateStr) 

然后,你可以在你的hover.tooltips使用dateStr并生成URL

hover.tooltips = [ 
    ("score", "@score"), 
    ("stress", "@stress"), 
    ("date", "@dateStr") 
    ] 

url = 'url/@dateStr/' 
+0

感谢您的建议,@jlarsch!这就是诀窍! –