Это «интересный» пакет, который не имеет большой добавленной стоимости по сравнению с кодом поста в блоге, из которого были созданы базовые шейп-файлы (однако автор пакета не счел нужным указывать автора поста в блоге в пакете 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()