私はbokehのビジュアライゼーションに取り組んでいます。クライアント側で対話性を実装するのにCustomJS
を使用しているので、 JavaScriptを使用して。 ColumnDataSource
をCustomJS
に渡すと、プロットをインタラクティブに更新できます。`CustomJS`を使ってPythonからbokehに任意の` json`データを渡す方法
しかし、私は何もできません、いくつかの任意のjson
データを出力htmlに埋め込むだけです。以下の自己完結型の例を参照してください:私の場合は
from bokeh.io import output_file
from bokeh.layouts import widgetbox
from bokeh.models import CustomJS
from bokeh.models.widgets import Div, Button
from bokeh.plotting import show
data_for_client = {
"x": 3,
"y": {
"foo": [1, 2, 3],
"bar": {"some_bar": "doge", "other bar": "much json"}
},
"z": [[1, 2], [3, 4]]
}
callback = CustomJS(args={"data_for_client": data_for_client}, code="""
console.log(data_for_client);
""")
content = widgetbox(
Button(label="click here", callback=callback),
Div(text="some complicated interactive stuff based on json content here")
)
output_file("issue.html")
show(content)
をdata_for_client
がjson
複雑深くネストされ、このjson
の異なる部分がいくつかのウィジェットとのユーザインタラクションに応じて使用されています。
ユーザーの操作に基づいてjson
データに変更を加える必要はありません。また、リスナーや特別なものを添付する必要はありません。 CustomJS
コールバックで使用できるjson値の内容が必要です。
単純な列データの場合は、ColumnDataSource
にデータをラップし、CustomJS
にargとして渡すことができますが、普通のjson
データと似たものは見つかりません。上記のコードは、メッセージで失敗します。
ValueError: expected an element of Dict(String, Instance(Model)), got {'data_for_client': {'x': 3, 'y': {'foo': [1, 2, 3], 'bar': {'some_bar': 'doge', 'other bar': 'much json'}}, 'z': [[1, 2], [3, 4]]}}
[OK]を私の一部のfacepalm。しかし、これは問題を解決するものではありません。私はこの点について質問を編集しました。 –
Ajax/Json-Datasourceのようなものがあると思われます。 – MEE
Ajaxデータソースが存在し、私が知る限りWebサーバーからデータを送信するためのものです。私はドキュメントでjsonのソースが見つかりませんでした。 –