Это не ответ ggplot, но если вы хотите объединить идеи сглаживания ядра и гистограмм, вы можете использовать метод начальной загрузки + сглаживания. Вы будете биться по голове и плечам статистиками за такие ужасные поступки, поэтому используйте на свой страх и риск;)
начнем с некоторых синтетических данных:
set.seed(1)
randomData <- c(rnorm(100, 5, 3), rnorm(100, 20, 3) )
hist(randomData, freq=FALSE)
lines(density(randomData), col="red")
Функция плотности имеет достаточно умный калькулятор пропускной способности, который можно позаимствовать у:
bw <- density(randomData)$bw
resample <- sample( randomData, 10000, replace=TRUE)
Затем используйте вычисление пропускной способности в качестве SD для создания случайного шума
noise <- rnorm(10000, 0, bw)
hist(resample + noise, freq=FALSE)
lines(density(randomData), col="red")
Эй, смотри! Ядро сглаживало гистограмму!
Я знаю, что этот длинный ответ на самом деле не является ответом на ваш вопрос, но, возможно, он даст некоторые творческие идеи о том, как злоупотреблять вашими данными.