使用 geom_density_2d_filled R 中的密度图问题

Posted

技术标签:

【中文标题】使用 geom_density_2d_filled R 中的密度图问题【英文标题】:Issues with density plots in R using geom_density_2d_filled 【发布时间】:2022-01-14 09:15:41 【问题描述】:

我有 xy 位置,我想使用 ggplot 绘制密度图,但是它给了我以下错误:

seq_len(n) 中的错误:参数必须强制为非负数 整数另外:警告消息:1:计算失败 stat_density2d_filled():带宽必须严格为正 2:在 min(x, na.rm = na.rm) : min 没有非缺失参数;返回 Inf 3:在 max(x, na.rm = na.rm) 中:max 没有非缺失参数; 返回 -Inf 4:在 max(f) 中:max 没有非缺失参数; 返回 -Inf

xy 都是数字,没有缺失值。但我仍然不断收到同样的错误。我使用的代码是:

  ggplot(Fish, aes(x=xpos, y=ypos)) + 
geom_density_2d_filled(aes(fill = ..level..), alpha=0.85, breaks= c(0,10^-5, 10^-4,10^-3,10^-2,10^-1,1),
                       contour_var = "ndensity") +
scale_fill_brewer(type = "seq",palette = "Spectral", direction = -1)

此代码适用于其他鱼的 xy 位置的其他数据集。但是这个数据集给出了错误。

带有数据的 CSV 文件的链接是:Link

任何帮助将不胜感激。

谢谢

【问题讨论】:

根据您的描述,这可能是您的数据中的某些内容,而不是您的代码,因此如果没有您的数据样本,将很难提供帮助。 我不知道如何在这里提供数据,但我添加了一个链接来下载带有数据的 .csv 文件。 如果可能,请使用dput(yourdata) 并粘贴输出而不是提供链接。这将确保我们拥有准确的结构来重新创建您的数据。 【参考方案1】:

这是您的数据问题,而不是代码问题。在ypos = 30 (~82%) 和ypos==0 处存在不成比例的ypos 值。这使其计算密度的能力变得复杂(可能会产生NaNInf,因为seq_length() 需要一个数字)。

如果您删除此问题,您粘贴的代码确实有效,因此我建议您仔细检查数据或导致数据的代码,而不是此代码本身。

Fish <- read.csv(".../fish.csv")

NewFish <- Fish[Fish$ypos>0 & Fish$ypos<30,]

ggplot(Fish, aes(x = xpos, y = ypos)) + 
  geom_density_2d_filled(aes(fill = ..level..), alpha=0.85, breaks= c(0,10^-5, 10^-4,10^-3,10^-2,10^-1,1),
                         contour_var = "ndensity") +
  scale_fill_brewer(type = "seq",palette = "Spectral", direction = -1)

【讨论】:

以上是关于使用 geom_density_2d_filled R 中的密度图问题的主要内容,如果未能解决你的问题,请参考以下文章

R语言使用ggplot2包使用geom_density()函数绘制基础密度图实战(density plot)

R语言使用ggplot2包使用geom_density()函数绘制密度图(填充色线性设置)实战(density plot)

R语言使用ggplot2包使用geom_density()函数绘制分组密度图(线条色彩添加均值线)实战(density plot)

R语言使用ggplot2包使用geom_density()函数绘制分组密度图(分组拆分画板基于facet)实战(density plot)

R语言使用ggplot2包使用geom_density()函数绘制密度图(连续色彩离散色彩梯度色彩)实战(density plot)

R语言使用ggplot2包使用geom_density()函数绘制分组密度图(改变图例位置移除图例)实战(density plot)