如何在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
相关产品推荐
相关产品推荐

