[英]How to plot month-day dates on ggplot instead of day of year in r
我需要創建一個圖表,顯示兩組的最早日期和最晚日期之間的范圍。 有不同的年份,但我只對定義為月日(即 2 月 4 日)的日期感興趣,而不管年份。 在將月日定義為儒略日時,我能夠做到這一點,但我想以月日格式(即 2 月 4 日)來做到這一點。
這是我在朱利安日期工作時獲得的代碼和輸出:
library(dplyr)
data.1 <-read.csv(text = "
trt,full_date
A,10/06/2020
A,09/19/2017
A,10/28/2014
A,09/02/2016
A,09/19/2017
A,09/26/2017
B,08/24/2020
B,09/24/2020
B,10/16/2018
B,09/16/2018
B,09/15/2016
B,09/09/2018
")
#day of year option
data.2 <- data.1 %>%
mutate(full_date = as.Date(full_date, format("%m/%d/%Y")),
full_date.doy = as.numeric(strftime(full_date, format = "%j"))) %>%
group_by(trt) %>%
summarise(earliest.doy = min(full_date.doy),
latest.doy = max(full_date.doy))
ggplot(data.2) +
geom_segment( aes(x=trt, xend=trt, y=earliest.doy, yend=latest.doy), color="grey") +
geom_point( aes(x=trt, y=earliest.doy), color=rgb(0.2,0.7,0.1,0.5), size=3 ) +
geom_point( aes(x=trt, y=latest.doy), color=rgb(0.7,0.2,0.1,0.5), size=3 ) +
coord_flip() +
ylab("Day of the year")
輸出:
我遇到的第一個問題是最早和最晚日期的計算。 對於trt="A"
,最早和最晚的日期是錯誤的。
問題是date_mm.dd
似乎是字符格式,我找不到更改日期的方法。 這樣,情節就錯了:
任何提示將不勝感激。
解決此問題的一種方法可能是將您的doy
變量設置為任意年份(例如 2022 年)的日期。在這里,第一天將是 2021-12-31 之后的一天,即 2022 年 1 月 1 日。
(2022 年不是閏年,因此閏年 2 月 28 日之后的日期將提前一天表示。即 2 月 29 日發生時是一年中的第 60 天,但在大多數年份,如 2022 年, 3 月 1 日是第 60 天,所以它會顯示在那里。根據上下文,您可能會對此進行調整。)
data.2 %>%
mutate(across(contains("doy"), ~as.Date("2021-12-31") + .x))
這是要求 dplyr 將相同的函數應用於名稱包含強“doy”的任何列的快捷方式。 我們可以等效地使用:
data.2 %>%
mutate(earliest.doy = as.Date("2021-12-31") + earliest.doy))
mutate(latest.doy = as.Date("2021-12-31") + earliers.doy))
結果
# A tibble: 2 × 3
trt earliest.doy latest.doy
<chr> <date> <date>
1 A 2022-09-03 2022-10-28
2 B 2022-08-25 2022-10-16
那么您可以將其輸入到您現有的代碼中:
... %>%
ggplot()+
geom_segment( aes(x=trt, xend=trt, y=earliest.doy, yend=latest.doy), color="grey") +
geom_point( aes(x=trt, y=earliest.doy), color=rgb(0.2,0.7,0.1,0.5), size=3 ) +
geom_point( aes(x=trt, y=latest.doy), color=rgb(0.7,0.2,0.1,0.5), size=3 ) +
coord_flip() +
ylab("Day of the year")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.