2014-07-17 19 views
12

Ich möchte eine Live-Zeitreihe in Bokeh plotten. Ich möchte nur die neuen Datenpunkte bei jedem Update plotten. Wie kann ich das machen ?Zeitreihen streaming in bokeh

Es gibt ein Beispiel auf der Bokeh-Website für animierte Plots, aber jedes Mal wird das ganze Bild neu gezeichnet. Ich suche auch nach einem einfachen Beispiel, wo ich Punkt für Punkt eine Live-Handlung einer Zeitreihe machen kann.

+1

Können Sie den Unterschied etwas mehr beschreiben? Die Technik aus dem Beispiel besteht darin, die Daten in der Datenquelle zu aktualisieren, und dann wird das Diagramm automatisch aktualisiert. Viele Leute haben die Technik aus dem Beispiel verwendet, um Aktualisierungszeitreihen zu streamen. Ich bin mir nicht ganz sicher, was Sie anders machen wollen. Wenn Sie eine Zeitreihe aktualisieren möchten, können Sie am Ende der Daten neue Punkte hinzufügen. Wenn Sie ein festes Fenster wünschen, können Sie bei Bedarf auch Punkte des Anfangs löschen. Wenn Sie haufenweise Arrays verwenden, kann das Slicing dazu beitragen, dass dies einfacher oder effizienter wird. – bigreddot

+0

Alternativ, wenn Sie nach Unterstützung für Schadensregionen und partielle Neuzeichnungen fragen, gibt es derzeit nicht. Das Aktualisieren der Daten führt immer zu einem vollständigen Rendern. – bigreddot

+1

Ja ich spreche von partiellen Neuzeichnen wie die Blitz-Option in der animierten Funktion von Matplotlib – Maxi

Antwort

7

Ab Bokeh 0.11.1 gibt es jetzt eine Streaming-Schnittstelle zu Spaltendatenquellen in Bokeh-Server-Apps. Sie können sehen, und leicht ein Beispiel laufen hier:

https://github.com/bokeh/bokeh/tree/master/examples/app/ohlc

Das Beispiel eine Live-Aktualisierung OHLC-Chart mit MACD-Indikator zeigt (auf Basis synthetischer Tickdaten), die nur aktualisiert die Handlung mit den jüngsten Datenpunkte auf jeder aktualisieren.

Grundsätzlich besteht die Verwendung der Streaming-Schnittstelle aus zwei Teilen. Erstellen Sie zunächst ein neues dict mit dem gleichen „Form“ als Spaltendatenquelle:

new_data = dict(
    time=[t], 
    open=[open], 
    high=[high], 
    low=[low], 
    close=[close], 
    average=[average], 
    color=[color], 
) 

Dann ist dieser Pass in die .stream Methode, mit einem optionalen rollover Argument, wie groß der Puffer im Browser zu halten spezifiziert (früher Daten beginnen zu erhalten abgesetzt):

source.stream(new_data, 300) 

Dann, nur die kleine Menge von Daten in new_data Willbe auf das Grundstück geschickt, nicht alles.

+1

Lief das Beispiel und sah die OHLC Kerzen über das Diagramm strömen. Normalerweise wird sich der letzte OHLC-Candlestick am rechten Rand des Charts entwickeln, wenn neue Daten eintreffen. Ein neuer Candlestick entsteht bei Ablauf eines Zeitintervalls; sein O-Wert wird bei der Erstellung festgelegt, die HLC-Werte ändern sich, sobald neue Daten eintreffen. Die Kerze am rechten Rand muss mit den eingehenden Daten zappeln. Der Benutzer sollte das Zeitintervall mithilfe von interaktiven Steuerelementen angeben können. Jeder kann die Demo aktualisieren; mach es überzeugend und realistisch? – GoFaster

+0

Ich bin sicherlich keine erfahrene Finanzperson. Ich machte die Demo zu einer einfachen in sich geschlossenen Demonstration von '.stream', nicht zu einem echten Produktionsfinanzierungswerkzeug. Wenn jemand mit der richtigen Erfahrung die Demo verbessern oder verbessern möchte, wäre das sicherlich willkommen (in gewissem Umfang --- muss die Demo relativ einfach bleiben, um als * Demonstration eines bestimmten Themas * wirksam zu sein) Abgesehen davon ist die neue ".patch" -Methode auf CDS wahrscheinlich nützlich, um Teile der letzten Kerze "an Ort und Stelle" zu aktualisieren. – bigreddot

+0

Die Art, wie ich es sehe: 1) Geben Sie Benutzer interaktives Steuerelement, um Candlestick Zeitintervall angeben.2) Synthetisieren Sie einige hundert Balken Daten zu einem bestimmten Zeitintervall in Array (Verwenden Sie datetime; die x-Achse zeigt die letzten Daten und Zeiten). 3) Zeigen Sie die paar hundert Balken an. 4) Erzeugen synthetisierter Echtzeit-Aktualisierungen, manipuliere und visualisiere kontinuierlich die HLC-Werte der letzten Kerze auf dem Diagramm. 5) Nach Ablauf des angegebenen Zeitintervalls fügen Sie dem Diagramm eine weitere Kerze hinzu. 6) Mach weiter 7) Mach alles wieder, wenn der Benutzer das Intervall ändert. Die Frage ist; wie man das in Bokeh macht, was ruft wann an? – GoFaster