Несколько графиков на одном рисунке с использованием функции facet_wrap ggplot в R? - PullRequest
2 голосов
/ 11 марта 2020

Я пытаюсь добавить суммарные значения за определенные годы для нескольких местоположений в верхней части рисунка, где есть статистика для этих местоположений. Ниже приведен пример кода (взят из решения, предложенного для одного из моих предыдущих вопросов).

library(tidyverse)
library(lubridate)
library(dplyr)
library(tidyr)

mydate <- as.data.frame(seq(as.Date("2000-01-01"), to= as.Date("2019-12-31"), by="day"))
    colnames(mydate) <- "Date"
    Data <- data.frame(A = runif(7305,0,10), 
                       J = runif(7305,0,8), 
                       X = runif(7305,0,12), 
                       Z = runif(7305,0,10))

    DF <- data.frame(mydate, Data)

    Data_Statistics <- DF %>% mutate(Year = year(Date), Month = month(Date)) %>%
      pivot_longer(-c(Date,Year,Month), names_to = "variable", values_to = "values") %>% 
      filter(between(Month,5,10)) %>% 
      group_by(Year, variable) %>% 
      mutate(Cumulative = cumsum(values)) %>%
      mutate(NewDate = ymd(paste("2020", Month,day(Date), sep = "-"))) %>%
      ungroup() %>%
      group_by(variable, NewDate) %>%
      summarise(Median = median(Cumulative),
                Maximum = max(Cumulative),
                Minimum = min(Cumulative),
                Upper = quantile(Cumulative,0.75),
                Lower = quantile(Cumulative, 0.25))

Я хотел извлечь данные за год 2019 из Data_Statistics, однако не смог этого сделать - я не хочу получать статистику за 2019 год, но накопил значения за период моего интереса (С мая по октябрь, что соответствует месяцам 5 - 10)

 Data_2019 <- DF %>% mutate(Year = year(Date), Month = month(Date)) %>%
  pivot_longer(-c(Date,Year,Month), names_to = "variable", values_to = "values") %>% 
  filter(between(Month,5,10)) %>%
  filter(Year == 2019) %>% 
  group_by(Year, variable) %>% 
  mutate(Cumulative = cumsum(values)) 

Построение Data_Statistics с использованием facet_wrap функциональности ggplot с помощью следующего примера кода дало мне прикрепленный рисунок.

Data_Statistics %>% pivot_longer(cols = c(Median, Minimum,Maximum), names_to = "Statistic",values_to = "Value") %>%
  ggplot(aes(x = NewDate))+
  geom_ribbon(aes(ymin = Lower, ymax = Upper, fill = "Upper / Lower"), alpha =0.5)+
  geom_line(aes(y = Value, color = Statistic, linetype = Statistic, size = Statistic))+
  facet_wrap(~variable, scales = "free")+
  scale_x_date(date_labels = "%b", date_breaks = "month", name = "Month")+
  ylab("Daily Cumulative Precipitation (mm)")+
  scale_size_manual(values = c(1.5,1,1.5))+
  scale_linetype_manual(values = c("dashed","solid","dashed"))+
  scale_color_manual(values = c("red","darkblue","black"))+
  scale_fill_manual(values = "cyan", name = "")

enter image description here

Моя конечная цель

Я хочу добавить данные за 2019 год в верхней части рисунка для их соответствующих facets (т. Е. Еще одна geom_line), чтобы увидеть, что мы имеем по сравнению со статистикой всех предыдущих лет. Спасибо.

1 Ответ

2 голосов
/ 12 марта 2020

Если вы хотите наложить каждый аспект на данные 2019, вы добавляете новую функцию geom_line в свой ggplot. Вам нужно сначала манипулировать данными 2019 года, как вы делали для всех данных перед этим:

Data_2019_plot <- Data_2019  %>% 
  pivot_longer(cols = c(Median, Minimum,Maximum), names_to = "Statistic",values_to = "Value")

Теперь в конце последовательности ggplot вы добавляете

+ geom_line(data = Data_2019_plot, 
            aes(y = Value, color = Statistic, linetype = Statistic, size = Statistic))

и получаете следующий график: enter image description here

С вашими данными выборки строки 2019 довольно сильно перекрываются, поэтому они не выглядят очень четкими. Возможно, вы захотите установить определенный c цвет для 2019 года, а не устанавливать его для отображения c aestheti.

...