2014-07-17 2 views
12

Voglio plottare una serie storica in tempo reale in bokeh. Voglio tracciare solo i nuovi punti dati ad ogni aggiornamento. Come posso fare questo ?Timeseries streaming in bokeh

C'è un esempio sul sito web di bokeh per i grafici animati ma comporta il ridisegnare l'intera immagine ogni volta. Inoltre sto cercando un semplice esempio in cui posso fare un diagramma in diretta di una serie temporale punto per punto.

+1

Puoi descrivere la differenza che vuoi un po 'di più? La tecnica dell'esempio è di aggiornare i dati nell'origine dati, quindi la trama viene aggiornata automaticamente. Molte persone hanno utilizzato la tecnica dell'esempio per l'aggiornamento delle serie temporali, non sono abbastanza sicuro di cosa vuoi fare in modo diverso? Se si desidera aggiornare una serie temporale, è possibile aggiungere nuovi punti alla fine dei dati. Se si desidera una finestra fissa, è anche possibile eliminare i punti iniziali quando necessario. Se usi gli array numpy, il taglio potrebbe contribuire a rendere questo più semplice o più efficiente. – bigreddot

+0

In alternativa, se stai chiedendo supporto per aree danneggiate e ridisegni parziali, non c'è attualmente. L'aggiornamento dei dati causa sempre un re-rendering completo. – bigreddot

+1

Sì, sto parlando del ridisegno parziale come l'opzione blitz nella funzione di animazione di matplotlib – Maxi

risposta

7

A partire da Bokeh 0.11.1 è ora disponibile un'interfaccia di streaming per la colonna delle origini dati nelle app del server Bokeh. È possibile visualizzare ed eseguire facilmente un esempio qui:

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

Questo esempio mostra un grafico in diretta OHLC aggiornamento con indicatore MACD (sulla base dei dati tick sintetiche) che aggiorna solo la trama con i più recenti punti di dati su ogni aggiornare.

In pratica, l'utilizzo dell'interfaccia di streaming è costituito da due parti. In primo luogo creare un nuovo dict con la stessa "forma" come origine di dati della colonna:

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

quindi passare questo al metodo .stream, con una rollover argomento opzionale che specifica quanto grande di un buffer per mantenere nel browser (in precedenza dati comincia a diventare lasciati):

source.stream(new_data, 300) 

Poi, proprio la piccola quantità di dati in new_data willbe inviato alla trama, non tutto.

+1

Ha eseguito l'esempio e ha visto le candele OHLC scorrere attraverso il grafico. Normalmente il candelabro OHLC finale all'estrema destra del grafico si "svilupperà" quando arrivano nuovi dati. Un nuovo candelabro si forma al trascorrere di un intervallo di tempo; il suo valore "O" è fissato alla creazione, i valori "HLC" cambieranno quando arrivano nuovi dati. Candela all'estrema destra deve agitarsi su e giù con i dati in arrivo. L'utente dovrebbe essere in grado di specificare l'intervallo di tempo utilizzando i controlli interattivi. Chiunque sia in grado di aggiornare la demo; renderlo convincente e realistico? – GoFaster

+0

Non sono certamente un esperto di finanza. Ho fatto la dimostrazione per essere una semplice dimostrazione autonoma di '.stream', non per essere uno strumento di finanza produttiva reale. Se qualcuno con la giusta esperienza vorrebbe migliorare o migliorare la demo, sarebbe certamente gradito (in una misura --- la demo deve rimanere relativamente semplice, per essere efficace come * dimostrazione di un particolare argomento *) Come a parte il nuovo metodo '.patch' su CDS è probabilmente utile per aggiornare parti dell'ultima candela" sul posto ". – bigreddot

+0

Il modo in cui lo vedo: 1) Dare all'utente il controllo interattivo per specificare l'intervallo di tempo della candela.2) Sintetizzare alcune centinaia di barre di dati in array a intervalli di tempo specificati (utilizzare datetime, asse x mostra date e ore recenti). 3) Visualizza le poche centinaia di barre. 4) Generare aggiornamenti sintetici in tempo reale, manipolare e visualizzare continuamente i valori HLC dell'ultima candela sul grafico. 5) Al passaggio dell'intervallo di tempo specificato aggiungi un'altra candela al grafico. 6) Continua 7) Ripeti tutto quando l'utente cambia intervallo. La domanda è; come fare questo lavoro in Bokeh, cosa chiama e quando? – GoFaster