Наложение гистограммы с кривой плотности
Я пытаюсь составить гистограмму значений плотности и наложить ее на кривую функции плотности (а не на оценку плотности).
Используя простой стандартный нормальный пример, вот некоторые данные:
x <- rnorm(1000)
я могу сделать:
q <- qplot( x, geom="histogram")
q + stat_function( fun = dnorm )
но это дает масштаб гистограммы в частотах, а не плотности. с помощью ..density..
я могу получить правильный масштаб на гистограмме:
q <- qplot( x,..density.., geom="histogram")
q
Но теперь это дает ошибку:
q + stat_function( fun = dnorm )
Есть что-то, чего я не вижу?
Другой вопрос, есть ли способ построить кривую функции, например, curve()
, но не в виде слоя?
Ответы
Ответ 1
Здесь вы идете!
# create some data to work with
x = rnorm(1000);
# overlay histogram, empirical density and normal density
p0 = qplot(x, geom = 'blank') +
geom_line(aes(y = ..density.., colour = 'Empirical'), stat = 'density') +
stat_function(fun = dnorm, aes(colour = 'Normal')) +
geom_histogram(aes(y = ..density..), alpha = 0.4) +
scale_colour_manual(name = 'Density', values = c('red', 'blue')) +
theme(legend.position = c(0.85, 0.85))
print(p0)
Ответ 2
Более простая альтернатива ответу Рамната, передавая наблюдаемое среднее и стандартное отклонение и используя ggplot
вместо qplot
:
df <- data.frame(x = rnorm(1000, 2, 2))
# overlay histogram and normal density
ggplot(df, aes(x)) +
geom_histogram(aes(y = stat(density))) +
stat_function(
fun = dnorm,
args = list(mean = mean(df$x), sd = sd(df$x)),
lwd = 2,
col = 'red'
)
![enter image description here]()
Ответ 3
Как насчет использования geom_density()
из ggplot2
? Вот так:
df <- data.frame(x = rnorm(1000, 2, 2))
ggplot(df, aes(x)) + geom_histogram(aes(y=..density..)) + geom_density(col = "red")