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

geom_density_ridges不绘制样本量为2的分组,如何解决?

ggridges跳过小样本分组的原因及解决办法

问题重现

当使用ggridges绘制Joy图时,仅含2个数据点的分组会被自动跳过,但geom_violin可以正常显示所有分组。示例代码如下:

df <- data.frame(class=factor(c("a","a","a","b","b")),value=c(2,4,5,2,3))
# geom_violin正常显示两个分组
ggplot(df,aes(y=class,x=value)) + geom_violin()
# geom_density_ridges仅显示分组a
ggplot(df,aes(y=class,x=value)) + geom_density_ridges()

二者差异原因

  • geom_violin:针对极小样本做了兼容处理,即使只有2个数据点,也会通过核密度估计生成简化的分布轮廓,不会因样本量不足过滤分组。
  • geom_density_ridges:默认设置了rel_min_height = 0.01的过滤规则——仅保留密度峰值达到整体最高密度1%的分组。仅2个数据点的分组生成的密度曲线峰值极低,无法满足该阈值,因此被自动跳过;同时默认的核密度带宽对极小样本适配性差,进一步加剧了这个问题。

解决办法

调整geom_density_ridges的参数,取消密度峰值限制并优化带宽,即可显示所有分组:

ggplot(df,aes(y=class,x=value)) + 
  geom_density_ridges(rel_min_height = 0, bandwidth = 0.6)
  • rel_min_height = 0:取消密度峰值的最低比例要求,强制显示所有分组的密度曲线。
  • bandwidth = 0.6:手动指定带宽,让小样本的密度曲线轮廓更合理(可根据数据实际情况调整)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 02:17:02