用R绘制采样点地图一例

# 绘制采样点分布图 version2
# by Jinlong Zhang
# jinlongzhang01@gmail.com

setwd('C:/Users/admin/Desktop/map')
# 请根据用户名设定工作路径

#### 导入所需要的程序包
library(sf)

## Linking to GEOS 3.9.0, GDAL 3.2.1, PROJ 7.2.1
library(tmap)
library(tmaptools)
library(sp)
library(readxl)
library(grid)

rm(list = ls())

## 读取地图
country <- read_sf('bou2_4l.shp')
# 设定投影
st_crs(country) <- CRS(' proj=longlat datum=WGS84')

sites <-
read_excel('location.xlsx')
# 编辑location.xlsx文件,给出采样点,注意经纬度不要颠倒
head(sites)

## # A tibble: 3 x 3##   name_location longitude latitude##   <chr>             <dbl>    <dbl>## 1 Beijing            116.     39.9## 2 Guangzhou          113.     23.1## 3 Harbin             127.     45.8
coordinates(sites) <- ~ longitude latitude
proj4string(sites) <- CRS(' proj=longlat datum=WGS84')

# 地图
map1 <-
tm_shape(country, # 经度范围
ylim = c(18, 54), xlim = c(70, 140))
tm_lines(col = 'darkgrey', lwd = 1)

tm_layout(
title = 'Sampling sites',
legend.position = c('left', 'bottom'),
inner.margins = c(0.12, 0.03, 0.08, 0.03)
)
tm_shape(sites)
tm_symbols(
# 绘制采样点
shape = 19,
col = 'red',
scale = 0.6,
border.col = NA,
title.shape = 'Sampling Sites',
text = 'name_location',
legend.col.show = TRUE
)
# 显示采样点地名
tm_text(text = 'name_location',
just = 'bottom', size = 0.8)
# 添加经纬网
tm_graticules(x = c(80, 90, 100, 110,
120, 130, 140),
y = c(0, 10, 20, 30,
40, 50),
lwd = 0.5, col = 'lightgrey')
# 指北针
tm_compass(type = 'arrow',
position = c('left', 'top'))
# 比例尺
tm_scale_bar(position = c('left', 'bottom'))
# 横轴
tm_xlab('Longitude', size = 1)
# 纵轴
tm_ylab('Latitude', size = 1)

# 南海诸岛小地图
map2 <-
tm_shape(country,
xlim = c(105, 122), # 经度范围
ylim = c(2, 25)) # 纬度范围
tm_lines(col = 'darkgrey', lwd = .8)
tm_layout(inner.margins = c(0.12, 0.03, 0.08, 0.03))
tm_shape(sites)
tm_dots(
shape = 19,
col = 'red',
scale = 3,
border.col = NA
)
tm_text(text = 'name_location', just = 'bottom',
size = 0.5) # 显示采样点地名

# 保存为6英寸大小的pdf文件
# pdf('sampling_sites.pdf', width = 6, height = 6)
print(map1)

print(map2, vp = viewport(0.90, 0.25, width = 0.3, height = 0.25))
# dev.off()

# 保存为6英寸的tiff文件,lzw压缩,分辨率600dpi
# tiff(
# 'sampling_sites.tiff',
# width = 3600,
# height = 3600,
# res = 600,
# compression = 'lzw'
# )
# print(map1)
# print(map2, vp = viewport(0.90, 0.35, width = 0.3, height = 0.25))

# dev.off()

注意:本文地图仅供参考,不一定适于发表,因使用本代码和相应数据引致任何问题, 本公众号以及维护人员概不负责。

(0)

相关推荐