可能的ggplot2错误:重叠直方图的标准化不一致

jwi*_*ley 3 r histogram ggplot2

我最近偶然在ggplot2中发现了一些奇怪的行为.以下代码

N <- 1000
coin <- rep(c(0,1),N/2)
N1 <- sum(coin)
N0 <- sum(1-coin)
values <- rep(0,N)
values[coin==0] <- rnorm(N0,mean=0,sd=1)
values[coin==1] <- rnorm(N1,mean=0,sd=1)
dat = data.frame('Value'=values,'Category'=as.factor(coin))
Run Code Online (Sandbox Code Playgroud)

创建一个具有一个数字列和一个因子列的数据集,同样数量的事件属于这两个类别中的每一个:

> summary(dat)
     Value           Category
 Min.   :-3.901785   0:500   
 1st Qu.:-0.669807   1:500   
 Median : 0.020031           
 Mean   :-0.008229           
 3rd Qu.: 0.650803           
 Max.   : 3.195819   
Run Code Online (Sandbox Code Playgroud)

但是,在绘制按类别细分的"值"列时,类别1的标准化程度要大于类别0:

ggplot(dat,aes(x=Value,fill=Category)) + geom_histogram(alpha=0.5) + theme_bw()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这看起来很奇怪.对于两个直方图,bin宽度看起来是相同的,因为它们应该如此,但是事件的总计数不等于它们应该是的.0类直方图实际上是整个数据集的直方图:

ggplot(dat,aes(x=Value)) + geom_histogram(alpha=0.5) + theme_bw()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这是一个ggplot2错误,还是我犯了一些我没注意到的错误?(如果我将类别0和1替换为'A'和'B',我会得到同样的结果).

系统细节:

  • Mac OS X High Sierra
  • R版本3.4.0(2017-04-21)
  • ggplot2_2.2.1

Jam*_*mes 5

geom_histogram默认通过参数将条形堆叠在一起position="stack".这对于同时查看每个零件的整体构成和贡献很有用,但对于直接比较零件不太有用.您可以通过将position参数更改为"identity",例如:

ggplot(dat,aes(x=Value,fill=Category)) +
 geom_histogram(alpha=0.5, position="identity") + theme_bw()
Run Code Online (Sandbox Code Playgroud)

直方图使用position =