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

如何用ggplot的facet_grid将三个时间序列绘制成两个分面?

实现两个分面的时间序列展示

要把两只股票放在同一个分面、指标单独一个分面,核心是给数据新增一个分组列,将stock1和stock2归为同一组,indicator单独一组,再用这个分组列作为分面依据。

步骤1:处理数据,新增分面分组列

先将数据宽转长,再通过case_when创建分面分组列facet_group:

library(tidyverse)

# 你的原始数据
stock1 = cumprod(1+c(0, rnorm(99, 0, .05)))
stock2 = cumprod(1+c(0, rnorm(99, 0, .075)))
indicator = sample(1:50, 100, replace = TRUE)
date_seq = seq.Date(as.Date("2023-01-01"), length.out = 100, by = 1)
df = data.frame(date = date_seq, stock1 = stock1, stock2 = stock2, indicator = indicator)

# 宽转长并新增分面分组列
grid_df = pivot_longer(df, c(stock1, stock2, indicator), names_to = "underlying", values_to = "values") %>%
  mutate(facet_group = case_when(
    underlying %in% c("stock1", "stock2") ~ "Stocks",
    TRUE ~ "Indicator"
  ))

步骤2:用facet_grid绘制双分面图表

用facet_group作为分面变量,同时保留underlying来区分线条颜色:

ggplot(grid_df, aes(x = date, y = values, colour = underlying)) +
  geom_line(linewidth = 1) +
  facet_grid(vars(facet_group), scales = "free_y") +  # 仅y轴自由缩放,x轴保持对齐更直观
  labs(colour = "Series") +
  theme_minimal()

关键说明

  • 原代码用underlying(三个唯一值)做分面,所以生成三个分面;新增分组列后,只有两个唯一值,对应两个分面。
  • 设置scales = "free_y"比"free"更合理,因为x轴都是日期,保持对齐能更直观对比时间维度的变化。

内容的提问来源于stack exchange,提问作者Matthias Bernhardt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:10:26