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

如何将ggplot折线图X轴日期替换为‘day 1’等标识并合并多图?

解决方案

一、替换X轴为“day 1”“day 2”场次标识

有两种实现方式,按需选择:

方式1:修改原始数据生成场次标签

先给数据按日期排序,生成对应的场次列,再用这个列作为X轴:

library(dplyr)
library(ggplot2)

# 给P07的数据添加场次标签(按日期顺序)
p07_points_scored <- p07_points_scored %>%
  arrange(day) %>%
  mutate(day_session = paste0("day ", row_number()))

# 修改后的绘图代码
ggplot(data = p07_points_scored, aes(x = day_session, y = total_score, group = 1)) +
  geom_line() +
  geom_point() +
  theme(axis.text.x = element_text(angle = 60, vjust = 0.5)) +
  labs(title = "P07's Total Score on the Training Tool",
       x = "Training Session",
       y = "Total Score") +
  geom_smooth()

方式2:直接修改X轴刻度标签(不改动原始数据)

如果不想修改数据,直接通过scale_x_discrete替换刻度文本:

# 生成对应场次标签(按日期顺序)
day_labels <- paste0("day ", seq_along(unique(p07_points_scored$day)))

ggplot(data = p07_points_scored, aes(x = factor(day), y = total_score, group = 1)) +
  geom_line() +
  geom_point() +
  scale_x_discrete(labels = day_labels) +  # 替换X轴刻度
  theme(axis.text.x = element_text(angle = 60, vjust = 0.5)) +
  labs(title = "P07's Total Score on the Training Tool",
       x = "Training Session",
       y = "Total Score") +
  geom_smooth()

二、合并4个参与者的折线图

当然可以合并,步骤如下:

1. 合并多份数据

先把4个参与者的数据合并成一个数据框,同时添加标识列区分不同参与者:

# 假设你的4份数据分别是p07、p08、p09、p10_points_scored
combined_data <- bind_rows(
  p07 = p07_points_scored,
  p08 = p08_points_scored,
  p09 = p09_points_scored,
  p10 = p10_points_scored,
  .id = "participant"
)

# 给合并后的数据统一生成场次标签(每个参与者按自身日期顺序)
combined_data <- combined_data %>%
  group_by(participant) %>%
  arrange(day) %>%
  mutate(day_session = paste0("day ", row_number())) %>%
  ungroup()

2. 绘制合并图表

有两种展示方式:

方式1:同图多折线(颜色区分参与者)

适合对比不同参与者的得分趋势:

ggplot(data = combined_data, aes(x = day_session, y = total_score, group = participant, color = participant)) +
  geom_line() +
  geom_point() +
  theme(axis.text.x = element_text(angle = 60, vjust = 0.5)) +
  labs(title = "Total Scores on the Training Tool by Participant",
       x = "Training Session",
       y = "Total Score",
       color = "Participant") +
  geom_smooth(aes(group = participant))

方式2:分面子图(每个参与者单独展示)

适合清晰查看每个参与者的细节:

ggplot(data = combined_data, aes(x = day_session, y = total_score, group = 1)) +
  geom_line() +
  geom_point() +
  geom_smooth() +
  theme(axis.text.x = element_text(angle = 60, vjust = 0.5)) +
  labs(title = "Total Scores on the Training Tool by Participant",
       x = "Training Session",
       y = "Total Score") +
  facet_wrap(~participant)  # 按参与者分面,也可用facet_grid做行列布局

注意:如果需要统一所有子图的X/Y轴范围,可在facet_wrap里添加scales = "fixed"参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 17:05:26