【发布时间】:2022-01-18 00:32:12
【问题描述】:
我正在尝试查看某个变量的频率分布。由于数据量很大,我为一系列值创建了 bin,并绘制了每个 bin 的计数。我希望能够覆盖线,这些线既代表了我的数据看到的经验分布,也代表了理论上的正态分布。我可以通过执行以下操作来完成此操作,而无需预先分箱我的数据或使用 ggplot2:
df <- ggplot2::diamonds
hist(df$price,freq = FALSE)
lines(density(df$price),lwd=3,col="blue")
或者像这样使用ggplot2:
mean_price <- mean(df$price)
sd_price <- sd(df$price)
ggplot(df, aes(x = price)) +
geom_histogram(aes(y = ..density..),
bins = 40, colour = "black", fill = "white") +
geom_line(aes(y = ..density.., color = 'Empirical'), stat = 'density') +
stat_function(fun = dnorm, aes(color = 'Normal'),
args = list(mean = mean_price, sd = sd_price)) +
scale_colour_manual(name = "Colors", values = c("red", "blue"))
但我不知道如何在我的预分箱数据上叠加类似的线条:
breaks <- seq(from=min(df$price),to=max(df$price),length.out=11)
price_freq <- cut(df$price,breaks = breaks,right = TRUE,include.lowest = TRUE)
ggplot(data = df,mapping = aes(x=price_freq)) +
stat_count() +
theme(axis.text.x = element_text(angle = 270))
# + geom_line(aes(y = ..density.., color = 'Empirical'), stat = 'density') +
# stat_function(fun = dnorm, aes(color = 'Normal'),
# args = list(mean = mean_price, sd = sd_price)) +
# scale_colour_manual(name = "Colors", values = c("red", "blue"))
有什么想法吗?
【问题讨论】:
-
另外,这个线程链接到许多其他处理相同问题的线程
标签: r ggplot2 frequency-distribution