有没有办法重绘散景图?

时间:2018-08-10 14:21:54

标签: python bokeh

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

但是,只要我输入其他市场,图表就不会更新。如何使它们更新?

1 个答案:

答案 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