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

为何ggridridges图在无负数值数据中显示负数值分布?

问题原因

这是核密度估计(KDE)的固有特性导致的:

  • geom_density_ridges默认用核密度算法拟合分布曲线,核函数会围绕每个数据点生成平滑的分布形态,并自然向数据范围外延伸。setosa的花瓣宽度本身集中在0附近(大多在0.1-0.6之间),所以拟合出的曲线会向负数区间延伸,形成你看到的“负数值分布”。
  • coord_cartesian(xlim=c(0,4))只是裁剪了图表的显示范围,并没有改变曲线的计算逻辑——曲线是基于完整数据集和KDE算法生成的,哪怕原始数据没有负数,拟合结果依然会包含负数区间的部分。
两种解决办法

如果不想显示负数部分的曲线,可以选其中一种方式处理:

  1. 用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"))
    
  2. 在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 22:32:50