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

基于组级汇总统计绘制2x2交互折线图的技术求助

基于汇总2x2表格绘制交叉交互折线图(ggplot2实现)

问题描述

我有多组包含均值或比例的2x2表格,行代表数据收集模式(Mode),列代表年份(Year),想要绘制类似下图的交叉交互折线图。目前找到的ggplot2示例都是基于个体水平数据计算统计量后绘图,我有基础的ggplot2使用经验但不熟练,求可行的实现方法或工具包指引。

附示例数据表结构:

structure(list(...1 = c("Mode 1", "Mode 2"), 
    Year 1 = c(10, 40), Year 2 = c(20, 30)), 
    class = c("tbl_df", "tbl", "data.frame" ), 
    row.names = c(NA, -2L))

目标样式图:
2x2交叉交互折线图

实现步骤

1. 数据格式转换

ggplot2更适配长格式数据,需先将宽格式表格转换为长格式,用tidyr::pivot_longer()即可完成:

library(tidyverse)

# 加载并整理示例数据
df <- structure(list(...1 = c("Mode 1", "Mode 2"), 
                     Year 1 = c(10, 40), Year 2 = c(20, 30)), 
                class = c("tbl_df", "tbl", "data.frame" ), 
                row.names = c(NA, -2L)) %>%
  rename(Mode = ...1) %>% # 重命名第一列为模式名称
  pivot_longer(cols = starts_with("Year"), 
               names_to = "Year", 
               values_to = "Value")

转换后的数据结构:

ModeYearValue
Mode 1Year 110
Mode 1Year 220
Mode 2Year 140
Mode 2Year 230

2. 绘制交叉交互折线图

直接基于汇总数据绘图,核心是按Mode分组并设置颜色,同时添加数据点和标签强化可读性:

ggplot(df, aes(x = Year, y = Value, group = Mode, color = Mode)) +
  geom_line(linewidth = 1.2) + # 绘制折线,调整线条粗细
  geom_point(size = 3) + # 绘制数据点,增大点尺寸
  geom_text(aes(label = Value), vjust = -1) + # 添加数据标签,置于点上方
  theme_minimal() + # 使用简洁主题
  scale_color_manual(values = c("#2E86AB", "#F24C00")) + # 自定义折线颜色
  labs(x = "年份", y = "均值/比例", color = "数据收集模式") + # 设置轴标签和图例标题
  ylim(0, max(df$Value) + 5) # 调整y轴范围,避免标签超出图框

3. 额外优化提示

  • 若为比例数据,可将y轴转为百分比格式:先加载scales包,再添加scale_y_continuous(labels = scales::percent_format())
  • 如果有标准误/置信区间数据,可使用geom_errorbar()添加误差范围
  • 如需标注折线交点,可手动计算交点坐标后用geom_point()或geom_text()添加

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 07:22:35