我通过运行散景服务器来构建直方图,以动态更改直方图的数据。数据源应该通过点击按钮来改变 - 但是它没有按预期工作。
from bokeh.plotting import figure
from bokeh.layouts import layout, widgetbox
from bokeh.io import curdoc
from bokeh.transform import factor_cmap
from bokeh.palettes import Spectral6
from bokeh.models import FactorRange, ColumnDataSource
from bokeh.models.widgets import Button
button = Button(label="ChangeValue", button_type="success")
fruits = ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries']
val = [5, 3, 4, 2, 4, 6]
data_dict = {'x':fruits,'y':val}
source_table_hist = ColumnDataSource(data=data_dict)
h = figure(x_range=data_dict['x'],plot_height=350, title="Histogram")
h.vbar(x='x', top='y', width=0.2, source=source_table_hist, legend="x", line_color='black',
fill_color=factor_cmap('x', palette=Spectral6, factors=data_dict['x']))
h.xgrid.grid_line_color = None
h.y_range.start = 0
inputs = widgetbox(button)
def update():
fruits = ['Banana', 'Orange']
val = [15, 23]
data_dict = {'x':fruits,'y':val}
h.x_range=FactorRange(factors=data_dict['x'])
source_table_hist.data = data_dict
button.on_click(update)
l = layout([inputs,h])
curdoc().add_root(l)
curdoc().title = "Test"
答案 0 :(得分:0)
Bokeh创建者想到的用例,以及目前最受支持的用例,是设置应用程序,然后*更新(数据和属性到位(即与替换整个对象,例如范围)。如果这行
,你的代码适用于我h.x_range=FactorRange(factors=data_dict['x']) # replace entire range (bad)
改为:
h.x_range.factors=data_dict['x'] # update existing range (good)
新条形图呈灰色显示,因为您配置的颜色映射器对您更改的新因子一无所知。一些选择:
预先为所有可能设置的因素配置颜色映射器
更新颜色映射器的属性以调整新因子
在Python中进行颜色映射(并在CDS中添加“颜色”列)而不是使用LinearColormapper