Правка - добавлен точный теоретический ответ.
Вот способ использования dnorm
для построения точных нормальных кривых с этими характеристиками:
library(tidyverse); library(ggridges)
n = 100
df3 <- df %>%
mutate(low = caseMean - 3 * caseSD, high = caseMean + 3 * caseSD) %>%
uncount(n, .id = "row") %>%
mutate(x = (1 - row/n) * low + row/n * high,
norm = dnorm(x, caseMean, caseSD))
ggplot(df3, aes(x, case_number, height = norm)) +
geom_ridgeline(scale = 3)
Аналогично ответу Sada93 с использованием dplyr и tidyr:
library(tidyverse); library(ggridges)
n = 50000
df2 <- df %>%
uncount(n) %>%
mutate(value = rnorm(n(), caseMean, caseSD))
ggplot(df2, aes(x = value, y = case_number)) + geom_density_ridges()
пример данных:
df <- read.table(
header = T,
stringsAsFactors = F,
text = "case_number caseMean caseSD
case1 0 1
case2 1 2
case3 3 3")