当Select值更改时,Python Bokeh图上的内容不会更改

2024-04-27 03:10:28 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我是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)

所以基本上我已经将选择框的值设置为“both”,当我改变它的值时,相应的图形也会随之改变。现在的问题是,当我更改下拉列表中的值时,图形不会更新:它总是显示“both”的图形,有趣的是,当我将初始值更改为“one”或“two”时,图形只显示“one”或“two”的图形。看来我的“更改时选择命令根本不起作用,因为“select”的值似乎是固定的。这个命令有什么问题?在

顺便说一句,我使用的是python2.7,bokeh版本是0.12.10,最好不要使用Javascript解决方案,我在其他地方也见过。在

更新:我刚尝试在本地主机上运行它,但当我尝试用浏览器(safari)打开它时,问题仍然存在。为什么?我正在做一个团队项目,所以也许本地主机还不够。。。在

非常感谢


Tags: infromimport图形sourceformodebokeh