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

Raincloud图分组异常求助:按Sex而非Score分组的修正

Raincloud图分组错误排查与修复

问题背景

  • 需求:按sex分组展示连续变量score的分布,实现类似按物种分组展示花瓣长度的横向Raincloud图效果
  • 异常表现:当前绘图中数据点错误按score子分组,未按sex横向排列
  • 前置确认:score为连续型变量,代码在其他数据集可正常运行

核心问题排查

  1. 变量名映射错误:代码中ggplot的x轴指定为NIH_score,但数据处理阶段使用的变量是score,导致视觉映射逻辑混乱
  2. 未适配横向布局:针对y轴为离散分类、x轴为连续数值的场景,未指定stat_slab的横向渲染方向

修正后的完整代码

# 替换your_data为你的实际数据集名称
your_data %>%
  dplyr::group_by(sex) %>%
  dplyr::mutate(
    mean = mean(score, na.rm = TRUE),  # 处理缺失值避免报错
    se = sd(score, na.rm = TRUE) / sqrt(length(score)),
    sex_y = paste0(sex, "\n(", n(), ")")  # 显示分组样本量
  ) %>%
  ungroup() %>%
  ggplot(aes(x = score, y = sex_y)) +
  # 指定横向渲染的密度条
  stat_slab(aes(fill = sex), orientation = "horizontal") +
  # 抖动点按分组排列
  geom_point(aes(color = sex), shape = 16,
             position = ggpp::position_jitternudge(height = 0.125, width = 0, 
                                             y = -0.125,
                                             nudge.from = "jittered")) +
  scale_fill_brewer(palette = "Set1", aesthetics = c("fill", "color")) +
  # 明确按分组绘制误差棒
  geom_errorbar(aes(
    xmin = mean - 1.96 * se,
    xmax = mean + 1.96 * se,
    group = sex_y
  ), width = 0.2) +
  # 明确按分组计算并绘制均值点
  stat_summary(fun = mean, geom = "point", shape = 16, size = 3.0,
               aes(group = sex_y)) +
  theme_bw(base_size = 10) +
  theme(legend.position = "top") +
  labs(title = "Raincloud plot with ggdist", x = "Score", y = "Sex (Sample Size)")

关键改动说明

  • 修正x轴变量映射:将NIH_score改为score,确保数据字段一致
  • 添加orientation = "horizontal":让密度条沿x轴横向分布,匹配分组展示需求
  • 明确group = sex_y:确保误差棒和均值点按分组计算,避免跨分组统计
  • 加入na.rm = TRUE:处理数据中可能存在的缺失值,防止计算中断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:38:27