Добавьте точки в usmap с помощью ggplot в r - PullRequest
0 голосов
/ 21 октября 2018

Мне удалось создать карту США с этим учебным пособием .Когда я попытался добавить к этому дополнительные точки, все они оказались в Южной Дакоте, независимо от того, что я вводил для данных.

library(ggplot2)
library(usmap)
testData <- data.frame(LATITUDE = 20.31557, LONGITUDE = -102.42547)
p <- plot_usmap( regions = "state") 
p + geom_point(data = testData, aes(x = LONGITUDE, y = LATITUDE), color = "red")

1 Ответ

0 голосов
/ 21 октября 2018

Это «интересный» пакет, который не имеет большой добавленной стоимости по сравнению с кодом поста в блоге, из которого были созданы базовые шейп-файлы (однако автор пакета не счел нужным указывать автора поста в блоге в пакете DESCRIPTION, просто привязка к концу README).

Одна вещь, которую автор также не счел нужным сделать, - обеспечить поддержку всего, кроме хороплетов.Ваша проблема в том, что карта находится в одной системе координат, а ваши точки - в другой.

Если вы можете использовать пакеты не-CRAN, albersusa (который некоторое время составлял до того, как автор usamap сделал пакет copypasta) обеспечивает необходимый клей:

library(albersusa) # https://gitlab.com/hrbrmstr/albersusa / https://github.com/hrbrmstr/albersusa
library(ggplot2)
library(sp)

Получите предварительно спроецированную карту США:

us <- usa_composite(proj = "aeqd")

Мы будем использовать встроенные данные "state.center", чтобы получить несколько очков

states_centers <- as.data.frame(state.center)
states_centers$name <- state.name

ОднакоЕсли вы посмотрите справку на сайте state.center, то увидите, что они не предоставляют законных координат для Аляски и Гавайев, мы не можем их использовать:

states_centers <- states_centers[!(states_centers$name %in% c("Alaska", "Hawaii")),]

ПРИМЕЧАНИЕ. Если вы это сделаетеЕсли у вас есть точки на Аляске / Гавайях, вам нужно выбрать функцию 'points_elided () в пакете, чтобы изменить любые точки Аляски или Гавайев.Давний TODO должен был заставить points_elided() поддерживать все преобразования, но мне почти никогда не нужно использовать пакет вне хороплетов, поэтому какое-то время это будет TODO.

Теперь сделайте их правильными координатами для нашегосоставить карту, перейдя от прямой длины / широты к спроецированной системе координат:

coordinates(states_centers) <- ~x+y
proj4string(states_centers) <- CRS(us_longlat_proj)
states_centers <- spTransform(states_centers, CRSobj = CRS(us_aeqd_proj))
states_centers <- as.data.frame(coordinates(states_centers))

и построить их:

us_map <- fortify(us, region="name")

ggplot() +
  geom_map(
    data = us_map, map = us_map,
    aes(x = long, y = lat, map_id = id),
    color = "#2b2b2b", size = 0.1, fill = NA
  ) +
  geom_point(
    data = states_centers, aes(x, y), size = 4, color = "steelblue"
  ) +
  coord_equal() + # the points are pre-projected
  ggthemes::theme_map()

enter image description here

...