直方图和密度图不匹配

Histograms and Density Plots do not match up

我正在创建替换直方图:随时间变化的第 1、第 2 或第 3 子。因此,每个直方图显示给定 Sub Number 的给定分钟内的 subs 数量。直方图对我来说很有意义,因为在大多数情况下它们是平滑的(我使用了 1 分钟的 bin 宽度)。没有什么看起来太不寻常了。但是,当我叠加密度图时,左侧的尾巴膨胀,我无法确定其中一张图的原因。

数据集是换人,范围从第1分钟到最大时间。然后,我将这个数据集切成两半,只查看 45 分钟后制作潜艇的时间。我没有折叠这些数据,我试图创建一个可重现的示例,但无法提供数据。

用于在 R 中创建的代码

## Filter out subs that are not in the second half
df.half<-df[df$PeriodId>=2,]
p<-ggplot(data=df.half, aes(x=time)) + 
  geom_histogram(aes(y=..density..),position="identity", alpha=0.5,binwidth=1)+
  geom_vline(data=sumy.df.half,aes(xintercept=grp.mean),color="blue", linetype="dashed", size=1)+
  geom_density(alpha=.2)+
  facet_grid(SUB_NUMBER ~ .)+
  scale_y_continuous(limits = c(0,0.075),breaks = c(seq(0,0.075,0.025)),
                     minor_breaks = c(seq(0,0.075,0.025)),name='Count')
p

如果没有小于 45 的值,为什么第一个子的尾部密度图会膨胀?另外,为什么第二个 Sub 的尾部密度图没有膨胀得更多?

旁注:我确实在交叉验证上问过这个问题,但被告知因为它涉及 R,所以改为在这里问。 Here

所以我能够更改代码并获得以下内容:

ggplot() + 
  geom_histogram(data=df.half, aes(x=time,y=..density..),position="identity", alpha=0.5,binwidth=1)+
  geom_density(data=df.half,aes(x=time,y=..density..))+
  geom_vline(data=sumy.df.half,aes(xintercept=grp.mean),color="blue", linetype="dashed", size=1)+
  facet_grid(SUB_NUMBER ~ .)

这看起来更正确,至少现在适合数据集。但是,我仍然对为什么首先会出现这些问题感到困惑。

虽然没有可重现错误的数据样本,但您可以尝试 通过明确指定确保 geom_density 使用的环境是正确的。您也可以尝试将指定密度 (geom_density) 的代码行移动到 geom_histogram 之后。此外,y 轴标签可能是错误的 - 它现在设置为 counts,而值表明实际上是 密度

如何明确指定密度?

您可以通过直接在 geom_density 函数调用中指定 dataaesposition 来显式指定密度参数,因此它会使用这些声明的而不是继承的参数:

ggplot() + 
  geom_histogram(data=df.half, aes(x=time,y=..density..),position="identity", alpha=0.5,binwidth=1)+
  geom_density(data=df.half,aes(x=time,y=..density..))+
  geom_vline(data=sumy.df.half,aes(xintercept=grp.mean),color="blue", linetype="dashed", size=1)+
  facet_grid(SUB_NUMBER ~ .)

一开始我不明白它是怎么发生的 我认为在 geom_density 的初始代码中,您已经明确指定了 alpha 参数。因此,对于它需要的所有其余参数(dataaesposition 等),它使用了继承的 arguments/parameters 并且显然它没有正确继承它们。可能它试图使用 geom_vline 函数中的数据参数 - sumy.df.half ,或者被参数“..density..”中的语法混淆