Как избежать плоской линии плотности в ggplot2 - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь построить линию плотности над 2 перекрывающимися гистограммами, но с каждым кодом, который я использую, линия становится «плоской».

Мне нужно создать две гистограммы, каждая с нормальным распределением, и разным количеством выборок. Затем я должен перекрыть оба и написать линию плотности. Все с пакетом ggplot2.

Это то, что я пробовал:

xx<-data.frame(dat = rnorm(n, mean, sd))
yy<-data.frame(dat = rnorm(n, mean, sd))
both<-rbind(xx, yy)

ggplot(both, aes(x=dat)) + 
    geom_histogram(data = xx, fill = "red", alpha = 0.2,binwidth=0.25) + 
    geom_histogram(data = yy, fill = "blue", alpha = 0.2, binwidth=0.25) +
    theme_light() +
    geom_line(data=samples, stat = "density")

Я тоже пробовал geom_density, но результат тот же ...

1 Ответ

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

Линия плотности не является плоской, она просто в совершенно ином масштабе по отношению к гистограммам, поскольку по умолчанию гистограмма создается с использованием отсчетов по оси Y.

Вы должны указать y = after_stat(density):

# packages
library(ggplot2)

# data
set.seed(1)
sample1 <- data.frame(dat = rnorm(10000, 0, 1))
sample2 <- data.frame(dat = rnorm(15000, 3, 1))
both <- rbind(sample1, sample2)

ggplot(both, aes(x = dat)) + 
  geom_histogram(aes(y = after_stat(density)), data = sample1, fill = "red", alpha = 0.2, binwidth = 0.25) + 
  geom_histogram(aes(y = after_stat(density)), data = sample2, fill = "blue", alpha = 0.2, binwidth=0.25) +
  theme_light() +
  geom_line(stat = "density")

Создано в 2020-04-30 пакетом Представить (v0.3.0)

Черная линия представляет собой смесь двух нормальных распределений. Вы должны прочитать страницу помощи функции after_stat для более подробной информации.

...