1 回答
TA贡献1862条经验 获得超6个赞
在评论中回答您的问题,更改data不会更改范围,因为y_range=some_thing这只是为了方便创建在幕后完成的适当范围类。
以下是您可以手动执行此操作的方法。请注意,我根本不碰x_range- 默认情况下它会DataRange1d自动计算其开始/结束值。
from bokeh.io import curdoc
from bokeh.layouts import column
from bokeh.models import Select, ColumnDataSource
from bokeh.plotting import figure
d1 = dict(x=[0, 1], y=['a', 'b'])
d2 = dict(x=[8, 9], y=['x', 'y'])
ds = ColumnDataSource(d1)
def get_factors(data):
return sorted(set(data['y']))
p = figure(y_range=get_factors(d1))
p.circle(x='x', y='y', source=ds)
s = Select(options=['1', '2'], value='1')
def update(attr, old, new):
if new == '1':
ds.data = d1
else:
ds.data = d2
p.y_range.factors = get_factors(ds.data)
s.on_change('value', update)
curdoc().add_root(column(p, s))
添加回答
举报