如何在R中对预聚合数据应用geom_density_ridges绘制密度脊图?
基于预聚合数据绘制密度脊图的解决方案
可以直接利用geom_density_ridges的weight美学映射,把预聚合后的count列作为权重传入,完全不用展开重复行,具体实现如下:
核心代码实现
# 用预聚合数据绘制密度脊图 dat_summy %>% ggplot(aes(x = age, y = qtr, fill = qtr, weight = count)) + geom_density_ridges(quantile_lines = TRUE, quantile_fun = function(x, ...) quantile(x, .5), alpha = .5)
原理说明
geom_density_ridges支持通过weight参数指定每个观测的权重,这里预聚合后的count值正好对应每个age-qtr组合的样本数量,相当于把原本的重复行用权重的方式传递给密度计算函数,最终绘制出的图形和用原始个体数据绘制的结果完全一致,但处理大数据集时效率会高很多(避免了数据展开带来的内存开销)。
结果一致性验证
如果需要确认两种方式的输出一致,可以对照绘制两张图:
# 原始个体数据绘图(作为对照) p1 <- dat %>% ggplot(aes(x = age, y = qtr, fill = qtr)) + geom_density_ridges(quantile_lines=TRUE, quantile_fun=function(x,...) quantile(x, .5), alpha = .5) # 预聚合数据绘图 p2 <- dat_summy %>% ggplot(aes(x = age, y = qtr, fill = qtr, weight = count)) + geom_density_ridges(quantile_lines = TRUE, quantile_fun = function(x, ...) quantile(x, .5), alpha = .5) # 用gridExtra包并排对比两张图 library(gridExtra) grid.arrange(p1, p2, ncol = 2)
内容的提问来源于stack exchange,提问作者ProductA747
相关产品推荐
相关产品推荐

