Kampf mit Flask + Bokeh AjaxDataSource:
Ich habe eine Funktion, die json-Daten zurückgibt:
%Vor%Ich kann es verwenden, mit einer Bokeh AjaxDataSource kein Problem, um ein Streaming-Plot zu erstellen:
%Vor%Wenn ich jedoch versuche, dies in eine Flask-Seite einzubetten, fragt AjaxDataSource den Server nicht ab. Das Diagramm wird nicht fehlerfrei gerendert. Beachten Sie, dass wenn ich ein statisches Diagramm anstelle von AjaxDataSource verwende, es gut plottet. Hier ist der relevante Code:
%Vor%Wenn jemand irgendwelche Gedanken hat, wäre ich dankbar.
Brian
Zuerst sollten Sie als einen sanften Vorschlag immer vollständige runnable Code-Beispiele posten. Es dauerte ein paar Minuten, um alle fehlenden notwendigen Imports zu reproduzieren, für etwas, das nur Sekunden brauchte, um zu diagnostizieren, sobald ein lauffähiges Skript existierte.
Vor kurzem wurden einige der BokehJS-Code-Pfade "strenger" gemacht, was in fast jedem Fall gut ist, aber es scheint, dass dies eine schlechte Interaktion mit AjaxDataSource
hinterlassen hat, die nicht bemerkt wurde. FWIW wenn ich Beispiel führe sehe ich einen Fehler in der Browser JS Konsole:
Und das ist der Schlüssel zur Arbeitsumgebung, der nur sicherstellen soll, dass die Datenquelle (leere) Spalten für x
und y
:
Es gibt ein vollständiges Arbeitsskript unten. Ich würde darum bitten, dass Sie mit dieser Information ein Problem auf dem Bokeh Issue Tracker machen, damit dieser Bug priorisiert werden kann behoben
%Vor% Wie das OP wollte ich auch AJAX mit Bokeh und Flask benutzen. Anstatt jedoch die Daten kontinuierlich vom Server mit AjaxDataSource
zu streamen, wollte ich die neuen Daten nur dann vom Server abrufen, wenn der Benutzer mit den Eingaben auf der Webseite interagiert. Um dies zu erreichen, habe ich Bigreddots Antwort als Grundlage verwendet, AjaxDataSource
in ColumnDataSource
geändert und einen jQuery AJAX-Aufruf hinzugefügt in CustomJS
(das folgende Beispiel wurde mit Python 3.6.0, Flask 0.12.1 und Bokeh 0.12.5 erstellt):