2016-11-12 6 views
6

Ich habe ein bisschen Zeit mit Bokeh gespielt und bin jetzt bei dem Schritt, wo ich interaktive Plots erstellen und online einbetten möchte (zum Beispiel in WordPress Posts).Was ist der Zweck von curdoc()?

Obwohl ich einige Zeit damit verbrachte, Code aus den Bokeh-Website-Beispielen zu überprüfen und zu testen, fällt es mir schwer zu verstehen, was genau der Zweck von curdoc() ist. Es scheint notwendig zu sein, um eine Bokeh-App mit Widgets zu erstellen, aber von dem, was ich in den Ressourcen gefunden habe, verstehe ich es nicht ganz.

Antwort

5

Einige Terminologie ist in Ordnung. Wenn Sie ein Bokeh-Plot erstellen, besteht es aus vielen kleineren Objekten, z. B. Glyphen, Bereichen, Datenquellen, Werkzeugen usw. Und das Plot selbst ist grundsätzlich ein Container für all diese anderen Objekte. Alle diese Objekte, einschließlich des Plots, heißen Models. Andere Modelle sind Dinge wie Layouts (z.B. row und column) sowie die in Bokeh eingebauten Widgets (z.B. Slider oder Select).

Für jedes dieser Modelle auf der Python-Seite gibt es ein entsprechendes JavaScript-Objekt, das das Modell tatsächlich implementiert und die gesamte Arbeit im Browser für das Zeichnen oder die Interaktion ausführt. Die Funktionsweise von Bokeh ist, dass eine Sammlung von Python-Modellen automatisch in einen Stapel von JSON umgewandelt werden kann. Anschließend kann BokehJS alle entsprechenden JS-Objekte daraus neu aufbauen.

Ein Dokument ist eine Sammlung von Bokeh Modelle. Es ist die kleinste "Einheit der Serialisierung". Das heißt, es macht oft keinen Sinn, ein einzelnes Python-Modell in JSON umzuwandeln (wie eine Plot), weil das Objekt sich auf viele andere Objekte (wie Achsen, Glyphen usw.) bezieht. Also eine Sammlung von Modellen in Ein Bokeh Dokument kann alle in JSON zusammen in einer sinnvollen Weise umgewandelt werden.

Alles oben genannte gilt unabhängig davon, ob Sie eigenständige Dokumente erstellen (z. B. mit output_file) oder Bokeh-Anwendungen auf einem Bokeh-Server erstellen. Im Fall von Bokeh-Anwendungen ist der Anwendungscode selbst nur ein Rezept für , das ein Dokument modifiziert. Wenn also eine Bokeh-App-Sitzung erstellt wird (dh wenn ein Benutzer eine URL zu einer Bokeh-App auf einem Bokeh-Server öffnet), wird dafür eine neue leereDocument erstellt, und der App-Code wird ausgeführt, wo die neue Document dafür Sitzung ist verfügbar als curdoc(). Dann kann der App-Code Dinge zu diesem Dokument hinzufügen (zB mit curdoc().add_root(...) und sobald der App-Code beendet ist, wird das "abgeschlossene" Dokument an JSON übergeben und an BokehJS gesendet, um es dem Benutzer zu zeigen.

Letztlich ist es der Hauptzweck des Bokeh-Servers sicherzustellen, dass Bokeh-Dokumente, die auf diese Weise erstellt wurden, automatisch mit der Ansicht des Benutzers im Browser synchronisiert werden.Wenn ein Benutzer einen Schieberegler scrubbelt, wird ein Slider Modell aktualisiert JS-Dokument im Browser, das automatisch auch das Python-Slider-Objekt im Python-Dokument auf dem Bokeh-Server aktualisiert.Die Anwendung kann darauf reagieren und andere Änderungen vornehmen (etwa das Aktualisieren einer Python-Datenquelle), was die JS-Daten verursacht Quelle, um auch zu aktualisieren (und damit die Plot-Änderung.) Diese automatische Zwei-Wege-Synchronisation ist, was alle t bietet Er bietet ausgefeilte interaktive Funktionen mit einem Bokeh-Server.