当Select的值发生变化时,图表上的Python Bokeh内容不会更改

时间:2017-11-18 15:45:24

标签: python select drop-down-menu bokeh

嗨,这是我关于堆栈溢出的第一个问题,所以如果我的问题有任何问题,请先道歉。

我是Python Bokeh的新手并尝试使用Select创建一个包含下拉列表的交互式图表,这是我的代码:

import random as rd
from bokeh.plotting import figure
from bokeh.layouts import layout, widgetbox
from bokeh.models import ColumnDataSource, HoverTool, Div
from bokeh.models.widgets import Select
from bokeh.io import show, output_file, curdoc
from bokeh.plotting import figure, show, output_file

low = 1
high = 400
mylistX1 = [(rd.randint(low, high)) for k in range(100)]
mylistY1 = [(rd.randint(low, high)) for k in range(100)]
mylistX2 = [(rd.randint(low, high)) for k in range(100)]
mylistY2 = [(rd.randint(low, high)) for k in range(100)]

source = ColumnDataSource(data=dict(x=[], y=[]))


def update():
    group_val = select.value
    if group_val == "both":
        source.data = dict(x=mylistX1+mylistX2, y=mylistY1+mylistY2)
    elif group_val == "one":
        source.data = dict(x=mylistX1, y=mylistY1)
    elif group_val == "two":
        source.data = dict(x=mylistX2, y=mylistY2)


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

p.circle(source=source, x='x', y='y', size=10, alpha=0.5, color='navy')

select = Select(title='Group', options=["both", "one", "two"], value="both")

select.on_change('value', lambda attr, old, new: update())
sizing_mode = 'fixed'

inputs = widgetbox(select, sizing_mode=sizing_mode)
l = layout([
    [inputs, p]
], sizing_mode=sizing_mode)

update()

curdoc().add_root(l)
curdoc().title = "GG"

show(l)

所以基本上我已经将Select框的值设置为“both”,当我更改它的值时,相应的图形也会被更改。现在问题是,当我更改下拉列表中的值时,图表不会更新:它总是向我显示“both”的图形,有趣的是当我将初始值更改为“one”或“two”时,图表显示我只是“一”或“两”的图形。因此,似乎我的“select.on_change”命令根本不起作用,因为“select”的值似乎是固定的。该命令有什么问题?

btw我正在使用python 2.7,散景版本是0.12.10,最好我不想使用Javascript解决方案,我在其他地方已经看过。

更新:我只是尝试在我的localhost中运行它并且它可以工作但是当我尝试用我的浏览器(safari)打开它时问题仍然存在。这是为什么?我正在开展一个小组项目,所以也许localhost还不够......

非常感谢

0 个答案:

没有答案