直方图和密度图不匹配

时间:2019-04-10 11:58:58

标签: r histogram kernel-density

我正在创建替换的直方图:时间上的第一,第二或第三子。因此,每个直方图都会在给定的“子编号”下显示给定分钟内的子编号。直方图对我来说很有意义,因为在大多数情况下它们都很平滑(我使用了1分钟的纸箱宽度)。没有什么看起来与众不同。但是,当我覆盖密度图时,左侧的尾巴会膨胀,因此我无法确定其中一张图的原因。

数据集包含替换,范围从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

为什么对于第一个Sub,如果不小于45,则密度图在尾部膨胀?还有为什么第二子的尾部的密度图不更膨胀?

侧面说明:我确实在交叉验证中询问了此问题,但由于涉及R而被告知,请改为在此处询问。 Here

enter image description 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 ~ .)

enter image description here

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

1 个答案:

答案 0 :(得分:1)

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

如何明确指定密度?

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

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等),它使用了继承的参数/参数,显然它没有正确地继承它们。可能是它试图使用geom_vline函数的数据参数-sumy.df.half,或者被语法“ ..density ..”

中的语法混淆了。