使用ggmap。错误“在stat_density2d()中计算失败:缺少需要TRUE / FALSE的值”是什么意思?

问题描述 投票:0回答:1

我将R用作创建地图的GIS工具。我想创建一个地理区域内物种分布的轮廓或热图。我想在地图上看到每种物种(动物或植物)所在的位置,并用一种​​特定的颜色对该区域进行着色。我正在使用从GBIF下载的数据集。

您可以从我的GitHub([https://github.com/RosarioIacono/stackoverflow_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
r gis heatmap ggmap
1个回答
0
投票

我没有您的数据框,但我认为您的问题来自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")

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.