Usa un centro diferente al del primer meridiano para trazar un mapa del mundo
Estoy superponiendo un mapa del mundo desde elmaps
paquete en unggplot2
geometría de la trama Sin embargo, esta trama no está centrada en el primer meridiano (0 grados), sino en 180 grados (aproximadamente el Mar de Bering y el Pacífico). El siguiente código obtiene el mapa y lo actualiza en 180 grados:
require(maps)
world_map = data.frame(map(plot=FALSE)[c("x","y")])
names(world_map) = c("lon","lat")
world_map = within(world_map, {
lon = ifelse(lon < 0, lon + 360, lon)
})
ggplot(aes(x = lon, y = lat), data = world_map) + geom_path()
que produce el siguiente resultado:
Obviamente, hay líneas dibujadas entre polígonos que están en un extremo o en el otro del primer meridiano. Mi solución actual es reemplazar los puntos cercanos al meridiano principal por NA, reemplazando elwithin
Llame arriba por
world_map = within(world_map, {
lon = ifelse(lon < 0, lon + 360, lon)
lon = ifelse((lon < 1) | (lon > 359), NA, lon)
})
ggplot(aes(x = lon, y = lat), data = world_map) + geom_path()
Lo que lleva a la imagen correcta. Ahora tengo una serie de preguntas:
Debe haber una mejor manera de centrar el mapa en otro meridiano. Intenté usar elorientation
parámetro enmap
, pero configurando esto paraorientation = c(0,180,0)
no dio el resultado correcto, de hecho, no cambió nada al objeto de resultado (all.equal
cedióTRUE
).Deshacerse de las franjas horizontales debería ser posible sin eliminar algunos de los polígonos. Podría ser que resolver el punto 1. también resuelva este punto.