Bokeh 项目的核心开发人员之一编辑: 下面的信息无法回答上述问题。按照下文所述,使用 bokeh.embed.components
嵌入 Bokeh 应用程序 是绝对不可能的。 components
只能嵌入独立文档(即不在 Bokeh 服务器上运行的文档)。
一个在 Flask 中嵌入 Bokeh 的示例可以在 Bokeh 的 Github 代码库中找到。
import flask
from bokeh.embed import components
from bokeh.plotting import figure
from bokeh.resources import INLINE
from bokeh.templates import RESOURCES
from bokeh.util.string import encode_utf8
app = flask.Flask(__name__)
colors = {
'Black': '#000000',
'Red': '#FF0000',
'Green': '#00FF00',
'Blue': '#0000FF',
}
def getitem(obj, item, default):
if item not in obj:
return default
else:
return obj[item]
@app.route("/")
def polynomial():
""" Very simple embedding of a polynomial chart"""
args = flask.request.args
color = colors[getitem(args, 'color', 'Black')]
_from = int(getitem(args, '_from', 0))
to = int(getitem(args, 'to', 10))
x = list(range(_from, to + 1))
fig = figure(title="Polynomial")
fig.line(x, [i ** 2 for i in x], color=color, line_width=2)
plot_resources = RESOURCES.render(
js_raw=INLINE.js_raw,
css_raw=INLINE.css_raw,
js_files=INLINE.js_files,
css_files=INLINE.css_files,
)
script, div = components(fig, INLINE)
html = flask.render_template(
'embed.html',
plot_script=script, plot_div=div, plot_resources=plot_resources,
color=color, _from=_from, to=to
)
return encode_utf8(html)
def main():
app.debug = True
app.run()
if __name__ == "__main__":
main()
另一个想法是同时运行
bokeh-server
和你的
flask
web应用程序,并以这种方式加载bokeh代码(在服务器端或通过JS或iframe),但可能会有麻烦。
autoload_server
吗? - mr.bjerre<iframe src="https://url.to.bokeh/server"></iframe>
。 - bigreddot