[英]Density plot exceeds x-axis interval
我正在嘗試使用 ggplot2 制作一些密度圖,但分布超出了我的數據范圍。 具體來說,我試圖顯示 GPS 位置隨時間(一天中的幾個小時)在 2 種棲息地類型中的分布。 因為我只對在白天(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
問題是您在scale_x_continuous
設置了限制。 因此,您可以設置估計密度的范圍。 要獲得您想要的結果,只需通過coord_cartesian
設置限制coord_cartesian
。 這樣,密度僅根據您的數據進行估計,而您仍然可以獲得 0 到 24 小時的范圍。
使用一些隨機示例數據:
set.seed(42)
# Example data
locs.19 <- data.frame(hour = sample(5:21, 1000, replace = TRUE),
shelfhab = sample(c("inner", "outer"), 1000, replace = TRUE))
library(ggplot2)
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))+
scale_x_continuous(breaks=seq(0,24,2), expand = c(0,1)) +
coord_cartesian(xlim = c(0, 24))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.