web-dev-qa-db-ja.com

curdoc()の目的は何ですか?

私は少しの間ボケで遊んでいます、そして今私はインタラクティブなプロットを作成してオンラインでそれらを埋め込みたいと思っている段階にいます(WordPress投稿、例えば)。

しかし、ボケのウェブサイトの例からコードをレビューしてテストするのに少し時間を費やしても、curdoc()の目的が正確に理解するのに苦労します。ウィジェットを使ったボケアプリを作るには必要そうですが、リソースで見つけたものからはよくわかりません。

17
etigrenier

いくつかの用語は整理されています。ボケプロットを作成すると、それは、グリフ、範囲、データソース、ツールなど、多数の小さなオブジェクトで構成されます。そして、プロット自体は、基本的にこれらすべての他のオブジェクトのコンテナーです。プロットを含むこれらすべてのオブジェクトはModelsと呼ばれます。その他Modelsは、レイアウト(例:rowおよびcolumn)のほか、Bokehに組み込まれたウィジェット(例:SliderまたはSelect)。

Python側のこれらすべてのモデルについて、実際にモデルを実装し、描画または対話のためにブラウザーですべての作業を行う対応するJavaScriptオブジェクトがあります。Bokehの動作方法はPythonモデルのコレクションを自動的にJSONの山に変換し、BokehJSはそこから対応するすべてのJSオブジェクトを再構成できます。

A DocumentはBokeh Modelsのコレクションです。これは最小の「直列化の単位」です。つまり、オブジェクトが他の多くのオブジェクト(axesなど)を参照する可能性があるため、単一のPython=モデルを(Plotのような)JSONに変換しても意味がない場合が多い、またはグリフなど)したがって、BokehのモデルのコレクションDocumentを一緒に、意味のある方法ですべてJSONに変換できます。

上記のすべては、スタンドアロンドキュメントを作成する場合(たとえば、_output_file_を使用)でも、BokehサーバーでBokehアプリケーションを作成する場合でも適用されます。 Bokehアプリケーションの場合、アプリケーションコード自体は実際にはドキュメントの変更の単なるレシピです。したがって、Bokehアプリセッションが作成されるたびに(つまり、ユーザーがBokehサーバーでBokehアプリへのURLを開くたびに)、新しい空白Documentが作成され、アプリがコードが実行され、そのセッションの新しいDocumentcurdoc()として利用可能になります。次に、アプリコードはこのドキュメントに何かを追加できます(たとえば、curdoc().add_root(...)を使用)。アプリコードが完了するとすぐに、「完成した」ドキュメントがJSONに変換され、BokehJSに送信されてユーザーに表示されます。

最後に触れておきたいのは、Bokehサーバーの主な目的は、この方法で作成されたBokehドキュメントが、ブラウザでのユーザーのビューと自動的に同期することを確認することです。ユーザーがスライダーをスクラブすると、ブラウザーのJSドキュメントのSliderモデルが更新され、python SliderオブジェクトがPython Bokehサーバーのドキュメントも同様です。アプリケーションはこれに応答し、他の変更を加えることができます(おそらくPythonデータソースが言う)を更新します)。これにより、JSデータソースも更新されます(したがって、プロットが変更されます。)この自動双方向同期により、Bokehサーバーとの高度なインタラクティブ機能がすべて実現されます。

22
bigreddot