如何在圆柱等面积投影中添加轴到地图?为什么边界处的多边形线被拉长了?

How to add axis to map in cylindrical equal area projection? Why are the polygon lines at the border stretched out?

目标

  1. 添加标记纬度 30 度、经度 60 度的坐标轴。
  2. 修复围绕~西亚、东欧的多边形线。

问题 1

  1. 指定圆柱等积投影时不知道轴的比例是多少。 (-180 到 180 是~-3.1 到 3.1,-90 到 90 是~1 到 1?)

问题 2

  1. 如何修复围绕西亚或东欧扭曲的世界地图多边形? 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() 向绘图添加点时,可以避免我提交令人尴尬的绘图。希望这可以节省其他人一些时间。