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

使用dplyr绘制含双变量的多密度图技术咨询

解决方法:基于汇总频数数据绘制分组密度图

你的数据是按x和group分组后的频数汇总表,直接用你提供的代码没法生成正确的密度图——因为geom_density默认基于原始观测值计算,而非汇总后的计数。下面提供两种用dplyr配合ggplot实现的方案:

方法一:将汇总数据展开为原始观测数据

用dplyr的uncount()函数把频数y还原成对应数量的原始行,再绘制密度图:

library(dplyr)
library(ggplot2)

# 展开数据
df_expanded <- df %>%
  uncount(y)

# 绘制分组密度图
ggplot(df_expanded, aes(x = x, fill = factor(group), group = factor(group))) +
  geom_density(adjust = 1.5, alpha = 0.4) +
  scale_fill_brewer(palette = "Set2") +
  hrbrthemes::theme_ipsum() +
  labs(x = "数值区间", y = "密度", fill = "分组")

方法二:直接使用权重参数(无需展开数据)

如果数据量很大,展开会占用过多内存,可以直接在geom_density中用weight参数指定频数,避免数据展开:

library(dplyr)
library(ggplot2)

ggplot(df, aes(x = x, fill = factor(group), group = factor(group), weight = y)) +
  geom_density(adjust = 1.5, alpha = 0.4) +
  scale_fill_brewer(palette = "Set2") +
  hrbrthemes::theme_ipsum() +
  labs(x = "数值区间", y = "密度", fill = "分组")

说明

  • 把group转成因子factor(group),是为了让ggplot识别它为分类变量,自动分配不同的填充色
  • adjust=1.5用来调整密度曲线的平滑程度,你可以根据需求修改这个值
  • alpha=0.4设置填充色的透明度,方便查看重叠部分

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:00:02