我在Bokeh中有2个图表和一个输入框。输入框带有一个值,并且应更新两个图表。我有一个名为createDF
的函数,该函数创建DF,然后调用createPlot
,该函数将图形返回到createDF
,然后createDF
调用createDF2
,后者调用{{ 1}},然后将数字返回到createPlot2
。现在createDF
中有2个数字,我们将其捆绑到列表中并返回,然后显示如下图表:
createDF
这是我尝试处理更新的方式:
plot = createDF(market)
l = layout([[text_input], [plot[0]], [plot[1]]])
curdoc().add_root(l)
但是,只要我输入其他市场,图表就不会更新。如何使它们更新?
答案 0 :(得分:3)
您应该检查两个可能的详细信息:
您是否在服务器模式下运行bokeh?当您使用python回调函数(text_handler)([https://bokeh.pydata.org/en/latest/docs/user_guide/server.html][1])时,这是必需的。
另一个可能的问题:您正在回调函数中创建新的图形对象,而不是操纵现有的对象。
看看以下bokeh画廊示例之一: https://github.com/bokeh/bokeh/blob/master/examples/app/movies/main.py
创建了一个图和一个字形:
p = figure(plot_height=600, plot_width=700, title="", toolbar_location=None, tooltips=TOOLTIPS)
p.circle(x="x", y="y", source=source, size=7, color="color", line_color=None, fill_alpha="alpha")
然后,在更新功能中,它们修改现有实例:
def update():
df = select_movies()
x_name = axis_map[x_axis.value]
y_name = axis_map[y_axis.value]
p.xaxis.axis_label = x_axis.value
p.yaxis.axis_label = y_axis.value
p.title.text = "%d movies selected" % len(df)
source.data = dict(
x=df[x_name],
y=df[y_name],
color=df["color"],
title=df["Title"],
year=df["Year"],
revenue=df["revenue"],
alpha=df["alpha"],
)
如果保留对字形对象的引用:
my_glyph = p.circle(x="x", y="y", source=source, size=7, color="color", line_color=None, fill_alpha="alpha")
您稍后可以(在回调函数中)更改例如值应来自的数据源的系列(列)或大小:
my_glyph.y = 'other_column_name'
my_glyph.size = 42