Analisi grafica di dati - zoom dinamico ecc

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3788
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Analisi grafica di dati - zoom dinamico ecc

Messaggio da joe »

Devo analizzare dei dati di misure orarie su scala annua o per intervalli anche più lunghi.
C'è un valore misurato ogni ora, quindi ho a che fare con 24 valori al giorno per 365 giorni, che fanno circa 8760 valori all'anno.
insomma siamo sull'ordine dei 10'000 valori...

Sto analizzando questi valori misurati in modo da evidenziare eventuali dati mancanti (cioè misure non eseguite a causa di un malfunzionamento dello strumento o altro).
L'analisi grafica mi consente di avere un'idea qualitativa della possibilità di "correggere" questi dati mancanti (aggiungendo valori sensati secondo criteri "razionali", ad esempio in casi in cui i "buchi", siano sparsi ecc - oppure assegnando un valore numerico che indichi un errore e che porti l'elaborazione successiva a non considerare del tutto quei dati, nella pratica assegno un valore negativo alla misura mancante).

Per graficare i dati e averne un'anteprima sto usando uno script gnuplot.
Però mi è scomodo impostare lo zoom in modo preliminare e non poter vedere poi la parte fuori dal range stampato.
Mi servirebbe semplicemente poter impostare lo zoom in modo da avere nella larghezza del schermo i dati relativi tipo 5 giorni... Però al contempo poter effettuare lo scroll verso destra e analizzare tutto l'intervallo temporale (tipo 5 anni).
Insomma vorrei evitare di dover ogni volta modificare il range "x" nello script di plot.

Avreste qualche consiglio su come graficare quei dati in modo da analizzarli più comodamente?
Forse gnuplot non è lo strumento più adatto? Suggerimenti?

Grazie in anticipo! :)

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3788
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Analisi grafica di dati - zoom dinamico ecc

Messaggio da joe »

Ho preso spunto da questa domanda trovata su stackoverflow:
http://stackoverflow.com/questions/3675 ... croll-bars

Il problema che ponevo è lo stesso.
La soluzione proposta:
1- impostare come terminale in uscita un'immagine PNG molto larga
Nel mio caso ho messo:

Codice: Seleziona tutto

set terminal png size 60000,1000
set output 'plot.png'
In questo modo il plot produce una immagine png appunto e basta aprirla con un viewer che supporta lo scroll e lo zoom.
Banalmente ho provato ad aprirla col browser chromium. E lo scopo mi pare raggiunto.
Inoltre se devo modificare qualche cosa nello script di plot (etichette e roba simile ad esempio o aggiunta di altre serie di dati da graficare), poi dopo il re-plot, basta ricaricare banalmente l'immagine nella finestra del browser.
Insomma trovo che in questo modo l'analisi dei dati mancanti sia molto più agevole.

Lascio la discussione aperta a qualche vostro commento, non so, se volete riportare anche la vostra esperienza o qualche altra idea che vi viene in mente.
Dico la mia, in passato ho avuto a che fare con grafici contenenti parecchi dati. Avevamo scelto di importarli in excel e da li farci stampare poi i grafici in png. In due parole: "un macello". Principalmente per i tempi di creazione dei grafici assurdi (e ricordo che avevo fatto fare una prova anche ad un tale con un PC molto carrozzato e aveva riportato una grande difficoltà nella gestione della mole di dati da graficare).

Con gnuplot, mi pare tutto molto più automatizzabile. Una volta impostato lo script di plot gli si possono dare in pasto tutte le serie di dati che si vuole.
Anche gnuplot impiega qualche secondo per produrre il png. Ma poi "navigare" l'immagine dal browser è decisamente agevole, anche sul mio vecchio PC. Invece ricordo che con excel se si tentava anche solo di spostarsi a destra o a sinistra sul grafico, magari per aggiungere etichette o cose così, doveva ridisegnare tutti i punti e iniziava ad andare tutto a scatti...
Tempo fa dopo quell'esperienza avevo dovuto produrre altri grafici, parecchi, per diverse serie di dati. E forte dell'esperienza con excel avevo proposto di impiegare gnuplot. Inizialmente mi avevano guardato "un po' così". Poi quando mi ero presentato con uno script bash che creava le serie di dati da plottare, produceva lo script gnuplot e lo eseguiva sputando fuori, dopo qualche decina di secondi, TOT grafici (parliamo se non ricordo male di 12 grafici per una 20ina di serie di dati graficate). Ecco che non si era più considerato excel o simili. Devo ammettere che personalmente non conosco così a fondo quei software e probabilmente dispongono di possibilità che ignoro.

Come dicevo se volete aggiungere considerazioni, saranno sicuramente utili! :)

Avatar utente
lablinux
Linux 4.x
Linux 4.x
Messaggi: 1212
Iscritto il: gio 27 nov 2008, 12:23
Desktop: Gnome
Distribuzione: Debian testing
Località: Rho

Re: Analisi grafica di dati - zoom dinamico ecc

Messaggio da lablinux »

dal basso della mia ignoranza in materia, un grafico vettorale in svg?

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3788
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Analisi grafica di dati - zoom dinamico ecc

Messaggio da joe »

Intendi sempre utilizzando con gnuplot? O hai in mente altro?

OT.
Anche io non sono un grande esperto e sto andando per tentativi....
Tanto per dire, sto tentando di fare un istogramma di dati orari relativi a 2 stazioni di misura. I dati sono in un file del tipo seguente.

Codice: Seleziona tutto

2015/03/16 00:00     10
2015/03/16 01:00     25
2015/03/16 02:00     15

Codice: Seleziona tutto

2015/03/16 00:00     5
2015/03/16 01:00     30
2015/03/16 02:00     20
Quello che vorrei ottenere è un istogramma con un "rettangolo" per ogni ora (in questo caso avremmo 3 soli rettangoli...).
Mettiamo di colorare le due serie la prima in blu e la seconda in rosso.
Il primo rettangolo vorrei che avesse la parte bassa "rossa" fino al valore "5" e la parte alta da "5 a 10" colorata di "blu".
Un rettangolo del genere ci indica che la prima stazione di misura quella blu ha misurato 10. E che la seconda stazione quella rossa ha misurato 5.
Fin qui piuttosto banale.
Alla seconda ora però i ruoli si invertono: il valore misurato dalla stazione 1,blu è 25, stavolta inferiore al corrispondente della stazione 2,rossa che è invece 30.
Il rettangolo che vorrei vedere disegnato dovrebbe avere la parte bassa blu fino a 25, e da 25 a 30 dovrebbe essere rosso.
Questo ci dice che la stazione 1,blu nella seconda ora ha misurato 25, mentre la stazione 2,rossa ha misurato 30.

Invece gnuplot eseguendo un grafico "with boxes" (cioè con rettangoli, ovvero un istogramma) sovrappone completamente la stazione 1 alla stazione 2. Quindi i valori della 2 sono visibili solo quando sono superiori a quelli della stazione 1... cioè si vedono solo rettangoli blu dalla sommità dei quali, di tanto in tanto spunta il rettangolo rosso.

Da quanto ho provato sembra che sia il comando di plot a stabilire quale serie debba stare sempre in primo piano. In particolare, l'ultima serie aggiunta al grafico viene sovrapposta a tutte le altre, nascondendole quando riportano valori inferiori a questa.
Vi metto due versioni del grafico variando l'ordine del plot delle due serie:

Codice: Seleziona tutto

plot \
     'stazione1.dat' using 1:3 with boxes lc rgb '#0000aa' title 'stazione 1'  ,\
     'stazione2.dat' using 1:3 with boxes lc rgb '#aa0000' title 'stazione 2'  
Viene prodotto questo grafico: https://www.dropbox.com/s/a8n26f7bbw73yq0/plot2.png

Codice: Seleziona tutto

plot \
     'stazione2.dat' using 1:3 with boxes lc rgb '#aa0000' title 'stazione 2'  ,\ 
     'stazione1.dat' using 1:3 with boxes lc rgb '#0000aa' title 'stazione 1' 
Viene prodotto il seguente: https://www.dropbox.com/s/aux9cnbay7sgixz/plot.png

Avete idea di come mettere in primo piano sempre la serie con il valore più basso? In modo che no venga coperta e nascosta dall'altra?
Scusate l'OT...

Rispondi