我在x轴上有一个带有日期时间值的图,并希望使用datepicker小部件更改范围。但是" cb_obj.value"存在问题,它不能直接用于f.x_range.start。 我找到了一个类似的question,它已经解决了。但是,从回调对象调整/转换我的值仍然有很多麻烦,特别是因为这必须在Java中完成。或者,我错了吗?
import numpy as np
from bokeh.models import CustomJS, DatePicker, TextInput, ColumnDataSource
from bokeh.layouts import row, layout
from bokeh.plotting import output_file, show, figure
from datetime import datetime, timedelta
output_file("DatePicker.html")
# Figure
f=figure(x_axis_type='datetime')
# Datetime
date_time = [datetime(2017,1,1) + timedelta(days=x) for x in range(0,365)]
# ColumnDataSource
source = ColumnDataSource(dict(datetime=date_time, parameter=np.random.rand(365)))
# Line for plot
f.line(x='datetime',y='parameter',line_color='black',source=source)
# Callback
callbackPlot= CustomJS(args=dict(f=f), code="""
var a = cb_obj.value;
f.x_range.start = a;
""")
# Datepicker
DatepickerPlot = DatePicker(
title="Start:", name="StartDate", value=date_time[0])
DatepickerPlot.js_on_change('value', callbackPlot)
# Show
show(layout(row(DatepickerPlot, f)))
除此之外,还有另一种方法可以在不使用CustomJS / Java的情况下使用回调在Bokeh中创建独立的HTML文件吗?
答案 0 :(得分:1)
cb_obj.value
是一个字符串,f.x_range.start
需要一个数字,更改
f.x_range.start = a;
到
f.x_range.start = Date.parse(a);