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

如何在R中制作含正负X轴的散点图并分析前后斜率差异

R语言实现正负X轴散点图及斜率差异分析

1. 准备工作与模拟数据

作为新手,先从可运行的示例数据入手,你可以替换成自己的真实数据:

# 加载必备包
library(ggplot2)
library(dplyr)

# 模拟符合需求的数据集
set.seed(123) # 固定随机种子,结果可重复
data <- tibble(
  ID = rep(paste0("个体", 1:5), each = 6), # 5个研究个体,每个6个数据点
  time = rep(c(-3, -2, -1, 1, 2, 3), 5), # 事件前后时间:负=发生前,正=发生后
  y = rnorm(30, 5, 1) + time * rep(c(0.3, -0.2, 0.5, -0.1, 0.4), each = 6), # 带个体差异的Y值
  month = sample(c("1月", "4月", "7月", "10月"), 30, replace = TRUE) # 随机生成采集月份
)

# 定义点的填充/空心规则:这里设定奇数月份填充,偶数月份空心,可按需修改
data <- data %>%
  mutate(fill_type = ifelse(month %in% c("1月", "7月"), "填充", "空心"))

2. 绘制正负X轴散点图

用ggplot2实现需求,每个参数都有明确作用:

ggplot(data, aes(x = time, y = y)) +
  # 添加原点参考线(事件发生时间点)
  geom_vline(xintercept = 0, linetype = "dashed", color = "gray50") +
  geom_hline(yintercept = 0, linetype = "dashed", color = "gray50") +
  # 散点设置:个体对应不同形状,填充状态由月份规则控制
  geom_point(aes(shape = ID, fill = fill_type), size = 3) +
  # 指定可填充的点形状(21-25支持fill参数,实现填充/空心切换)
  scale_shape_manual(values = c(21, 22, 23, 24, 25)) +
  # 设置填充颜色:填充为黑色,空心为白色
  scale_fill_manual(values = c("填充" = "black", "空心" = "white")) +
  # 坐标轴与标题设置
  labs(
    x = "时间(事件发生前为负,发生后为正)",
    y = "Y值",
    shape = "研究个体",
    fill = "采集月份状态",
    title = "事件前后数据散点图"
  ) +
  # 简洁主题调整
  theme_bw() +
  theme(
    plot.title = element_text(hjust = 0.5),
    legend.position = "bottom"
  )

3. 事件前后斜率差异分析

通过线性回归计算每个个体在事件前后的斜率,再用配对t检验比较差异:

# 按个体和事件阶段(前/后)分组,计算斜率
slope_stats <- data %>%
  mutate(phase = ifelse(time < 0, "事件前", "事件后")) %>%
  group_by(ID, phase) %>%
  summarize(
    slope = coef(lm(y ~ time))[2], # 提取线性回归的斜率系数
    .groups = "drop"
  )

# 查看每个个体的前后斜率
print(slope_stats)

# 配对t检验:比较同一个体事件前后的斜率差异
slope_test <- t.test(slope ~ phase, data = slope_stats, paired = TRUE)
cat("斜率差异检验结果:\n")
print(slope_test)

# 可视化斜率差异
ggplot(slope_stats, aes(x = phase, y = slope, fill = phase)) +
  geom_boxplot(width = 0.5) +
  labs(
    x = "事件阶段",
    y = "拟合斜率",
    title = "事件前后斜率分布差异"
  ) +
  theme_bw() +
  theme(plot.title = element_text(hjust = 0.5))

注意事项

  • 替换模拟数据时,确保你的数据集包含:个体ID、时间变量(负/正对应事件前后)、Y变量、采集月份
  • 点的填充/空心规则可根据实际月份需求修改fill_type的判断逻辑
  • 如果个体数量多,可调整scale_shape_manual的values参数,选择更多不同形状

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:47:37