将simpleapp散景图保存到独立的html文件中

时间:2015-04-14 13:53:59

标签: python plot bokeh

以下脚本(来自this SO answer)生成一个simpleapp Bokeh图。

如何将输出保存到独立的html文件?

import bokeh.plotting as bk
from bokeh.models import ColumnDataSource, Plot
from bokeh.models.widgets import Select, AppVBox
from bokeh.simpleapp import simpleapp

data = {"a": {"x": [1,2,3], "y": [1,2,3]},
        "b": {"x": [3,2,1], "y": [1,2,3]},
        "c": {"x": [2,2,2], "y": [1,2,3]},}


options = ["a", "b", "c"]
select1 = Select(name = 'ticker1', value = options[0], options = options)

@simpleapp(select1)
def test_layout(ticker1):
    p = bk.figure(title = "layout test")

    chart_data = data[ticker1]

    df = ColumnDataSource(data = chart_data)
    p.circle(x = chart_data["x"], y = chart_data["y"])

    return {'plot': p}

@test_layout.layout
def layout(app):
    return AppVBox(app=app, children=['ticker1', 'plot'])

test_layout.route("/bokeh/layout/")

我尝试更改layout(app)以使用file_html。这会生成初始图,但组合框不起作用。我认为file_html仅适用于单个绘图对象,而不适用于我正在使用的simpleapp之类的内容。

from bokeh.embed import file_html
from bokeh.resources import CDN

def layout(app):
    # save standalone html
    html = file_html(AppVBox(app=app, children=['ticker1', 'plot']), CDN, "title")
    f = open("bokeh_standalone.html", "w")
    f.write(html)
    f.close

1 个答案:

答案 0 :(得分:1)

目前没有太多关于Bokeh的文档,因此一些简单的任务可能看起来有点不足。 TL; DR:通过扩展它来使用提供的示例here

但是,要启用“选择”框,您需要执行的操作是在其上调用on_change('value', func),其中func是可更新数据源的可调用对象。完成后,您可以设置datasource._dirty = True。重要的是,所有这些事情都必须发生在属于名为setup_events的应用类的另一个方法中。

散景服务器处理交互的方式是创建对象的新python实例,这些对象存储在其选定的内部数据库中(默认情况下为redis)。这意味着每次都需要“设置事件”。

强烈建议在Bokeh Github页面上阅读ContinuumIO提供的Sliders App示例:https://github.com/bokeh/bokeh/tree/master/examples/app/sliders_applet

过去几周我一直在为此而拔头发,但我们每天都越来越了解。我希望这会有所帮助:)