Как сдвинуть координаты в карте ggplot2 для любого произвольного диапазона долготы - PullRequest
0 голосов
/ 01 января 2019

Я делаю карту, используя ggplot, и я хочу иметь возможность центрировать карту вокруг Тихого океана, рисуя точки на карте.

enter image description here

Оказывается, я могу сделать сдвиг карты, используя опцию wrap maps :: map.Однако я не уверен, как именно сместить точки, чтобы они соответствовали моей новой смещенной карте.Я нашел, как это сделать, когда я воссоздаю карту по центру Тихого океана с переносом (0, 360), но я не уверен, как это сделать для произвольных единиц сдвига.Я уверен, что это довольно просто, но я не могу понять это.Любые идеи?

library(maps)
library(tidyverse)

# Pacific centered map
shift_value_1 <- 0
shift_value_2 <- 360

# Regular map, how about new values of shift_value_1 and shift_value_2? (e.g. -20, 325)
shift_value_1 <- -180
shift_value_2 <- 180


map_world_df <- map_data('world', wrap=c(shift_value_1, shift_value_2)) %>%
  dplyr::filter(region != "Antarctica")


country_shapes <-  geom_polygon(data = map_world_df, 
                                aes(x=long, y = lat, group = group),
                                fill = "gainsboro",
                                color = "gainsboro",
                                size = 0.15)

nodes <- data.frame(names = c("A", "B", "C", "D"), 
                    lat = c(64.220241, 10.278386, 64.710869, 19.432564), 
                    lon = c(135.75572, 34.33927, -151.20003, -99.13323))


nodes$lon[nodes$lon <0] <- nodes$lon[nodes$lon <0] + (shift_value_1 + shift_value_2)

ggplot() + 
  country_shapes +
  geom_point(data = nodes, aes(x=lon, y = lat))

enter image description here

Я хотел бы иметь возможность выбрать произвольные диапазоны долготы и соответственно сместить точки, вместо этого яполучить неправильно расставленные очки.

1 Ответ

0 голосов
/ 02 января 2019

Прежде всего, при использовании переноса с двумя ограничениями, вы должны убедиться, что они суммируются правильно.Упаковка - это не то же самое, что установка границ.Например, в комментарии к коду вы просите карту продолжить от -25 до 320, что не соответствует.Полученная карта будет иметь некоторые странные артефакты (более заметные, если вы попробуете более крупные ошибки, например (-25, 150)).У вас всегда должно быть shift_value2 - shift_value1 == 360, например, (-25, 335).Сдвиг долготы на любое другое значение всегда будет давать ошибки.Вы можете добавить xlim=c(-25, 320) к вызову map (), если хотите, конечно.Но это должно быть сделано в отдельном вызове map () (как объяснено в документации: xlim применяется перед переносом, поэтому их объединение приводит к удалению части карты).Таким образом, для ограниченной карты вы, вероятно, должны сделать

mymap <- map(wrap=c(-25, 335), fill=TRUE, plot=FALSE)
map(mymap, xlim=c(-25, 250),...)

Но в этом нет необходимости при использовании ggplot2 для построения карты, поскольку эти ограничения карты применяются после вызова map () и переноса.

Смещение произвольной точки просто означает сложение (или вычитание) 360, пока оно не окажется между двумя значениями.В большинстве случаев должно работать следующее:

lon[lon < shift_value1] <- lon[lon < shift_value1] + 360
lon[lon > shift_value2] <- lon[lon > shift_value2] - 360
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...