You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 07:59:10