使用ggplot2的facet_wrap()或facet_grid()构建指定布局的四面板温度时间序列可视化图
使用ggplot2的facet_wrap()或facet_grid()构建指定布局的四面板温度时间序列可视化图
没问题!要实现你想要的四面板布局,核心思路是先给变量做分组标记——把Air和Water归为同一组(对应左列面板),Difference单独作为一组(对应右列面板),然后用facet_grid()来按「位置(行)+ 分组(列)」拆分面板即可。
第一步:给数据新增面板分组列
我们需要先给每个变量指定它属于哪个面板,用case_when()来快速完成分组:
library(tidyr) library(dplyr) library(ggplot2) # 基于现有Variable列,新增Panel分组列 df1 <- df1 %>% mutate(Panel = case_when( Variable %in% c("Air", "Water") ~ "Air & Water", Variable == "Difference" ~ "Temperature Difference" ))
第二步:绘制四面板可视化图
现在就可以用facet_grid()来实现你要的布局了,我们针对不同面板的需求调整绘图逻辑:
df1 %>% ggplot(aes(x = Date, y = Temperature)) + # 左列面板:绘制Air和Water的带色分组线 geom_line(aes(group = Variable, color = Variable), data = . %>% filter(Panel == "Air & Water")) + # 右列面板:绘制Difference的单线 geom_line(data = . %>% filter(Panel == "Temperature Difference")) + 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"), # 把图例移到顶部,避免挤占面板空间 legend.position = "top" ) + # 按「位置(行)+ 面板分组(列)」拆分布局 facet_grid(Location ~ Panel) + # 给图例设置更清晰的名称 labs(color = "Temperature Type")
补充说明
- 如果想要更灵活的面板间距,可以把
facet_grid(Location ~ Panel)换成facet_wrap(Location ~ Panel, nrow = 2),两者都能实现四面板的行/列布局,只是facet_wrap()的面板排列自由度更高。 - 我们分开调用
geom_line()是为了让左列面板保留Air和Water的颜色区分,右列面板只显示Difference的单线,完全匹配你想要的可视化效果。
备注:内容来源于stack exchange,提问作者tassones
相关产品推荐
相关产品推荐

