2012-06-08 2 views
18

Sto utilizzando plot() per oltre 1 mln di punti dati e risulta molto lento.Velocizza la funzione plot() per set di dati di grandi dimensioni

C'è un modo per migliorare la velocità compresa la programmazione e le soluzioni hardware (più RAM, scheda grafica ...)?

Dove vengono memorizzati i dati per il grafico?

+4

Riassumere i dati e tracciare invece il riepilogo. – Andrie

+0

Ho bisogno di tracciare e osservare i dati in modo intuitivo – SilverSpoon

+0

Puoi fornire maggiori informazioni su quali funzioni di stampa stai usando? Fa una grande differenza se stai usando la grafica di base, lattice o ggplot. – Andrie

risposta

23

Una trama hexbin in realtà si mostra qualcosa (a differenza del grafico a dispersione @Roland propone nei commenti, che rischia di essere solo un gigante, lento, blob) e impiega circa 3,5 secondi sulla mia macchina per il tuo esempio:

set.seed(101) 
a<-rnorm(1E7,1,1) 
b<-rnorm(1E7,1,1) 
library(hexbin) 
system.time(plot(hexbin(a,b))) 

enter image description here

+2

Questo è un punto importante: nessuno può assorbire il significato di milioni, o anche migliaia di punti (tranne forse alcuni di quei grafici frattali "artistici" :-)), quindi trova un modo per raggruppare o altrimenti ridurre la grandezza degli oggetti a tracciare. –

+1

Non conoscevo questo pacchetto e la tua risposta è utile per un problema specifico di presentazione dei risultati in un documento che sto preparando. +1 per quello. Tuttavia, la domanda rimane: che cosa è limitante durante la stampa? È solo il potere della CPU o qualcos'altro? – Roland

+2

I driver di periferica non gestiscono molto bene un compito di tracciatura così grande. C'è un sacco di spese generali per tracciare un singolo punto. Non si tratta solo di due numeri, ma è necessario prendere in considerazione le funzionalità di colorazione e trasparenza. Non è solo R. I visualizzatori di PDF si impantaneranno considerevolmente quando viene data un'immagine con milioni di punti da rappresentare. –

2

hai guardato il pacchetto tabplot. è stato progettato specificamente per i dati di grandi dimensioni http://cran.r-project.org/web/packages/tabplot/ Io uso che i suoi più veloce rispetto all'utilizzo hexbin (o anche il girasole predefinita appezzamenti in overplotting)

Inoltre penso Hadley ha scritto qualcosa sul blog modificando ggplot 's DS per i grandi dati a http://blog.revolutionanalytics.com/2011/10/ggplot2-for-big-data.html

"" "sono attualmente lavorando con un altro studente, Yue Hu, di trasformare la nostra ricerca in un pacchetto R robusto." "" 21 ottobre, 2011

Forse possiamo chiedere Hadley se il ggplot3 aggiornato è pronto

8

un modo facile e veloce è quello di imposta pch='.'. La performance è mostrata sotto

x=rnorm(10^6) 
> system.time(plot(x)) 
    user system elapsed 
    2.87 15.32 18.74 
> system.time(plot(x,pch=20)) 
    user system elapsed 
    3.59 22.20 26.16 
> system.time(plot(x,pch='.')) 
    user system elapsed 
    1.78 2.26 4.06