使用 geom_density_2d_filled 的 R 中的密度图问题

Issues with density plots in R using geom_density_2d_filled

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

Error in seq_len(n) : argument must be coercible to non-negative integer In addition: Warning messages: 1: Computation failed in stat_density2d_filled(): bandwidths must be strictly positive 2: In min(x, na.rm = na.rm) : no non-missing arguments to min; returning Inf 3: In max(x, na.rm = na.rm) : no non-missing arguments to max; returning -Inf 4: In max(f) : no non-missing arguments to max; returning -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 是:Link

如有任何帮助,我们将不胜感激。

谢谢

问题出在你的数据上,而不是代码上。在 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)