使用 ggmap。错误 "Computation failed in `stat_density2d()`: missing value where TRUE/FALSE needed" 是什么意思?

Using ggmap. What the error "Computation failed in `stat_density2d()`: missing value where TRUE/FALSE needed" means?

我正在使用 R 作为创建地图的 GIS 工具。 我想创建地理区域物种分布的等高线或热图。 我想在地图上查看每个物种(动物或植物)存在的位置,并用特定颜色为该区域着色。 我正在使用从 GBIF 下载的数据集。

您可以从我的 GitHub 下载数据集 ([https://github.com/RosarioIacono/Whosebug_question/blob/master/species2t.csv][1])。

species <- read.delim("./species.txt")
library(readr)
species2t <- read_csv("species2t.csv")
View(species2t)


ggmap(map1)+
    stat_density_2d(data = subset(species2t, order=="Anseriformes"),
aes( x = decimalLongitude,
     y = decimalLatitude,
     fill = ..level..),
                    alpha = .3,
                    geom = "polygon",
                    color = species)+
theme(legend.position = "none")

但是我得到一个错误:

Error: Aesthetics must be either length 1 or the same as the data (190): colour

我没有你的数据框,但我认为你的问题出在 n=1 的一组中。这可能是由于您的 species_dens 的一些经度和纬度在地图之外:

library("ggmap")
map <- c(left = -0.7, bottom = 53, right =-0.3 , top =53.6 )

map1<-get_stamenmap(map, maptype = "toner-lite")

#simulate data
species_dens = data.frame(species=c("A","B","A","B"),
decimalLongitude=c(-0.4,-0.5,-0.3,-0.2),
decimalLatitude=c(53.1,53.2,53.3,53.4))

# returns your error
ggmap(map1)+
geom_density_2d(data = species_dens,aes( x = decimalLongitude,
                                             y = decimalLatitude,
                                             colour = species))

从上面可以看出,最后一个数据点不在地图上,因此如果您 geom_density 使用您的限制,物种 "B" 将有 n=1。使用您当前的数据集,如果您将颜色设置为物种,您仍然会得到 n=1:

library(readr)
species2t <- read_csv("species2t.csv")

X=subset(species2t, order=="Anseriformes")
table(X$species)

       Anas crecca Anas platyrhynchos      Anas strepera        Anser anser 
                 1                  1                  1                  1 
   Aythya fuligula        Cygnus olor    Tadorna tadorna 
                 1                  1                  1 

这意味着你不能根据物种上色。但是你看这个订单是怎么分配的:

ggmap(map1)+
stat_density_2d(data = X,
aes( x = decimalLongitude,
     y = decimalLatitude,
     fill = ..level..),
     alpha = .3,
     geom = "polygon")+
theme(legend.position = "none")