为何ggridridges图在无负数值数据中显示负数值分布?
问题原因
这是核密度估计(KDE)的固有特性导致的:
geom_density_ridges默认用核密度算法拟合分布曲线,核函数会围绕每个数据点生成平滑的分布形态,并自然向数据范围外延伸。setosa的花瓣宽度本身集中在0附近(大多在0.1-0.6之间),所以拟合出的曲线会向负数区间延伸,形成你看到的“负数值分布”。coord_cartesian(xlim=c(0,4))只是裁剪了图表的显示范围,并没有改变曲线的计算逻辑——曲线是基于完整数据集和KDE算法生成的,哪怕原始数据没有负数,拟合结果依然会包含负数区间的部分。
两种解决办法
如果不想显示负数部分的曲线,可以选其中一种方式处理:
- 用
scale_x_continuous替代coord_cartesian,把超出范围的部分“挤压”到边界:ggplot(iris, aes(Petal.Width, Species))+ ggridges::geom_density_ridges()+ scale_x_continuous(limits = c(0, 4), oob = scales::squish)+ theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), panel.background = element_blank(), axis.line = element_line(colour = "black")) - 在
geom_density_ridges里设置trim = TRUE,让曲线在数据最小值处截断:ggplot(iris, aes(Petal.Width, Species))+ ggridges::geom_density_ridges(trim = TRUE)+ coord_cartesian(xlim=c(0, 4))+ theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), panel.background = element_blank(), axis.line = element_line(colour = "black"))
内容的提问来源于stack exchange,提问作者braun_tube
相关产品推荐
相关产品推荐

