Ich brauche mal wieder eure Hilfe mit einem zweidimensionalen Datensatz, den ich gerne mit ggplot2 als Streudiagramm darstellen würde. Ein Großteil der Datenpunkte konzentriert sich auf wenige Bereiche, sodass da viele Punkte ununterscheidbar aufeinander liegen. Deswegen nutze ich als Hauptebene stat_density2d(), möchte aber eine zusätzliche Ebene mit geom_point() nutzen, um Streuung in Bereiche geringer Dichte zeigen zu können.
Nachfolgendes Minimalbeispiel ist dazu schon ganz passabel geeignet, aber durch die zufällige Auswahl der für geom_point() dargestellten Punkte ziehe ich mit sample() natürlich auch viele Punkte, die sowieso von dem geom_polygon() layer verdeckt werden. Wenn man ein pdf anstatt eines png/jpgs erzeugt wird jeder Punkt trotzdem gezeichnet, auch wenn er später nicht sichtbar ist und eine Figure wird direkt mehrere Megabyte groß...
Code: Alles auswählen
library("ggplot2")
plotdata <- data.frame(x = rnorm(1e4, mean = 10, sd = 3),
y = rnorm(1e4, mean = 8, sd = 7))
theplot <- ggplot(plotdata, aes(x = x, y = y)) + theme_bw() +
geom_point(
color = "#000000",
alpha = 1,
size = 0.1,
data = plotdata[sample(c(1:dim(plotdata)[1]), 1e3, replace =
FALSE),]
) +
stat_density2d(aes(fill = ..level.., alpha = ..level..),
geom = "polygon",
bins = 10)
theplot
Dann könnte ich an geom_point() nämlich nur ein subset der Punkte übergeben, die beispielsweise den level <= 0.002 hätten...
Code: Alles auswählen
#geht so leider nicht...
geom_point(
color = "#000000",
alpha = 1,
size = 0.1,
data = plotdata[theplot[["data"]][,"level"]<= 0.002,]
)
Matthias