Grafico combinato in tempo reale JfreeChart - Rendi il valore precedente per un sottochart a fase se non è stato ricevuto alcun punto dati
-
18-09-2019 - |
Domanda
Ho un diagramma combinato in JFREECHART composto da 4 grafici con un asse di dominio temporale comune.
I dati per le sottotrame arrivano a tariffe diverse. Ad esempio, potrei ricevere un evento di cambio di prezzo ogni paio di milisecondi e una modifica della posizione ogni minuto. Attualmente sto rendendo queste serie con XyStePrender per produrre grafici.
Mi piacerebbe poter fare qualcosa del genere:
- Un prezzo viene ricevuto al tempo t ed è tracciato sul grafico
- Non sono stati ricevuti dati al momento t per il grafico delle posizioni e quindi supponiamo che il valore non sia cambiato e che il valore di posizione precedente è reso, cioè estendendo la linea di step orizzontale in orizzontale
- Al momento t+1 viene ricevuto un punto di posizione e viene tracciato modificando il grafico dei gradini
- Al momento T+1 non è stato ricevuto alcun prezzo e quindi il prezzo precedente viene tracciato
C'è un modo semplice per farlo in JfreeChart? Attualmente ho un'implementazione funzionante, ma questo non gestisce il rendering dei valori ipotizzati.
I miei pensieri iniziali sono stati in merito a cambiare il modello di dati in modo da poter trovare rapidamente il valore precedente e modificare le chiamate per dire a ciascuna sottotrama da disegnare quando viene ricevuto un evento per qualsiasi trama.
Soluzione
Penso che dovrai tamponare le modifiche in arrivo e applicare un set di regole per inoltrare le modifiche a JFreeChart (che non è davvero raccomandato per il lavoro in tempo reale a proposito, ma ho scoperto che per gli aggiornamenti a bassa frequenza funziona bene).
Immagino che tu abbia un set di dati per i prezzi e un set di dati per le posizioni. La tua posizione e gli aggiornamenti dei prezzi arrivano con un timestamp? In caso contrario, avrai il problema di riceverli in sequenza e provare a legarli (forse aggiornamenti che arrivano all'interno di una certa mappa di Timewindow allo stesso tempo?). Se hanno i timestamp, puoi derivare una nuova posizione (come la vecchia posizione) quando arriva il prezzo e quindi sostituirlo se necessario.
Vorrei disaccoppiarsi l'aggiornamento del grafico dalle aggiornamenti di posizione/prezzo qualunque cosa accada, nel caso in cui ti venga sommerso con variazioni di posizione/prezzo. Non vuoi che questo si traduca in più aggiornamenti del grafico che dovrai buttare via immediatamente.