【问题标题】:ggplot2: add two groups to one facetggplot2:将两组添加到一个方面
【发布时间】:2022-12-21 03:24:59
【问题描述】:

我有一个数据框,其中包含来自两个位置的年度温度时间序列(即 Site 1Site 2)。三个温度变量是:

  1. Air温度
  2. Water温度
  3. Difference = Air - Water

    我想制作一个四面板图,其中顶行和底行分别是Site 1Site 2,左列显示AirWater,右列显示Difference。有没有办法使用facet_wrap()facet_grid()来做到这一点?

    示例数据

    library(data.table)
    library(dplyr)
    library(ggplot2)
    
    set.seed(321)
    
    # Create the example air and water temperature time series
    df1 <- data.frame(matrix(ncol = 4, nrow = 365*4))
    colnames(df1)[1:4] <- c("Location","Variable", "Date", "Temperature")
    df1[1:730,1] <- "Site 1"
    df1[731:NROW(df1),1] <- "Site 2"
    df1[c(1:365,731:1095),2] <- "Air"
    df1[c(366:730,1096:NROW(df1)),2] <- "Water"
    df1$Date <- rep(seq.Date(as.Date("2021-01-01"),as.Date("2021-12-31"),"1 day"),4)
    df1$noise <- rep(runif(365),4)
    df1$t <- rep(seq(0,1*pi,,365),4)
    for (i in 1:NROW(df1)) {
      df1$Temperature[1:365] <- 20*sin(df1$t)+df1$noise*8
      df1$Temperature[365:730] <- 17*sin(df1$t)+df1$noise*2
      df1$Temperature[731:1095] <- 25*sin(df1$t)+df1$noise*6
      df1$Temperature[1096:NROW(df1)] <- 18*sin(df1$t)+df1$noise*1.5
    }
    
    # Take the difference between air and water temperature
    df1 <- df1[,1:4]
    site1 <- df1[df1$Location == 'Site 1',]
    site1 <- site1 %>%
      tidyr::pivot_wider(names_from = Variable, values_from = Temperature) %>%
      mutate(Difference = Air - Water) %>%
      tidyr::pivot_longer(cols = c('Water','Air','Difference'),
                          names_to = 'Variable',
                          values_to = 'Temperature')
    site2 <- df1[df1$Location == 'Site 2',]
    site2 <- site2 %>%
      tidyr::pivot_wider(names_from = Variable, values_from = Temperature) %>%
      mutate(Difference = Air - Water) %>%
      tidyr::pivot_longer(cols = c('Water','Air','Difference'),
                          names_to = 'Variable',
                          values_to = 'Temperature')
    
    # Recombine data from site 1 and site 2 for final dataset
    df1 <- rbind(site1,site2)
    

    这是我正在寻找的示例,但是我不想使用六面板图,而是希望同时显示 AirWater,从而创建一个四面板图。

    df1 %>%
      ggplot() +
      geom_line(aes(x = Date, y = Temperature, group = Variable, color = Variable)) +
      theme_bw() +
      theme(panel.grid = element_blank(),
            text = element_text(size = 16),
            axis.text.x = element_text(size = 14, color = "black", angle = 90, vjust = 0.5, hjust = 1),
            axis.text.y = element_text(size = 14, color = "black")) +
      facet_grid(Location~Variable)
    

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    尝试创建一个将“空气”和“水”观测值分组的新变量,并将其指定到方面:

    df1 %>% 
    mutate(var_air_water = ## Here is the new variable
       if_else(Variable %in% c("Air", "Water"), 
       true = "Air & Water", 
       false = Variable)) %>% 
    ggplot() +
    geom_line(aes(x = Date, y = Temperature, group = Variable, color = Variable)) +
    theme_bw() +
    theme(panel.grid = element_blank(),
          text = element_text(size = 16),
          axis.text.x = element_text(size = 14, color = "black", angle = 90, vjust = 0.5, hjust = 1),
          axis.text.y = element_text(size = 14, color = "black")) +
    facet_grid(Location~var_air_water)
    

    【讨论】:

      猜你喜欢
      • 2014-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多