如何在圆柱等面积投影中添加轴到地图?为什么边界处的多边形线被拉长了?
How to add axis to map in cylindrical equal area projection? Why are the polygon lines at the border stretched out?
目标
- 添加标记纬度 30 度、经度 60 度的坐标轴。
- 修复围绕~西亚、东欧的多边形线。
问题 1
- 指定圆柱等积投影时不知道轴的比例是多少。 (-180 到 180 是~-3.1 到 3.1,-90 到 90 是~1 到 1?)
问题 2
- 如何修复围绕西亚或东欧扭曲的世界地图多边形?
wrap = TRUE
修复了大部分多边形问题,但仍然存在。
样本
library(mapproj)
library(maps)
# World Map, cylindrical equal area projection
map(database= 'world',
xlim=c(-180,180),
ylim=c(-90,90),
projection='cylequalarea',
parameters = 0,
fill=T,
col="#f2f2f2",
bg="white",
lty=1,
lwd=1,
orientation=c(90,0,225),
resolution=0,
wrap=T,
)
# Default axis
map.axes()
# Desired axis
axis(1,
at=c(-120,-60,0,60,120),
labels = c('-120','-60','0','60','-120'),
pos=-90)
地图
以下是适合我的方法:
CylEqAreaMAP <- function(){
library(mapproj)
library(maps)
# World Map, cylindrical equal area projection
map(database = "world2",
regions = ".",
exact = FALSE,
boundary = FALSE,
interior = FALSE,
lty = 0,
projection='cylequalarea', parameters = 0,
fill = TRUE,
col = '#f2f2f2',
plot = TRUE,
add = FALSE,
namesonly = FALSE,
xlim = c(0,360), ylim = c(-90,90),
wrap = TRUE,
resolution = 1,
type = "l", bg = par("bg"),
myborder = 0.01, namefield="name")
# Desired axis
## long
axis(1,
at=c(-2.05,-1,0,1,2.05),
labels = c(parse(text = '60^o*E'),parse(text = '120^o*E'),parse(text = '180^o'),parse(text = '120^o*W'),parse(text = '60^o*W')),
lwd.ticks = 1,
lwd = 0,
pos = -1.1,
tck =0.01,
cex.axis = 0.75
)
## lat
axis(2,
at=c(-0.67,-0.33,0,0.33,0.67),
labels = c(parse(text = '60^o*S'),parse(text = '30^o*S'),parse(text = '0^o'),parse(text = '30^o*N'),parse(text = '60^o*N')),
las =1,
lwd =0,
lwd.ticks = 1,
tck =0.01,
cex.axis = 0.75
)
# title
title("Site Locations")
}
上面的代码创建了这张地图,projection = ''
当使用 mapproject()
向绘图添加点时,可以避免我提交令人尴尬的绘图。希望这可以节省其他人一些时间。
目标
- 添加标记纬度 30 度、经度 60 度的坐标轴。
- 修复围绕~西亚、东欧的多边形线。
问题 1
- 指定圆柱等积投影时不知道轴的比例是多少。 (-180 到 180 是~-3.1 到 3.1,-90 到 90 是~1 到 1?)
问题 2
- 如何修复围绕西亚或东欧扭曲的世界地图多边形?
wrap = TRUE
修复了大部分多边形问题,但仍然存在。
样本
library(mapproj)
library(maps)
# World Map, cylindrical equal area projection
map(database= 'world',
xlim=c(-180,180),
ylim=c(-90,90),
projection='cylequalarea',
parameters = 0,
fill=T,
col="#f2f2f2",
bg="white",
lty=1,
lwd=1,
orientation=c(90,0,225),
resolution=0,
wrap=T,
)
# Default axis
map.axes()
# Desired axis
axis(1,
at=c(-120,-60,0,60,120),
labels = c('-120','-60','0','60','-120'),
pos=-90)
地图
以下是适合我的方法:
CylEqAreaMAP <- function(){
library(mapproj)
library(maps)
# World Map, cylindrical equal area projection
map(database = "world2",
regions = ".",
exact = FALSE,
boundary = FALSE,
interior = FALSE,
lty = 0,
projection='cylequalarea', parameters = 0,
fill = TRUE,
col = '#f2f2f2',
plot = TRUE,
add = FALSE,
namesonly = FALSE,
xlim = c(0,360), ylim = c(-90,90),
wrap = TRUE,
resolution = 1,
type = "l", bg = par("bg"),
myborder = 0.01, namefield="name")
# Desired axis
## long
axis(1,
at=c(-2.05,-1,0,1,2.05),
labels = c(parse(text = '60^o*E'),parse(text = '120^o*E'),parse(text = '180^o'),parse(text = '120^o*W'),parse(text = '60^o*W')),
lwd.ticks = 1,
lwd = 0,
pos = -1.1,
tck =0.01,
cex.axis = 0.75
)
## lat
axis(2,
at=c(-0.67,-0.33,0,0.33,0.67),
labels = c(parse(text = '60^o*S'),parse(text = '30^o*S'),parse(text = '0^o'),parse(text = '30^o*N'),parse(text = '60^o*N')),
las =1,
lwd =0,
lwd.ticks = 1,
tck =0.01,
cex.axis = 0.75
)
# title
title("Site Locations")
}
上面的代码创建了这张地图,projection = ''
当使用 mapproject()
向绘图添加点时,可以避免我提交令人尴尬的绘图。希望这可以节省其他人一些时间。