簡體   English   中英

如何在 ggplot 上繪制月日日期而不是 r 中的年份

[英]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")

輸出:

在此處輸入圖像描述

我想要的是這個(x軸上的日期是近似的: 在此處輸入圖像描述

我遇到的第一個問題是最早和最晚日期的計算。 對於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM