2016-01-20 13 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.

Problemi correlati