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

如何为ggpaired的连线按计数加权,对比课前课后测试分数?

解决方案

要实现连接线条粗细与对应分数提升的学生人数成正比,核心是先对课前-课后分数配对进行人数统计,再将统计结果映射到线条的size参数上。以下是具体实现步骤:

1. 数据准备与预处理

先模拟符合你场景的数据集(可替换为你的真实数据),并统计每个分数配对的学生人数:

library(tidyverse)
library(ggpubr)

# 模拟40名学生的课前/课后分数(12分制)
set.seed(123)
df <- tibble(
  Before = sample(3:10, 40, replace = TRUE),
  After = Before + sample(0:4, 40, replace = TRUE)
)
df$After <- pmin(df$After, 12) # 确保课后分数不超过12分

# 统计每个(Before, After)配对的学生人数
df_summary <- df %>% 
  count(Before, After, name = "n_students")

2. 绘制带权重线条的配对图

手动构建类似ggpaired的可视化效果,直接控制线条粗细与学生人数的关联:

ggplot(df_summary, aes(group = interaction(Before, After))) +
  # 绘制课前分数点,大小对应人数
  geom_count(aes(x = factor(1), y = Before, size = n_students), 
             color = "#2E9FDF", alpha = 0.8) +
  # 绘制课后分数点,大小对应人数
  geom_count(aes(x = factor(2), y = After, size = n_students), 
             color = "#E7B800", alpha = 0.8) +
  # 绘制连接线条,粗细对应人数
  geom_line(aes(x = factor(c(1,2)), y = c(Before, After), size = n_students), 
            color = "gray50", alpha = 0.6) +
  # 配置坐标轴与标签
  scale_x_discrete(labels = c("课前", "课后")) +
  scale_size_continuous(range = c(0.5, 3), name = "学生人数") +
  labs(x = "", y = "正确答题数(12分制)", 
       title = "学生课前/课后分数提升对比") +
  theme_pubr()

关键说明

  • 通过count()函数统计每个分数配对的人数,得到权重变量n_students;
  • 将n_students映射到geom_line的size参数,实现线条粗细随人数变化;
  • 调整scale_size_continuous()的range参数,可控制线条和点的大小范围,避免视觉失衡;
  • 用interaction(Before, After)作为分组变量,确保每个分数配对的线条独立连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 07:37:29