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

如何使用ggplot绘制带x轴周期标注的连续曲线,替代Cycle分面展示

实现方法

你当前使用分面语法会将每个Cycle拆分为独立子图,因此曲线是分段展示的。要得到连续的曲线,首先需要构造全局连续的X轴刻度,将所有Cycle的观测按时间顺序串联,再在X轴对应区间标注Cycle标识即可,以下是两种常用实现方案:

方案1:基础ggplot实现(无需额外依赖包)

该方案适合仅需标注Cycle大分类的场景,曲线完全连续无断层:

步骤1:预处理数据生成全局时间轴

library(dplyr)
library(ggplot2)

# 计算每个Cycle的时间偏移量,生成全局连续X轴字段GlobalTime
MyDF <- MyDF %>%
  mutate(Cycle_idx = as.integer(sub("C", "", Cycle)),
         GlobalTime = (Cycle_idx - 1)*120 + Time)

步骤2:绘制连续曲线并标注Cycle

MyDF %>%
  ggplot(aes(GlobalTime, WSS)) +
  geom_smooth(size = 1, se = TRUE) +
  # 配置X轴,刻度对应每个Cycle的中点,标签为Cycle标识
  scale_x_continuous(
    breaks = seq(60, 420, 120),
    labels = paste0("C", 1:4),
    name = "Cycle"
  ) +
  # 可选:添加虚线分隔不同Cycle区间
  geom_vline(xintercept = seq(120, 360, 120), linetype = "dashed", color = "gray70") +
  theme_bw()

方案2:使用ggh4x包实现嵌套X轴

如果需要同时展示每个Cycle内部的具体时间刻度(5/30/60/120)和Cycle标识,可以用ggh4x包的嵌套坐标轴功能:
首先安装依赖包:

install.packages("ggh4x")

绘图代码:

library(ggh4x)

MyDF %>%
  ggplot(aes(interaction(Time, Cycle), WSS, group = 1)) +
  geom_smooth(size = 1, se = TRUE) +
  scale_x_discrete(
    guide = guide_axis_nested(
      delim = "\\.",
      extended_braces = FALSE
    )
  ) +
  labs(x = "Cycle / Time") +
  theme_bw()

内容的提问来源于stack exchange,提问作者Munkhtur Otgonbayar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:51:00