как добавить вторую ось x к линейной диаграмме в R

#r #ggplot2 #charts #x-axis

#r #ggplot2 #Диаграммы #ось x

Вопрос:

Во-первых, это данные и манипуляции. Как бы я добавил к этому вторую ось y. желаемый 2018 год будет иметь первое значение (декабрь), 2019 год — следующие 12, а затем 2020 год — следующие 11. было бы это чем-то, где я бы использовал аннотацию. Кроме того, год будет горизонтальным и выровненным по левому краю непосредственно под первым месяцем года (или декабрем в случае 2018 года)

Я видел другие подобные вопросы, но в ответах есть такие элементы, как xlim, которые не нужны, поскольку в наборе данных будет только 24 элемента.

  #Data generation
 Month1 <- c(201812,20191,20192,20193,20194,20195,20196,
        20197,20198,20199,201910,201911,201912,20201
        ,20202,20203,20204,20205,20206,20207
        ,20208,20209,202010,202011)
       Rate <- 
       c(3.3,3.4,3.1,3.0,3.1,2.9,2.6,2.5,2.3,2.1,1.6,1.7,1.5,1.7,1.1,-0.4,
      -19.5,-17.6,-10.5,-9.6,-9.1,-8.6,-8.0,-7.7)
      cesyoy <- data.frame(Month1,Rate)

      #Chart
      library(ggplot2)
      library(dplyr)
      library(lubridate)
      library(scales)
      library(odbc)


     ## chart
     linechart<-cesyoy %>% mutate(year = substr(as.character(Month1),1,4),
              month = substr(as.character(Month1),5,7),
              date = as.Date(paste(year,month,"1",sep ="-"))) %>%  
     ggplot() geom_line(aes(x=date,y=Rate),color="red") scale_y_continuous(labels = 
     scales::percent) scale_x_date(date_breaks="1 month", date_labels="%bn") theme(panel.grid.major 
     = element_blank(),axis.text.x = element_text(angle = 90, size=rel(0.6))) ggtitle("Employment 
     Growth (%)")
     print(linechart)
 

Ответ №1:

Попробуйте это:

 library(ggplot2)
library(dplyr)
library(lubridate)
library(scales)
## chart
cesyoy %>% mutate(year = substr(as.character(Month1),1,4),
                             month = substr(as.character(Month1),5,7),
                             date = as.Date(paste(year,month,"1",sep ="-"))) %>%  
  ggplot() geom_line(aes(x=date,y=Rate),color="red") 
  scale_y_continuous(labels =scales::percent) 
  scale_x_date(date_breaks="1 month", date_labels="%bn",
               sec.axis = dup_axis(labels = function(x) format(x,'%Y'))) 
  theme(panel.grid.major= element_blank(),
  axis.text.x = element_text(angle = 90, size=rel(0.6))) ggtitle("Employment 
     Growth (%)")
 

Вывод:

введите описание изображения здесь

Другой вариант:

 #Code2
cesyoy %>% mutate(year = substr(as.character(Month1),1,4),
                  month = substr(as.character(Month1),5,7),
                  date = as.Date(paste(year,month,"1",sep ="-"))) %>%  
  ggplot() geom_line(aes(x=date,y=Rate),color="red") 
  scale_y_continuous(labels =scales::percent) 
  scale_x_date(date_breaks="1 month", date_labels="%bn",
               expand = c(0, 0)) 
  facet_wrap(.~year,scales = 'free_x',strip.position = 'bottom') 
  theme(panel.grid.major= element_blank(),
        axis.text.x = element_text(angle = 90, size=rel(0.6)),
        panel.spacing = unit(0, "lines"),
        strip.placement = 'outside',
        strip.background = element_blank()) 
        ggtitle("Employment 
     Growth (%)")
 

Вывод:

введите описание изображения здесь

Комментарии:

1. как бы вы хотели, чтобы ось x, которая находится сверху, была ниже существующей?

2. @TimWilcox Вы имеете в виду переключение порядка осей?

3. @TimWilcox Я добавил обновление с использованием фасетов, надеюсь, это поможет!