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

折线图x轴数据分箱:按8周间隔统计各治疗组平均logCD4

要实现按8/16/24/32/40周标准化随访节点展示各治疗组logCD4均值,有两种常用实现方案:


方案1:直接用ggplot内置统计变换,无需提前汇总数据

无需修改原始数据集,通过stat_summary直接在绘图时分组计算均值,代码更简洁:

library(dplyr)
library(ggplot2)

# 先清理字段:提取随访周数的数值格式,过滤无有效随访标识的基线数据
dataset2_clean <- dataset2 %>%
  filter(!is.na(week_int)) %>%
  mutate(visit_week = as.numeric(sub(" weeks", "", week_int)))

# 绘图
ggplot(dataset2_clean, aes(x = visit_week, y = logCD4, color = treatment, group = treatment)) +
  # 绘制均值点
  stat_summary(fun = mean, geom = "point", size = 2) +
  # 绘制均值连线
  stat_summary(fun = mean, geom = "line", linewidth = 1) +
  # 可选:添加误差棒显示标准误,不需要可删除该行
  stat_summary(fun.data = mean_se, geom = "errorbar", width = 1) +
  # 固定x轴刻度为预设随访节点
  scale_x_continuous(breaks = c(8,16,24,32,40), labels = paste0(c(8,16,24,32,40), "周")) +
  labs(x = "随访周数", y = "logCD4均值", color = "治疗方案")

方案2:提前手动汇总统计量再绘图

自由度更高,方便后续复用汇总后的统计结果:

library(dplyr)
library(ggplot2)

# 按治疗组+随访节点分组计算均值、标准误
summary_data <- dataset2 %>%
  filter(!is.na(week_int)) %>%
  mutate(visit_week = as.numeric(sub(" weeks", "", week_int))) %>%
  group_by(treatment, visit_week) %>%
  summarise(
    mean_logCD4 = mean(logCD4, na.rm = TRUE),
    se_logCD4 = sd(logCD4, na.rm = TRUE)/sqrt(n()),
    .groups = "drop"
  )

# 用汇总后的数据绘图
ggplot(summary_data, aes(x = visit_week, y = mean_logCD4, color = treatment)) +
  geom_point(size = 2) +
  geom_line(linewidth = 1) +
  # 可选:添加误差棒,不需要可删除该行
  geom_errorbar(aes(ymin = mean_logCD4 - se_logCD4, ymax = mean_logCD4 + se_logCD4), width = 1) +
  scale_x_continuous(breaks = c(8,16,24,32,40), labels = paste0(c(8,16,24,32,40), "周")) +
  labs(x = "随访周数", y = "logCD4均值", color = "治疗方案")

注意事项

  • 你原有代码中y变量写的是logcd4,但数据集列名是logCD4,注意大小写匹配否则会报错
  • 如果需要保留0周基线数据,可先把基线对应的week_int空值替换为0 weeks后再处理即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:48:00