2012-02-17 11 views
8

È possibile creare grafici dinamici in Gnuplot? Quello che ho bisogno per i miei scopi è che, dato che i dati sono generati attraverso un ciclo, userò gnuplot per mettere qualche marker sull'asse x-y preservando quelli più vecchi. Quindi in qualche modo sarò in grado di osservare l'evoluzione dei dati invece di vedere solo il risultato finale del batch.Tracciamento dinamico in Gnuplot (drawnow in MATLAB)

Quello che voglio particolarmente è equivalente al comando "drawnow" in MATLAB.

Anche se non completamente correlato, in questo momento sto usando la lisp comune per generare i dati in un ciclo e cgn per tracciare in lisp usando gnuplot. (Posso tracciare i dati in forma batch all'interno del comune lisp usando cgn che utilizza gnuplot)

Grazie mille in anticipo per la vostra attenzione.

modifica: Ho scritto un codice in lisp comune a questo scopo. È possibile verificarlo qui:
Plotting data sequentially from emacs using Common Lisp and Gnuplot
Questo thread è tuttavia più generale e richiede il disegno dinamico in gnuplot. Qualsiasi suggerimento è benvenuto.

+0

Ho sempre utilizzato file-IO per comunicare da Lisp a MATLAB. Non ho mai ottenuto grandi funzionalità di visualizzazione fuori dalla lisp direttamente. Sarò interessato a vedere se qualcuno propone soluzioni migliori qui –

+0

@ claytonstanley, puoi controllare il link qui sopra. Mi piacerebbe anche vedere la tua implementazione di Lisp-MATLAB poiché fino a questa data ho sempre usato MATLAB per i miei scopi e se posso in qualche modo dare comandi a MATLAB da Lisp mi piacerebbe davvero vederlo. Puoi anche inviarmi un'e-mail se vuoi. Grazie mille in anticipo. – YBE

+0

Il tuo link sopra sembra un ottimo inizio. Molto più dinamico di qualsiasi tipo di file, l'IO può probabilmente prenderti. La soluzione file-IO che ho usato era solo generare i dati per tracciare in un file txt, e quindi sparare un file m per tracciare i dati in quel file. La strada che stai percorrendo con CGN sembra molto meglio; e mantiene tutto in comune; Non ho alcuna esperienza con cgn, quindi non posso aiutarvi. Se vuoi davvero usare Matlab per fare il plotting, una sorta di interfaccia più dinamica tra Lisp e Matlab è probabilmente la strada giusta da percorrere. Prese? So che il supporto li supporta bene; non sono sicuro su MLAB. –

risposta

0

Non sono sicuro di aver capito completamente cosa stai chiedendo, ma se stai cercando di aggiungere una trama all'ultima stringa che hai tracciato (e stai usando gnuplot 4.4), quanto segue fa il trucco:

gnuplot> plot sin(x),cos(x) #plot sin and cos in an xterm window 
gnuplot> eval GPVAL_LAST_PLOT."cos(x+pi/2.5)" #add cos(x+pi/2.5) to the current plot 

in ogni caso, non sono sicuro se è quello che stai chiedendo come io non uso Matlab, ma spero che sia.

1

Sfortunatamente non è semplice tracciare singoli punti in gnuplot, ma per fortuna ci sono alcuni semplici hack come discusso qui: Plotting a Single Point with Gnuplot. Il metodo echo discusso, tuttavia, funzionerà solo in un ambiente Unix.

L'utilizzo di questo con replot anziché il plot nel programma dovrebbe, si spera, fornire un grafico di punti che si evolvono con il tempo che conserva i punti precedenti.

Un altro modo, che è quello che uso con python, è che ho inserito i punti di dati in un file. In ogni iterazione, aggiungo punti al file quindi traccia di nuovo con gnuplot. È un po 'brutto, ma fa il lavoro nella maggior parte dei casi.

+0

questo è quello che sto facendo in questo momento. Usando una lisc comune, aggiungo un singolo punto a un file di testo, quindi lo tracciamo. Il problema è ovviamente quando il file di testo diventa più grande, il tempo di tracciare ogni volta che il passo diventa più lento. – YBE