Ich versuche Bokeh zu verwenden, um ein Streaming-Dataset innerhalb einer Jupyter notebook zu plotten. Hier ist was ich bisher habe.Wie streamen Daten zu einem Bokeh-Plot in Jupyter mit einer hohen Bildwiederholfrequenz?
in der Befehlszeile Ich starte den Bokeh-Server durch den
Hier ist der Code von meinem Jupyter Notebook
import numpy as np
from IPython.display import clear_output
# ------------------- new cell ---------------------#
from bokeh.models.sources import ColumnDataSource
from bokeh.client import push_session
from bokeh.driving import linear
from bokeh.plotting import figure
from bokeh.io import curdoc, output_notebook, show
# ------------------- new cell ---------------------#
output_notebook()
# ------------------- new cell ---------------------#
my_figure = figure(plot_width=800, plot_height=400)
test_data = ColumnDataSource(data=dict(x=[0], y=[0]))
linea = my_figure.line("x", "y", source=test_data)
# ------------------- new cell ---------------------#
new_data=dict(x=[0], y=[0])
x = []
y = []
step_size = 0.1 # increment for increasing step
@linear(m=step_size, b=0)
def update(step):
x.append(step)
y.append(np.random.rand())
new_data['x'] = x
new_data['y'] = y
test_data.stream(new_data, 10)
clear_output()
show(my_figure)
if step > 10:
session.close()
# ------------------- new cell ---------------------#
# open a session to keep our local document in sync with server
session = push_session(curdoc())
period = 100 # in ms
curdoc().add_periodic_callback(update, period)
session.show() # open a new browser tab with the updating plot
session.loop_until_closed()
Derzeit
$> bokeh server
Befehl ausgeführt wird, das Ergebnis, das ich bekomme, ist ein blinkendes Grundstück in das Jupyter-Notebook und auch ein schön aktualisierendes Plot in einem neuen Browser-Tab. Ich möchte eine der folgenden
- einem schön Aktualisierung Grundstück in Jupyter, ohne zu blinken
- nur dem Grundstück in der neuen Browser-Tab
Ich habe versucht, das Entfernen show(my_figure)
aber jedes Update eröffnet eine neue Tab. Ich habe auch versucht, die Bildwiederholfrequenz auf 10 ms zu reduzieren, period = 10
; session.show()
funktioniert gut, aber das Notebook stürzt schließlich ab, weil es nicht so schnell auffrischen kann.
Wie bekomme ich eine gute Bildwiederholfrequenz des Bokeh Plot in Jupyter? Oder wie schalte ich das Jupyter-Plot aus und habe nur einen Tab, der das Update-Plot anzeigt? Hier
Für meinen (langsamen) Windows Computer ist das 'show (my_figure)' Diagramm noch schiefer .. Selbst bei eher langsamen Bildwiederholraten (500ms +) wird es nicht korrekt aktualisiert .. Ich muss gehen/zurück zum Registerkarte, um die X-Achse zu aktualisieren, verschwinden Punkte aus der Handlung. (Thx für das Downvote früher, bitte bedenken Sie, dass neue Benutzer NICHT empfehlen können!) –
Auf einem MacBook Pro bekomme ich ein ähnliches Verhalten wie oben beschrieben, obwohl die Plot in Jupyter mit der 100 ms Bildwiederholfrequenz nicht schnell genug wiedergeben kann, Keine Linie ist sichtbar. Nachdem der Zeitraum auf 500 eingestellt wurde, würde das Jupyter-Plot auftauchen, einfach jedes Mal hochscrollen, wenn es aktualisiert wurde, was es schwierig macht, es zu sehen. –
Eine Anmerkung von @bigreddot: Die Antworten sind entweder 'push_notebook oder, mit 0.12.5, [bokeh server app in notebook eingebettet] (https: // github.com/bokeh/bokeh/blob/master/beispiele/howto/server_embed/notebook_embed.ipynb). Sie erstellen oder präsentieren derzeit jede Handlung in ihrer Gesamtheit, was zu schlechten Ergebnissen führt. Mit 'bokeh.client' wird außerdem der Netzwerkverkehr verdoppelt. –