Я ищу наиболее элегантный способ наложить совпадения нормального распределения на сгруппированные гистограммы в ggplot2
. Я знаю, что этот вопрос задавался много раз раньше, но ни один из предложенных вариантов, например этот или этот мне показался очень элегантным, по крайней мере, если только stat_function
нельзя заставить работать с каждым конкретным подразделом данных.
Один относительно элегантный способ наложить соответствие нормального распределения на несгруппированную гистограмму, с которым я столкнулся, заключался в использовании geom_smooth
и method="nls"
(помимо того факта, что это не самозапускающаяся функция и что необходимо указать начальные значения):
library(ggplot2)
myhist = data.frame(size = 10:27, counts = c(1L, 3L, 5L, 6L, 9L, 14L, 13L, 23L, 31L, 40L, 42L, 22L, 14L, 7L, 4L, 2L, 2L, 1L) )
ggplot(data=myhist, aes(x=size, y=counts)) + geom_point() +
geom_smooth(method="nls", formula = y ~ N * dnorm(x, m, s), se=F,
start=list(m=20, s=5, N=300))
Однако мне было интересно, можно ли использовать этот подход для добавления подходов нормального распределения к сгруппированным гистограммам, как в
library(devtools)
install_github("tomwenseleers/easyGgplot2",type="source")
library("easyGgplot2") # load weight data
ggplot(weight,aes(x = weight)) +
+ geom_histogram(aes(y = ..count.., colour=sex, fill=sex),alpha=0.5,position="identity")
Мне также было интересно, есть ли какие-нибудь пакеты, которые могут случайно определить + stat_distrfit()
или + stat_normfit(
) для ggplot2
(с возможностью группировки)? (На самом деле я ничего не мог найти, но это могло показаться достаточно распространенной задачей, поэтому мне просто было интересно)
Причина, по которой я хочу, чтобы код был как можно короче, заключается в том, что это для курса, и что я хочу, чтобы все было как можно проще ...
PS geom_density
не подходит для моей цели, и я также хотел бы построить график количества / частоты в противоположность плотности. Я также хотел бы, чтобы они были на одной панели и не использовали facet_wrap