直方图和密度图不匹配
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
函数调用中指定 data
、aes
和 position
来显式指定密度参数,因此它会使用这些声明的而不是继承的参数:
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
参数。因此,对于它需要的所有其余参数(data
、aes
、position
等),它使用了继承的 arguments/parameters 并且显然它没有正确继承它们。可能它试图使用 geom_vline
函数中的数据参数 - sumy.df.half
,或者被参数“..density..”中的语法混淆
我正在创建替换直方图:随时间变化的第 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
函数调用中指定 data
、aes
和 position
来显式指定密度参数,因此它会使用这些声明的而不是继承的参数:
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
参数。因此,对于它需要的所有其余参数(data
、aes
、position
等),它使用了继承的 arguments/parameters 并且显然它没有正确继承它们。可能它试图使用 geom_vline
函数中的数据参数 - sumy.df.half
,或者被参数“..density..”中的语法混淆