【发布时间】:2022-12-21 03:24:59
【问题描述】:
我有一个数据框,其中包含来自两个位置的年度温度时间序列(即 Site 1 和 Site 2)。三个温度变量是:
-
Air温度 -
Water温度 -
Difference=Air-Water我想制作一个四面板图,其中顶行和底行分别是
Site 1和Site 2,左列显示Air和Water,右列显示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)这是我正在寻找的示例,但是我不想使用六面板图,而是希望同时显示
Air和Water,从而创建一个四面板图。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)
【问题讨论】: