ggplot2: Geom_Ribbon mit Alpha abhängig von der Datendichte entlang der y-Achse für jedes x

Gibt es in ggplot2 eine Möglichkeit, ein geom_ribbon (oder ein anderes flächenbasiertes Geom) mit einem variierenden Alpha zu erzeugen, das auf der Dichte der Punkte basiert?

Der folgende Code erzeugt 50 verrauschte Sinuswellen mit zufälligen x-Werten für jedes Sample. Ich möchte nicht jeden einzelnen Punkt zeichnen, da ich vielleicht tausend oder mehr Resamples haben möchte, also möchte ich all diese Punkte zusammenfassen.

Eine einfache Methode wäre, ein Geom_Ribbon zu zeichnen, das 95% der Quantile abdeckt. Zunächst ist dies jedoch nicht so einfach zu berechnen, da die x-Werte nicht für jedes Resample gleich sind. Normalerweise würden Sie die punktweisen Quantile an jedem der 100 x Punkte berechnen.

Instead Ich hätte gerne ein Farbband, das den gesamten Bereich abdeckt, in dem sich die Proben befinden, mit einem kontinuierlichen Alpha-Gradienten, d. H. Das Farbband wäre in der Mitte nahe der tatsächlichen Linie am dunkelsten und an den Ausreißerpunkten sehr hell. 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) 

Antworten auf die Frage(2)

Ihre Antwort auf die Frage