【问题标题】:How to make a grouped histogram with normal distributions with ggplot?如何使用ggplot制作具有正态分布的分组直方图?
【发布时间】:2015-12-04 20:25:22
【问题描述】:

当我尝试使用基本 R 和 ggplot 制作一些分组直方图时,我找到了不同的解决方案。有人可以帮我找出问题所在。我猜它与 y 轴有关。

首先我创建了一些子集

Immature2=subset(dataHistogram2, Sex=='I')
Female2=subset(dataHistogram2, Sex=='F')
Male2=subset(dataHistogram2, Sex=='M')

带有基数 R

hist(Immature2$Diameter, prob=TRUE ,breaks= seq(55,125, by=5), ylim=c(0,0.05), xlim=c(55,125), col=rgb(0,1,0,1/2), main="", xlab= "Diameter", ylab="Densiteit")
hist(Female2$Diameter, prob=TRUE, add=TRUE, breaks= seq(55,125, by=5), col=rgb(1,0,0,1/2))
hist(Male2$Diameter, prob= T,breaks=seq(55,125, by=5), add=T, col=rgb(0,0,1,1/2))
x=seq(55,125,0.01)
curveImmature2<-curve(dnorm(x,mean=mean(Immature2$Diam), sd=sd(Immature2$Diam)), add= TRUE, col=rgb(0,1,0,1/2), lwd=2)
curveFemale2 <- curve(dnorm(x,mean=mean(Female2$Diam), sd=sd(Female2$Diam)), add= TRUE, col= rgb(1,0,0,1/2), lwd=2)
curveMale2 <- curve(dnorm(x, mean=mean(Male2$Diam), sd=sd(Male2$Diam)), add= TRUE, col=rgb(0,0,1,1/2), lwd=2)

enter image description here

使用 ggplot

ggplot(dataHistogram2, aes(x=Diameter))+ geom_histogram(binwidth=5, aes(y=..density.., colour=Sex, fill= Sex), position="identity", alpha=0.5)+xlim(55,125) 

enter image description here

所以我的问题: *我的 ggplot 中的条形图为何与基础 R 不同? *如何在 ggplot2 的直方图上以正态分布绘制我的不同子集

【问题讨论】:

    标签: r ggplot2 histogram normal-distribution


    【解决方案1】:

    可以用+ stat_function(fun=dnorm, colour = "red", args=list(mean=mean(Immature2$Diam), sd=sd(Immature2$Diam)))添加正常的情节

    【讨论】:

    • 非常感谢您的快速回复!成功了!我仍然有一个问题,为什么我的两个图表的条形高度不同(您可以在上面的图片中看到它,例如,如果我使用 ggplot,蓝色条形(男性)在 115 处暴跌)
    • 你可以接受这个答案。至于你的问题。它以前也发生在我身上,我相信这可能是由于密度估计(inside-r.org/r-doc/stats/density)。是的,蓝条直线下降 ~ 115,但 115 旁边的条也略高。
    最近更新 更多