滑块不响应

时间:2019-06-12 04:09:29

标签: python bokeh

我想使用滑块更改数字,但这没有用。我认为问题可能出在回调部分。但是我不知道该怎么做。

month = [1,2,3,1,2,3,1,2,3,1,2,3]
tilts = [1,1,1,2,2,2,3,3,3,4,4,4]
data = [0.1,0.2,0.3,1,2,3,11,12,13,21,22,24]
df = pd.DataFrame({'month':month,'tilt':tilts,'data'=data})

df_default = df[df['tilt']==1]

source = ColumnDataSource({
    'x': df_default.month.tolist(), 
    'y': df_default.data.tolist(), 
})

plot = figure(plot_width=400, plot_height=400)

plot.line('x', 'y', source=source, line_width=3, line_alpha=0.6)

callback = CustomJS(args=dict(source=source), code="""
    var data = source.data;
    var tilt = slider.value;
    var x = data['x']
    var y = data['y']
    'x'        = df[df['tilt']==tilt].month.tolist();
    'y'        = df[df['tilt']==tilt].data;
    plot.line(x='x', y='y', source=source, line_width=3, 
line_alpha=0.6, 
         );
    source.change.emit();
""")

slider = Slider(start=1, end=4, step=1, value=1, title='tilt')
slider.js_on_change('value',callback)

layout = row(
    plot,
    column(slider)
)

output_file("slider.html", title="slider.py example")

show(layout)

它可以显示,但显然回调无法正常工作

1 个答案:

答案 0 :(得分:0)

此代码存在几个问题,其中之一是这些行是荒谬的:

'x'        = df[df['tilt']==tilt].month.tolist();
'y'        = df[df['tilt']==tilt].data;

这些试图将值分配给字符串常量,这是无效的JavaScript。但是,更大的问题是您试图在CustomJS回调中使用Pandas DataFrames,但这永远无法正常工作。 Pandas DataFrames是一个Python对象,在浏览器中不存在。要运行真实的Python代码,例如使用Pandas DataFrames,您将必须create and run a Bokeh Server application