ggplot несколько плотностей с общей плотностью

Я хотел бы построить что-то, что находится «между» гистограммой и графиком плотности. Вот пример:

library(ggplot2)

set.seed(1)
f1 <- rep(1, 100)
v1 <- rnorm(100)
df1 <- data.frame(f1, v1)

f1 <- rep(2, 10)
v1 <- (rnorm(10)+1*2)
df2 <- data.frame(f1, v1)

df <- rbind(df1, df2)
df$f1 <- as.factor(df$f1)

ggplot(df, aes(x = v1, colour = f1)) +
  geom_density(position="identity", alpha = 0.6, fill = NA, size = 1)

Вы увидите, что площадь под каждой кривой равна 1,0, что нормально для плотности. НО обратите внимание, что второе распределение состоит всего из 10 наблюдений, а не из 100 первых. Я хотел бы, чтобы область под кривой 2 отражала это, например. составляет десятую часть кривой 1. Спасибо.

Два перекрывающихся графика плотности оцениваются по разным размерам выборки


person Stephen Clark    schedule 08.04.2020    source источник


Ответы (1)


Существует вычисляемая переменная для stat_density, которую вы можете использовать, называемая count.

ggplot(df, aes(x = v1, colour = f1)) +
  geom_density(position="identity", alpha = 0.6, fill = NA, size = 1,
               aes(y = after_stat(count)))

введите здесь описание изображения

  • Примечание для ggplot2 ‹3.3.0 используйте stat(count) вместо after_stat(count).

Вы можете найти эти приемы в документации ?geom_density() в разделе "Вычисляемые переменные".

person teunbrand    schedule 08.04.2020