Я накладываю карту мира из пакета maps
на геометрию растра ggplot2
. Однако этот растр не сосредоточен на основном меридиане (0 град), а на 180 град (примерно Беринговом и Тихоокеанском). Следующий код получает карту и недавнюю карту на 180 градусов:
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()
который дает следующий результат:
Совершенно очевидно, что между многоугольниками, которые находятся на одном конце или другом простого меридиана, есть линии. Мое текущее решение - заменить точки, близкие к первому меридиану, на NA, заменив вызов within
выше:
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()
Это приводит к правильному изображению. У меня теперь есть ряд вопросов:
- Должен быть лучший способ центрирования карты на другом меридиане. Я попытался использовать параметр
orientation
вmap
, но установка этого параметра вorientation = c(0,180,0)
не дала правильного результата, фактически ничего не изменила для объекта результата (all.equal
даноTRUE
). - Избавление от горизонтальных полос должно быть возможным без удаления некоторых полигонов. Возможно, решающий пункт 1. также решает эту проблему.