Gibt es eine Möglichkeit in ggplot2 ein geom_ribbon (oder ein anderes flächenbasiertes Geom) mit einem variierenden Alpha basierend auf der Punktdichte zu erzeugen?ggplot2: geom_ribbon mit Alpha abhängig von der Datendichte entlang der y-Achse für jedes x
Der folgende Code erzeugt 50 verrauschte Sinuswellen mit zufälligen x-Werten für jede Probe. Ich möchte nicht jeden einzelnen Punkt zeichnen, weil ich vielleicht tausend oder mehr Resamples möchte, also möchte ich all diese Punkte zusammenfassen.
Eine einfache Methode wäre, einen geom_ribbon zu zeichnen, der 95% Quantile abdeckt. Dies ist jedoch zunächst nicht so einfach zu berechnen, da die x-Werte nicht für jede Resample gleich sind; normalerweise würden Sie die punktweisen Quantile an jedem der 100 x Punkte berechnen.
Stattdessen würde ich gerne ein Band haben, das den gesamten Bereich der Proben mit einem kontinuierlichen Alpha-Gradienten abdeckt, d. H. Das Band wäre am dunkelsten in der Mitte nahe der tatsächlichen Linie und sehr hell an den Ausreißern. Ist das in ggplot2 möglich?
library(ggplot2)
num_points = 100
num_samples = 50
x = seq(0, 4*pi, length.out=num_points)
sim <- lapply(1:num_samples, function(f) {
x = runif(num_points, 0, 4*pi)
y = sin(x) + rnorm(num_points, 0, 0.4)
data.frame(x=x, y=y)
})
sim.df <- do.call(rbind, sim)
actual = data.frame(x=x, y=sin(x))
ggplot(sim.df, aes(x=x, y=y)) +
geom_point(alpha=0.7) +
geom_line(data=actual, colour='blue', size=1.5)
Perfekt, danke. Nur eine Anmerkung für diejenigen, die größere Datenmengen verwenden, müssen Sie Alpha = sort (group) im geom_ribbon-Aufruf festlegen, da andernfalls angenommen wird, dass Gruppe 59 das nächste Quantil von 591 ist. –