ggplot2 geom_density和geom_histrogram在一个图中

时间:2017-01-27 23:18:21

标签: r ggplot2

如何制作直方图,其中所有条形加起来为1并在上方添加密度图层?

set.seed(1234)
df <- data.frame(
  sex=factor(rep(c("F", "M"), each=200)),
  weight=round(c(rnorm(200, mean=55, sd=5),
                 rnorm(200, mean=65, sd=5)))
  )

(取自:http://www.sthda.com/english/wiki/ggplot2-density-plot-quick-start-guide-r-software-and-data-visualization

ggplot(df, aes(x=weight, color=sex, fill=sex)) + 
 geom_histogram(aes(y=..density..), alpha=0.5, 
                position="identity")+
 geom_density(alpha=.2) 

但是当我将aes(y=..density..)更改为aes(y=..scaled..)时,我收到错误。

如果我将此示例与我的(大)数据一起使用,密度将达到120。 基本上这个: ![巴] http://www.sthda.com/sthda/RDoc/figure/easy-ggplot2/ggplot2-histogram-multiple-groups3.png 具有不同的y轴。 (以便一种类型的所有条形加起来为1)

我不确定使用geom_smooth在统计上是否合法?

1 个答案:

答案 0 :(得分:0)

尝试使用y = ..density../sum(..density..)

set.seed(1234)
df <- data.frame(
    sex=factor(rep(c("F", "M"), each=200)),
    weight=round(c(rnorm(200, mean=55, sd=5),
                   rnorm(200, mean=65, sd=5)))
)

library(ggplot2)

ggplot(df, aes(x=weight, color=sex, fill=sex)) + 
    geom_histogram(aes(y=..density../sum(..density..)), alpha=0.5, 
                   position="identity")+
    geom_density(alpha=.2)