我想使用滑块更改数字,但这没有用。我认为问题可能出在回调部分。但是我不知道该怎么做。
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)
它可以显示,但显然回调无法正常工作
答案 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。