嗨,这是我关于堆栈溢出的第一个问题,如果我的问题有任何问题,请先致歉。在
我是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)打开它时,问题仍然存在。为什么?我正在做一个团队项目,所以也许本地主机还不够。。。在
非常感谢
目前没有回答
相关问题 更多 >
编程相关推荐