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

如何在抖动图中展示缺失数据(NA)并叠加均值与误差棒?

解决方案

核心思路

不要叠加geom_miss_point()和geom_jitter()(这会导致非NA点重复绘制),而是拆分数据子集分别处理:非NA数据用geom_jitter()画抖动点,NA数据用geom_miss_point()(或手动偏移)单独绘制,同时统一抖动参数保证效果一致,最后叠加均值和误差棒。

步骤1:数据预处理(关键)

首先要把你标记为0的未作答项转回NA,让naniar能正确识别缺失值。假设你的数据是宽格式(列是item1到item10),先转长格式并修正缺失值:

library(tidyverse)
library(naniar)

# 假设原始宽数据为df,替换未作答的0为NA(替换逻辑根据你的实际数据调整)
df_long <- df %>%
  pivot_longer(cols = starts_with("item"), names_to = "item", values_to = "score") %>%
  # 示例:如果有作答状态标记列,用它判断;否则根据业务逻辑替换
  mutate(score = ifelse(未作答判断条件, NA_real_, score))

步骤2:绘制目标图形

分图层绘制,避免重复,同时统一抖动参数:

ggplot(df_long, aes(x = item, y = score)) +
  # 1. 绘制非NA的原始数据抖动点
  geom_jitter(data = filter(df_long, !is.na(score)),
              width = 0.2, height = 0.05, alpha = 0.5, color = "darkblue") +
  # 2. 绘制NA缺失点,偏移到项目右侧区分,和正常点用相同抖动参数
  geom_miss_point(data = filter(df_long, is.na(score)),
                  width = 0.2, height = 0.05, color = "red",
                  position = position_nudge(x = 0.3)) +
  # 3. 叠加每个项目的均值+标准误误差棒
  stat_summary(fun.data = mean_se, geom = "errorbar", width = 0.1, color = "black") +
  stat_summary(fun = mean, geom = "point", size = 2, color = "black") +
  # 自定义标签和主题
  labs(x = "问卷项目", y = "得分", title = "问卷项目得分分布(含缺失值)") +
  theme_minimal()

关键说明

  • 拆分数据子集:通过filter()分别传递非NA和NA数据给对应图层,彻底避免重复绘制。
  • 统一抖动参数:width和height参数在geom_jitter()和geom_miss_point()中保持一致,保证两类点的抖动效果匹配。
  • NA点偏移:用position_nudge(x=0.3)把缺失点移到每个项目的右侧,和正常点直观区分,你可以根据需求调整偏移量。

如果不想用geom_miss_point(),也可以手动绘制NA点:把NA点的x轴位置设为as.numeric(item)+0.3,再用geom_jitter()绘制,效果一样。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 06:43:13