R 密度图超过x轴间隔

R 密度图超过x轴间隔,r,ggplot2,density-plot,R,Ggplot2,Density Plot,我试图使用ggplot2绘制一些密度图,但分布超出了我的数据范围。具体来说,我试图显示GPS位置在两种栖息地类型中随时间(一天中的几个小时)的分布。因为我只对显示白天(0500到2100)的位置分布感兴趣,所以我过滤掉了夜间发生的时间。但是,当我绘制数据时,分布在x轴上超过了5小时和21小时。我觉得这与ggplot中的“scale_x_continuous”有关,我已经将限制指定为(0,24),但这并不能解释为什么分布超过白天时间,而在这些时间之前或之后都没有数据。仅供参考,我确实希望显示整个时

我试图使用ggplot2绘制一些密度图,但分布超出了我的数据范围。具体来说,我试图显示GPS位置在两种栖息地类型中随时间(一天中的几个小时)的分布。因为我只对显示白天(0500到2100)的位置分布感兴趣,所以我过滤掉了夜间发生的时间。但是,当我绘制数据时,分布在x轴上超过了5小时和21小时。我觉得这与ggplot中的“scale_x_continuous”有关,我已经将限制指定为(0,24),但这并不能解释为什么分布超过白天时间,而在这些时间之前或之后都没有数据。仅供参考,我确实希望显示整个时间序列,即使我没有每小时的数据

但是,我只有5到21小时之间的数据。 有人能解释一下这里发生了什么吗?希望我说的有道理。谢谢

示例代码:

locs.19
locs.19 <- subset(locs, hour >= 5 & hour <=21)

> head(locs.19)
     ID         x        y         datetime hour shelfhab
2019_01 -122.9979 37.68930 2019-06-07 05:04    5    inner
2019_01 -122.9977 37.68833 2019-06-07 05:06    5    inner
2019_01 -122.9975 37.68737 2019-06-07 05:08    5    inner
2019_01 -122.9974 37.68644 2019-06-07 05:10    5    inner
2019_01 -122.9974 37.68550 2019-06-07 05:12    5    inner
2019_01 -122.9974 37.68457 2019-06-07 05:14    5    inner

> str(locs.19)
'data.frame' :  6531 obs. of  6 variables:
 $ ID       : chr  "2019_01" "2019_01" "2019_01" "2019_01" ...
 $ x        : num  -123 -123 -123 -123 -123 ...
 $ y        : num  37.7 37.7 37.7 37.7 37.7 ...
 $ datetime : chr  "2019-06-07 05:04" "2019-06-07 05:06" "2019-06-07 05:08" "2019-06-07 05:10" ...
 $ hour     : int  5 5 5 5 5 5 5 5 5 5 ...
 $ shelfhab : chr  "inner" "inner" "inner" "inner" ...

### Plot ###
p19 <- ggplot(locs.19, aes(x = hour))+ 
  geom_density(aes(fill = shelfhab), alpha = 0.4)+
  xlab("Time of Day (24 h)")+
  theme(legend.position = "right",panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        axis.line = element_line(colour = "black"),
        text = element_text(size = 14,family = "Calibri"))+
  scale_x_continuous(breaks=seq(0,24,2),limits = c(0, 24), expand = c(0,1))

p19
locs.19
locs.19=5小时水头(locs.19)
ID x y日期时间小时shelfhab
2019_01-122.9979 37.68930 2019-06-07 05:04 5内部
2019_01-122.9977 37.68833 2019-06-07 05:06 5内部
2019_01-122.9975 37.68737 2019-06-07 05:08 5内部
2019_01-122.9974 37.68644 2019-06-07 05:10 5内部
2019_01-122.9974 37.68550 2019-06-07 05:12 5内部
2019_01-122.9974 37.68457 2019-06-07 05:14 5内部
>str(第19条)
“data.frame”:6531 obs。共有6个变量:
$ID:chr“2019_01”“2019_01”“2019_01”“2019_01”。。。
$x:num-123-123-123-123-123-123。。。
$y:num 37.737.737.737.737.7。。。
$datetime:chr“2019-06-07 05:04”“2019-06-07 05:06”“2019-06-07 05:08”“2019-06-07 05:10”。。。
$HOURE:int 5 5 5 5。。。
$shelfhab:chr“inner”“inner”“inner”“inner”。。。
###密谋###

p19问题在于您在
scale\u x\u continuous
中设置限制。因此,您可以设置估计丹尼斯的范围。要获得您想要的结果,只需通过
coord\u cartesian
设置限制即可。这样,密度仅在数据上进行估计,而您仍然可以得到从0到24小时的范围

使用一些随机示例数据:

set.seed(42)
#示例数据

第19条很有魅力。非常感谢!!