求助:寻找适配特定数据结构的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
相关产品推荐
相关产品推荐

