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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:50:07