使用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
相关产品推荐
相关产品推荐

