2016-01-20 5 views
7

Sto provando a tracciare alcuni milioni di punti dati in R. Attualmente sto usando ggplot2 (ma sono aperto a suggerimenti di pacchetti alternativi). Il problema è che il grafico impiega troppo tempo per il rendering (spesso verso l'alto di un minuto). Sto cercando modi per farlo più velocemente - in tempo reale idealmente. Gradirei qualsiasi aiuto - allegando il codice alla domanda per chiarezza.Creazione efficiente di milioni di punti dati in R

Creazione di un (casuale) frame di dati con ~ 500000 punti dati:

letters <- c("A", "B", "C", "D", "E", "F", "G") 
myLetters <- sample(x = letters, size = 100000, replace = T) 
direction <- c("x", "y", "z") 
factor1 <- sample(x = direction, size = 100000, replace = T) 
factor2 <- runif(100000, 0, 20) 
factor3 <- runif(100000, 0, 100) 
decile <- sample(x = 1:10, size = 100000, replace = T) 


new.plot.df <- data.frame(letters = myLetters, factor1 = factor1, factor2 = factor2, 
         factor3 = factor3, decile = decile) 

Ora, tracciando i dati:

color.plot <- ggplot(new.plot.df, aes(x = factor3, y = factor2, color = factor1)) + 
geom_point(aes(alpha = factor2)) + 
facet_grid(decile ~ letters) 

enter image description here

Come faccio a fare il rendering più veloce ?

+6

La prima cosa che mi viene in mente sarebbe prendere un sottoinsieme dei dati completi che stai tracciando. Meno punti dovrebbero presumibilmente significare tempi di rendering più veloci. Il trucco è capire come campionare i milioni di punti. –

+0

Grazie Tim. Sto provando diversi metodi di campionamento, ma oltre a percorrere questa strada, c'è un altro modo? –

+0

Le uniche 2 cose che potrebbero essere un'alternativa sarebbe quella di manipolare in qualche modo 'ggplot' per renderlo più veloce, il che richiederebbe competenze che non ho. E l'altra possibilità sarebbe ovviamente quella di ottenere una macchina più veloce, che probabilmente non è un'opzione. –

risposta

1

In generale ci sono due strategie che uso per questo:

1) Come descritto nei commenti, prelievo di un campione descrittiva ragionevole dei dati non ha intenzione di influenzare la trama e si ridurrà il numero di punti da rendere.

2) Un trucco che uso è in realtà per creare l'oggetto senza visualizzare la trama e salvare invece la trama in un'immagine PNG. Questo in realtà accelera il processo di molto perché, quando apri l'immagine, si tratta di un'immagine raster piuttosto che di un'immagine vettoriale.