ggplot несколько плотностей с общей плотностью - PullRequest
0 голосов
/ 08 апреля 2020

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

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. Спасибо.

Two overlapping density plots estimated form differnt sample sizes

1 Ответ

1 голос
/ 08 апреля 2020

Существует вычисляемая переменная для 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)))

enter image description here

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

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

...