作業用のボケ味のアプレットをフラスコに埋め込もうと必死になっており、これを行う適切な方法が見つかりません。すべての例を調べましたが、データを更新する機能を含む例は見つかりません(最良の例:sliders_applet)。
私が間違っていない場合は、データを変更できるようにするためにボケサーバーが必要です(スライダーなどを使用)。この方法でアプレットを起動すると、次のように機能します。
bokeh-server --script sliders_app.py
しかし、私は適切な、または少なくともSlides_appをフラスコに埋め込むための実用的な方法を見つけることができません。また、複数のアプレットを使用できるはずなので、ボケサーバーの起動時に1つのアプレットを指定するのは私には不自然に思えます。
手助けをいただければ幸いです-ボケは私にとって素晴らしいツールのように見えます。
もう1つの回答では、Bokehサーバーアプリを埋め込む方法については説明していません(スタンドアロンのBokehドキュメントを埋め込むためにcomponents
を使用しています)。
まず、次の場所でホストされている多くのライブ例を見ることができます: https://demo.bokeh.org/
アプリを埋め込むには、2つの通常のオプションがあります。
autoload_server
後者は通常、次のように使用されます。
script = autoload_server(model=None,
app_path="/apps/slider",
url="https://demo.bokehplots.com")
これにより、以下のような<script>
タグが返されます。これは、アプリを表示したい場所にflask HTML応答を挿入できます。
<script
src="https://demo.bokehplots.com/apps/slider/autoload.js?bokeh-autoload-element=c5c9bdb5-40e8-46a2-9bf0-40a9d396ce97"
id="c5c9bdb5-40e8-46a2-9bf0-40a9d396ce97"
data-bokeh-model-id=""
data-bokeh-doc-id=""
></script>
最後に、Bokehサーバーはデフォルトでかなり保守的なネットワーク構成を選択することに注意することが重要です。 --allow-websocket-Origin
コマンドラインオプションを設定してBokehサーバーを起動し、Bokehアプリを埋め込むホストを指定する必要があります。
Bokehプロジェクトのコア開発者の1人による編集以下の情報は、上記の質問には答えません。以下に説明するようにbokeh.embed.components
を使用してBokehApplicationを埋め込むことは絶対的に不可能です。 components
は、スタンドアロンのドキュメントのみを埋め込むことができます(つまり、Bokehサーバーでは実行できません)。
ボケをフラスコに埋め込む例 が bokeh github repo にあります。
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"""
# Grab the inputs arguments from the URL
# This is automated by the button
args = flask.request.args
# Get all the form arguments in the url with defaults
color = colors[getitem(args, 'color', 'Black')]
_from = int(getitem(args, '_from', 0))
to = int(getitem(args, 'to', 10))
# Create a polynomial line graph
x = list(range(_from, to + 1))
fig = figure(title="Polynomial")
fig.line(x, [i ** 2 for i in x], color=color, line_width=2)
# Configure resources to include BokehJS inline in the document.
# For more details see:
# http://bokeh.pydata.org/en/latest/docs/reference/resources_embedding.html#module-bokeh.resources
plot_resources = RESOURCES.render(
js_raw=INLINE.js_raw,
css_raw=INLINE.css_raw,
js_files=INLINE.js_files,
css_files=INLINE.css_files,
)
# For more details see:
# http://bokeh.pydata.org/en/latest/docs/user_guide/embedding.html#components
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()
もう1つのアイデアは、bokeh-server
とflask
Webアプリを並べて実行し、その方法で(サーバー側またはJSまたはiframeを介して)ボケコードをロードすることですが、面倒です。