简体   繁体   中英

x axis as week number and secondary x-axis as date

I'm trying to plot a time serie with Primary x-axis as numeric and Secondary x-axis as date in ggplot. This is my poor try.

library(tidyverse)

tibble::tribble(
  ~date,  ~ndvi,
  "2020-05-18", 0.7655,
  "2020-06-14",  0.723,
  "2020-07-12", 0.6178,
  "2020-08-21",  0.437,
  "2020-09-07", 0.4763,
  "2020-09-10", 0.4928,
  "2020-09-12", 0.4831,
  "2020-09-22", 0.4774,
  "2020-10-02", 0.5794,
  "2020-10-07",  0.606
) %>% 
  mutate(date = lubridate::ymd(date),  
         weeks = difftime(date, min(date), units="weeks")) %>% 
  ggplot(aes(weeks, ndvi)) +
  geom_line()+
  scale_x_datetime(
    sec.axis = dup_axis(name = "", #breaks = date, 
                        labels = scales::time_format("%b")))

#> Error: Invalid input: time_trans works with objects of class POSIXct only

And this is the desired output, where the Primary x-axis has weeks and Secondary x-axis has the months of the time serie

在此处输入图像描述

set labels for both x-axes separately. Please check also this discussion

library(tidyverse)

mydat <- tibble::tribble(
  ~date,  ~ndvi,
  "2020-05-18", 0.7655,
  "2020-06-14",  0.723,
  "2020-07-12", 0.6178,
  "2020-08-21",  0.437,
  "2020-09-07", 0.4763,
  "2020-09-10", 0.4928,
  "2020-09-12", 0.4831,
  "2020-09-22", 0.4774,
  "2020-10-02", 0.5794,
  "2020-10-07",  0.606
)  %>% 
  mutate(date = lubridate::ymd(date),  
         weeks = as.numeric(difftime(date, min(date), units="weeks")))

 mydat %>%
  ggplot(aes(date, ndvi)) +
  geom_line() +
  scale_x_date(date_breaks = "4 weeks", labels = scales::date_format("%W"),
    sec.axis = dup_axis(name = "", labels = scales::date_format("%b")))

Created on 2021-02-10 by the reprex package (v1.0.0)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM