2013-10-03 7 views
8

Ho una serie storica lunga di 10000 osservazioni che voglio visualizzare. Il problema è che, se lo ordino normalmente, la dimensione temporale sarà schiacciata e nessuno dei minimi dettagli delle serie temporali che voglio visualizzare sarà evidente. Per esempio:Come fare una trama ridicolmente ampia

plot((sin(1:10000/100)+rnorm(10000)/5),type='l') 

Quello che vorrei è quello di tracciare in qualche modo il seguente insieme fianco a fianco in una trama enormemente lungo senza utilizzare il par (mfrow = c (1.100)). Poi voglio esportare questa trama molto ampia e scorrere semplicemente per visualizzare l'intera serie.

plot((sin(1:10000/100)+rnorm(10000)/5)[1:100],type='l') 
plot((sin(1:10000/100)+rnorm(10000)/5)[101:200],type='l') 
plot((sin(1:10000/100)+rnorm(10000)/5)[201:300],type='l') 
..... 

Alla fine mi piacerebbe avere 3 o 4 di queste enormemente ampi appezzamenti uno sopra l'altro con un par(mfrow=c(4,1)).

So che la risposta ha qualcosa a che fare con l'impostazione pin in par, ma continuo a ricevere Error in plot.new() : plot region too large. Sto indovinando questo ha qualcosa a che fare con l'interazione di pin con gli altri parametri par

punti bonus sono assegnati se siamo in grado di ottenere l'altezza e la larghezza dei pixel esattamente a destra. È preferibile che il grafico non salti i pixel casuali poiché il dimensionamento delle esportazioni è imperfetto.

Ulteriori punti bonus se l'immagine può essere codificato in un .html. e visualizzato in questo modo

+0

Dipende da come lo stai scrivendo. È in un PDF? –

+0

@DavidRobinson Qualsiasi file immagine. png, eps, ..., con una forte preferenza per le piccole dimensioni sul disco. png sarebbe carino Qualcosa che può essere codificato in html sarebbe anche bello (ad esempio png can). – user2763361

+1

Fa semplicemente 'png (larghezza = 10000, altezza = 10000); par (mfrow = ....); tracciare(...); dev.off(); 'o qualcosa di simile non ti dà abbastanza spazio per adattarsi alle trame veramente ampie? – thelatemail

risposta

8

Un'alternativa che potreste considerare è svg, che produrrà comunque qualcosa di migliore di png/jpeg.

Qualcosa di simile

svg(width = 2000, height = 7) 
par(mfrow=c(4,1), mar = c(4, 4, 0, 2)) 
for (i in 1:4){ 
    plot((sin(1:10000/100)+rnorm(10000)/5),type='l', 
     bty = "l", xaxs = "i") 
} 
dev.off() 

produrrà una trama molto larga, poco più di 1 MB di dimensione, che rende molto bene in Chrome.

Nota la larghezza e l'altezza sono in pollici qui.

P.S. svg offre anche il potenziale per la grafica interattiva. Appena visto un bell'esempio che consente all'utente di selezionare una regione di una lunga serie temporale per ingrandirla, vedere la Figura 22 in Dynamic and Interactive R Graphics for the Web: The gridSVG Package, una bozza di carta di Paul Murrell e Simon Potter.

+0

Sai come misurare il numero di pixel che è largo – user2763361

+1

svg è un formato vettoriale, quindi penso che la risposta alla tua domanda sia arbitraria. –

+0

Se apri il file svg generato in un editor di testo, vedrai le dimensioni specificate come 'width =" 144000pt "height =" 504pt "', quindi 72 punti per pollice. Ho provato a modificarlo in 'width =" 144000px "height =" 504px "' che sembrava funzionare bene, ma non so se questa è una buona idea! –

4

Potrebbe trattarsi di un problema specifico Cairo, o potrebbe essere una mancanza di RAM sul computer. Il seguente codice funziona bene per me su un computer Windows 7 con 8 GB di RAM.

png("wide.png", width = 1e5, height = 500) 
plot((sin(1:10000/100)+rnorm(10000)/5),type='l') 
dev.off() 

Se cambio la larghezza a 1e6 pixel, quindi R crea correttamente il file (ci sono voluti circa un minuto), ma nessun software di visualizzazione delle immagini che ho a disposizione in grado di visualizzare un'immagine che di grandi dimensioni.

+1

Cairo limita la larghezza/altezza a 32767 pixel. Una larghezza di 1e4 dovrebbe andare bene per tracciare i punti dati 1e4, e contribuirà a mantenere le dimensioni del file verso il basso. –

+1

Probabilmente sto cercando circa 150.000 pixel ma ottengo questo errore: '> dev.off() La dimensione massima dell'immagine supportata è 65500 pixel *** glibc rilevato ***/usr/lib64/R/bin/exec/R: double free or corruption (! Prev): 0x000000000278f950 *** 'Quindi scaricherà tutto questo materiale" backtrace ". – user2763361

+0

Si prega di aggiungere il codice esatto che si sta utilizzando per creare il file di trama alla domanda, insieme al proprio sistema operativo e alla versione di R in esecuzione. –

1

Vorrei andare su un altro percorso alternativo. Prima di tutto, qual è esattamente il punto di vista dell'intera trama ad alta risoluzione? Se stai cercando qualche tipo di anomalia o irregolarità, beh, questo è l'elaborazione dei dati per :-). Pensa a qualcosa come trovare tutto il x > 3sigma, o fare un FFT, ecc.

successivo, se si vuole veramente per esaminare il tutto ad occhio, che ne dite di scrivere del codice R-tcltk o utilizzando dynamicGraph o iplots o zoom per produrre un grafico interattivo che è possibile scorrere attraverso "dal vivo".

ETA: IIRC RStudio dispone di strumenti per lo scorrimento del grafico interattivo e lo zoom.

+0

@ user2763361 Il pacchetto 'zoom' funziona bene con i grafici' plot' di base. Ti consente di modificare le scale X e Y (sia la portata che la risoluzione) in modo interattivo. Credo che anche "iplot" facciano altrettanto. –

+0

La visione dell'intera faccenda è importante per me. Devo vedere l'evoluzione precisa delle serie temporali per ogni singolo punto di dati. Potresti dare qualche esempio su cosa hai raccomandato? Anche io voglio metterlo in un rapporto 'html' o qualcosa che non è condizionale per avere R aperto al momento. – user2763361

Problemi correlati