Bokeh:来自pandas数据帧的图表不会在触发器上更新

时间:2016-04-08 10:26:40

标签: python pandas bokeh interaction

我有一个pandas数据框,其列要使用Bokeh服务器显示为图中的线条。另外,我想有一个滑块可以将其中一条线移到另一条线上。

我的问题是滑块值更改时的更新功能。我已经尝试了滑块的代码 - 散景的例子,但它不起作用。

这是一个例子

import pandas as pd
from bokeh.io import vform
from bokeh.plotting import Figure, output_file, show
from bokeh.models import CustomJS, ColumnDataSource, Slider

df = pd.DataFrame([[1,2,3],[3,4,5]])
df = df.transpose()
myindex = list(df.index.values)
mysource = ColumnDataSource(df)

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

for i in range(len(mysource.column_names) - 1):
    name = mysource.column_names[i]    
    plot.line(x = myindex, y = str(name), source = mysource)

offset = Slider(title="offset", value=0.0, start=-1.0, end=1.0, step=1)

def update_data(attrname, old, new):
    # Get the current slider values
    a = offset.value

    temp = df[1].shift(a)
    #to finish#

offset.on_change('value', update_data)

layout = vform(offset, plot)

show(layout)

update_data - 函数内部,我必须更新mysource,但我无法弄清楚如何做到这一点。任何人都可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

试一试......将a=offset.value更改为a=cb_obj.get('value')

然后在source.trigger('change')函数而不是update_data执行您要执行的操作之后放置offset.on_change('value', update_data)

同时更改offset = Slider(title="offset", value=0.0, start=-1.0, end=1.0, step=1, callback=CustomJS.from_py_func(offset))

请注意此格式我使用安装了flexx的作品。 https://github.com/zoofio/flexx如果您使用的是Python 3.5,则必须下载zip文件,提取并输入python setup.py install,因为它尚未针对此版本进行编译...