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

求助:寻找适配特定数据结构的ggplot()绘图函数

ggplot绘制原始数据分组图的解决方案

关键一步:把宽格式数据转成长格式

你当前的数据是宽格式(C0、C1作为独立列),ggplot对长格式数据的适配性更好,转格式后能直接用原始数据绘图,完全不用依赖stat_summary。

数据转换代码示例

假设你的数据框叫df,先构造个模拟数据参考:

# 模拟你的数据结构
df <- data.frame(
  group = rep(c("对照组", "实验组"), each = 20),
  C0 = rnorm(40, mean = 5, sd = 1),
  C1 = rnorm(40, mean = 7, sd = 1.2)
)

用tidyr包的pivot_longer转成ggplot友好的长格式:

library(tidyr)
long_df <- df %>%
  pivot_longer(cols = c(C0, C1), names_to = "指标类型", values_to = "测量数值")

两种绘图方式匹配目标样式

转换后可以直接用原始数据绘图,下面两种方式对应常见的展示需求:

方式1:按C0/C1分面展示

这种方式和你提到的facet思路一致,把C0、C1分成两个子图,每个子图展示实验组和对照组的原始数据点:

library(ggplot2)
ggplot(long_df, aes(x = group, y = 测量数值)) +
  geom_jitter(aes(color = group), width = 0.2, alpha = 0.6) + # 加jitter避免点重叠
  facet_wrap(~指标类型) + # 按C0/C1分面
  labs(x = "分组", y = "数值", title = "实验组vs对照组原始数据分布") +
  theme_bw()

方式2:同图用颜色区分C0/C1

如果不想分面,也可以把C0/C1作为颜色变量,在同一个图里展示两组的原始数据:

ggplot(long_df, aes(x = group, y = 测量数值, color = 指标类型)) +
  geom_jitter(width = 0.2, alpha = 0.6, position = position_dodge(width = 0.3)) +
  labs(x = "分组", y = "数值", title = "实验组vs对照组原始数据分布") +
  theme_bw()

关于geom_bar的说明

geom_bar默认是统计计数,用来展示原始数据的分布并不合适——会把所有点的数值堆叠或计数,反而掩盖原始数据的真实分布。用geom_jitter或geom_point才是展示原始离散数据的正确选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 20:45:33