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

RStudio中ggridges绘图空白且出现Picking joint bandwidth of NaN错误求助

问题原因及解决方法

问题根源

你遇到的空白图和Picking joint bandwidth of NaN提示,核心原因是每个分组(NoFct + para)仅包含1个数据点。密度曲线(density)的计算需要至少2个样本点来估算带宽和分布形态,单数据点无法生成有效的密度估计,因此ggridges无法绘制出任何内容。

查看你的长格式数据sample_long,每个No对应的nm和nm1各只有1个值,比如No=0时,para=nm有1个值,para=nm1也只有1个值,所有分组都是单数据点,自然无法计算密度。

解决方案

方案1:补充同组数据(推荐)

如果你的实际场景可以收集更多同组数据,比如每个No下的nm和nm1各有多个重复观测,就能正常生成密度曲线。以下是模拟补充数据的示例:

# 模拟每个No下各有5个重复数据
set.seed(123)
sample_expanded <- sample %>%
  rowwise() %>%
  mutate(
    nm = list(rnorm(5, mean = nm, sd = 100)),
    nm1 = list(rnorm(5, mean = nm1, sd = 100))
  ) %>%
  unnest(c(nm, nm1))

# 转换长格式并绘图
sample_long_expanded <- pivot_longer(sample_expanded, cols = c(nm, nm1), names_to = "para")
sample_long_expanded %>%
  mutate(NoFct = fct_rev(as.factor(No))) %>%
  ggplot(aes(y = NoFct)) +
  geom_density_ridges(
    aes(x = value, fill = para), 
    alpha = .8
  )

方案2:改用适合单数据点的可视化方式

如果无法补充数据,换用能展示单数据点的几何层,比如结合geom_point或geom_jitter,也可以保留ggridges的主题风格:

示例1:用点展示每个分组的数值

sample_long %>%
  mutate(NoFct = fct_rev(as.factor(No))) %>%
  ggplot(aes(y = NoFct, x = value, color = para)) +
  geom_point(size = 3) +
  theme_ridges() # 保留ggridges的主题风格

示例2:用ridgeline模拟单数据点的"密度"(仅作展示)

如果一定要用ridgeline样式,可以强制设置极小带宽来模拟单数据点的尖峰:

sample_long %>%
  mutate(NoFct = fct_rev(as.factor(No))) %>%
  ggplot(aes(y = NoFct)) +
  geom_density_ridges(
    aes(x = value, fill = para),
    alpha = .8,
    bandwidth = 1, # 强制设置极小带宽
    scale = 0.5 # 调整ridge高度
  )

注:这种方式效果有限,仅适合必须用ridgeline风格的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 15:53:21