ggplot2: geom_ribbon com alfa dependente da densidade de dados ao longo do eixo y para cada x

Existe uma maneira no ggplot2 de produzir um geom_ribbon (ou outro geom baseado em área) com um alfa variável com base na densidade de pontos?

O código a seguir produz 50 ondas senoidais ruidosas, com valores x aleatórios para cada amostra. Não quero desenhar todos os pontos, pois posso querer mil ou mais reamostragens, então gostaria de resumir todos esses pontos.

Um método simples seria desenhar um geom_ribbon cobrindo 95% de quantis. No entanto, em primeiro lugar, isso não é fácil de calcular, pois os valores x não são os mesmos para cada nova amostra; normalmente você calcularia os quantis pontuais em cada um dos 100 x pontos.

Em vez disso, gostaria de ter uma fita cobrindo toda a área em que as amostras estão localizadas, com um gradiente alfa contínuo, ou seja, a fita seria mais escura no meio, perto da linha real, e muito clara nos pontos extremos. Isso é possível no ggplot2?

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) 

questionAnswers(1)

yourAnswerToTheQuestion