2016-01-20 11 views
7

Próbuję wykreślić milion punktów danych w R. Aktualnie korzystam z ggplot2 (ale jestem otwarty na sugestie alternatywnych pakietów). Problem polega na tym, że renderowanie wykresu trwa zbyt długo (często w ciągu minuty). Szukam sposobów, aby to zrobić szybciej - w idealnym czasie. Byłbym wdzięczny za każdą pomoc - dołączając kod do pytania dla jasności.Efektywnie wykreślając miliony punktów danych w R

Tworzenie (losowo) ramki danych z ~ 500000 punktów danych:

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) 

Teraz wykreślania danych:

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

Jak zrobić rendering szybciej ?

+6

Pierwszą rzeczą, która przychodzi mi do głowy, jest wybranie podzbioru pełnych danych, które narysujesz. Mniejsza liczba punktów powinna prawdopodobnie oznaczać krótszy czas renderowania. Sztuką jest dowiedzieć się, jak próbować miliony punktów. –

+0

Dzięki Tim. Próbuję różnych metod próbkowania, ale czy poza tą trasą istnieje inny sposób? –

+0

Jedyne 2 rzeczy, które mogą być alternatywą, to jakoś poskromić 'ggplot' do renderowania szybciej, co wymagałoby ekspertyzy, której ja nie posiadam. Inną możliwością byłoby oczywiście uzyskanie szybszej maszyny, która prawdopodobnie nie jest opcją. –

Odpowiedz

1

Zasadniczo istnieją dwie strategie, które używam do tego:

1) Jak opisano w komentarzach, przy rozsądnym próbka opisowe Państwa danych nie ma żadnego wpływu na fabułę i można zmniejszyć liczbę punktów do renderowania.

2) Jedna sztuczka, której używam, polega na utworzeniu obiektu bez wyświetlania wykresu i zapisaniu wykresu na obrazie PNG. To naprawdę przyspiesza proces, ponieważ po otwarciu obrazu będzie to raczej raster niż obraz wektorowy.