2016-01-20 20 views
7

Ich versuche, einige Millionen Datenpunkte in R zu plotten. Ich verwende derzeit ggplot2 (aber ich bin offen für Vorschläge von alternativen Paketen). Das Problem ist, dass die Grafik zu lange dauert (oft über eine Minute). Ich suche nach Möglichkeiten, dies schneller zu machen - in Echtzeit im Idealfall. Ich würde jede Hilfe zu schätzen wissen - Code zur Klärung der Frage anfügen.Effizient plotten Millionen von Datenpunkten in R

Erstellen eines (random) Datenrahmen mit ~ 500000 Datenpunkte:

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) 

nun die Daten Plotten:

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

Wie kann ich die Wiedergabe schneller ?

+6

Die erste Sache, die mir in den Sinn kommt, würde eine Teilmenge der gesamten Daten nehmen, die Sie planen. Weniger Punkte sollten vermutlich schnellere Rendering-Zeiten bedeuten. Der Trick besteht darin, herauszufinden, wie man die Millionen von Punkten abtastet. –

+0

Danke Tim. Ich probiere verschiedene Stichprobenmethoden aus, aber abgesehen davon, dass ich diesen Weg hinunter gehe, gibt es einen anderen Weg? –

+0

Die einzigen zwei Dinge, die eine Alternative sein könnten, wären, ggplot irgendwie zu manipulieren, um schneller zu rendern, was eine Expertise erfordern würde, die ich nicht habe. Und die andere Möglichkeit wäre natürlich, eine schnellere Maschine zu bekommen, was wahrscheinlich keine Option ist. –

Antwort

1

Im Allgemeinen gibt es zwei Strategien, die ich für diesen Einsatz:

1) Wie in den Kommentaren beschrieben, eine angemessene beschreibende Probe Ihrer Daten nehmen nicht Ihre Handlung geht zu beeinflussen, und Sie werden die Anzahl reduzieren der zu rendernden Punkte.

2) Ein Trick, den ich benutze, besteht eigentlich darin, das Objekt ohne Anzeige des Plots zu erstellen und stattdessen das Plot in ein PNG-Bild zu speichern. Dies beschleunigt den Prozess um einiges, denn wenn Sie das Bild öffnen, wird es eher ein Raster als ein Vektorbild sein.