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

如何在ggplot2中按变量绘制分布并添加总体分布小提琴图?

解决方法

要添加总体人群的小提琴图,核心是先构造包含“总体”类别的数据集,再用ggplot绘制:

1. 预处理数据集

把原数据复制一份,将COUNTRY列替换为“总体”,然后和原数据合并:

# 原数据
df <- data.frame(ID = 1:200, 
                 M500 = rnorm(200),
                 COUNTRY = rep( c("PERU", "MEXICO", "COLOMBIA"),length.out = 200))

# 构造包含总体的数据集
df_total <- df
df_total$COUNTRY <- "总体"
df_combined <- rbind(df, df_total)

2. 修改绘图代码

用合并后的数据集df_combined绘图,此时x轴会自动包含四个类别(PERU、MEXICO、COLOMBIA、总体):

library(ggplot2)

ggplot(df_combined, aes(x = COUNTRY, y = M500, color = COUNTRY, fill = COUNTRY)) +
  geom_violin(alpha = 0.5, trim = TRUE) +
  geom_point(position = position_jitter(width = 0.1), alpha = 0.5, size = 2) +
  stat_summary(fun = "mean", geom = "crossbar", color = "black", size = 0.5) +
  scale_color_brewer(palette = "Set1") +
  scale_fill_brewer(palette = "Set1") +
  theme_minimal() +
  labs(title = "不同国家与总体人群M500分布对比", x = "类别", y = "M500")

补充说明

  • 合并数据集后,“总体”对应的所有M500值就是原数据的全部样本,绘制出的小提琴图就是总体分布
  • 如果想让“总体”的颜色和其他国家区分更明显,可以手动指定颜色,替换掉scale_color_brewer()和scale_fill_brewer():
    scale_color_manual(values = c("PERU" = "#E41A1C", "MEXICO" = "#377EB8", "COLOMBIA" = "#4DAF4A", "总体" = "#984EA3"))
    scale_fill_manual(values = c("PERU" = "#E41A1C", "MEXICO" = "#377EB8", "COLOMBIA" = "#4DAF4A", "总体" = "#984EA3"))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 19:12:48