R 直方图和密度图不匹配

R 直方图和密度图不匹配,r,histogram,kernel-density,R,Histogram,Kernel Density,我正在创建替换的柱状图:随时间变化的第1、第2或第3子。因此,每个柱状图显示给定子编号的给定分钟内的子编号。柱状图对我来说很有意义,因为在大多数情况下,柱状图是平滑的,我使用了1分钟的箱子宽度。没有什么看起来太不寻常了。然而,当我叠加一个密度图时,左边的尾部膨胀,我无法确定其中一个图形的原因 数据集由多个子状态组成,从1分钟到最长时间不等。然后我将这个数据集一分为二,只看在45分钟后制作潜艇的时间。我没有把这些数据折回去,我试图创建一个可复制的示例,但无法给出数据 用于在R中创建的代码 ## F

我正在创建替换的柱状图:随时间变化的第1、第2或第3子。因此,每个柱状图显示给定子编号的给定分钟内的子编号。柱状图对我来说很有意义,因为在大多数情况下,柱状图是平滑的,我使用了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

这看起来更正确,至少现在符合数据集。然而,我仍然不明白为什么这些问题首先会发生。

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


如何明确指定密度

您可以通过直接在geom_密度函数调用中指定数据、aes和位置来明确指定密度参数,因此它将使用这些声明的参数而不是继承的参数:

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参数。因此,对于它需要的所有其他参数,数据、aes、位置等,它使用了继承的参数/参数,显然它没有正确继承它们。可能它试图使用geom_vline函数-sumy.df.half中的数据参数,或者被参数..密度中的语法混淆了

如果在geom_直方图之后移动指定密度的代码线,错误是否会持续?如何明确指定密度?通过直接在函数调用中指定数据、aes和位置,因此,它将使用这些声明的参数而不是继承的参数,因为我不确定它是否正确使用了继承的参数。在funciton调用中直接指定它们是什么意思?我是指在代码行中指定geom_density参数-geom_density。现在你明确地只指定了alpha,我想是的。我在上面添加了新代码和新绘图。这更有道理,但我不明白它最初是怎么发生的。
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 ~ .)