R语言:从GBIF上检索收集物种分布数据,输出为excel,用ggplot绘制初步展示

代码逻辑:利用R语言,限制范围和物种,在GBIF上进行检索、输出和展示的过程。

以下代码以检索三江源藏野驴、藏原羚、藏羚羊和岩羊为例。输出检索得到的数据为excel,并且用ggplot在三江源shp上展示检索到的物种位点数据。

#从GBIF获取数据--------------
# 安装并加载rgbif包
#install.packages("rgbif")
library(rgbif)
# 安装并加载dplyr包,用于处理数据框
#install.packages("dplyr")
library(dplyr)

# 定义物种名称的向量,我这里检索的是藏野驴、藏原羚、藏羚羊和岩羊
species <- c("Equus kiang", "Procapra picticaudata", "Pantholops hodgsonii", "Pseudois nayaur")

# 定义三江源区域的经纬度范围
lon_min <- 90
lon_max <- 102
lat_min <- 32
lat_max <- 37
results <- data.frame()   # 创建一个空的数据框,用于存储结果

# 循环遍历每个物种,从GBIF获取数据,并添加到结果中
for (sp in species) {
  # 使用occ_search函数搜索物种的分布记录,限制在三江源区域内,只保留有经纬度信息的记录
  data <- occ_search(scientificName = sp, 
                     decimalLongitude = paste(lon_min, lon_max, sep = ","), 
                     decimalLatitude = paste(lat_min, lat_max, sep = ","), 
                     hasCoordinate = TRUE)
  # 提取数据中的data部分,包含物种名称、经纬度、国家等信息
  data <- data$data
  # 将物种名称添加到数据中,方便区分
  data$species <- sp
  # 使用bind_rows函数将数据添加到结果中
  results <- bind_rows(results, data)
}

# 查看结果的维度和前几行
dim(results)
head(results)

#输出为excel--------------
setwd('D:/R/模拟物种分布')    #设置输出的路径
library(writexl)
write_xlsx(results, "results.xlsx")

#用ggplot绘制------------
library(ggplot2)
# 安装并加载sf包,用于处理空间数据
#install.packages("sf")
library(sf)
# 使用st_read函数读取自己的shp文件
sjy <- st_read("D:/arcgis_test/GraProj/sjydata/三江源工程边界/sjy.shp")
#把resluts文件转换为点文件并定义参考系
results_sf <- st_as_sf(results, coords = c("decimalLongitude", "decimalLatitude"))
results_sf <- st_set_crs(results_sf, 4326) #定义参考系为WGS84,它的EPSG是4326
sjy <- st_transform(sjy, 4326) #统一坐标系
# 使用st_intersection函数切掉在shp范围以外的results_sf
inter_results_sf <- st_intersection(results_sf, sjy)
# 使用ggplot函数绘制面和点数据,指定geom_sf来表示空间数据,可以根据需要调整颜色、填充、大小等参数
ggplot() +
  geom_sf(data = sjy, col = "black", fill = "white") +
  geom_sf(data = inter_results_sf, aes(color = species), size = 2) +
  theme_bw()

展示结果如下:

 

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值