Я видел примеры этого в нескольких местах, в том числе в статье ggmap в Rjournal (https://journal.r-project.org/archive/2013-1/kahle-wickham.pdf) и посмотрите это для другого пошагового руководства - https://markhneedham.com/blog/2014/11/17/r-ggmap-overlay-shapefile-with-fill-polygon-of-region/
Проблема, с которой я столкнулся, просто реализует это. Это кажется прямым, но я что-то упускаю.
Я использую шейп-файл округов Висконсин из Департамента природных ресурсов Висконсина (бесплатно) https://data-wi-dnr.opendata.arcgis.com/datasets/8b8a0896378449538cf1138a969afbc6_3%geometry=-110.7432C42.025%2C-68.93%2C47.48
Вот код:
library(rgdal)
shpfile <- readOGR(dsn = "[file path to the shapefile directory]",
stringsAsFactors = FALSE )
Я могу просто построить шейп-файл, используя plot(shpfile)
. Затем я конвертирую это в формат, подходящий для построения графика в ggplot. Во многих примерах используется «fortify», но, похоже, он был заменен на «tidy», который является частью пакета «broom». FWIW, пробовал с fortify и получил тот же результат.
library(broom)
library(ggplot2)
library(ggmap)
tidydta <- tidy(shpfile, group=group)
Теперь я могу успешно построить шейп-файл в ggplot как многоугольник.
ggplot() +
geom_polygon(data=tidydta,
mapping=aes(y=lat , x=long, group=group),
color="dark red", alpha=.2) +
theme_void()
Затем я извлекаю фоновую карту с помощью ggmap.
wisc <- get_map(center = c(lon= -89.75, lat=44.75), zoom=7, maptype="toner")
Проблема в том, что я не могу их совмещать. Я предполагаю, что что-то не так с аккуратным преобразованием, или мне не хватает шага. Я получаю сообщение об ошибке:
in min (x): для min нет непустых аргументов; возвращение Inf
что, я думаю, происходит потому, что у меня где-то есть вектор нулевой длины.
Вот команда:
ggmap(wisc) +
geom_polygon(aes(x=long, y=lat, group=group),
data=tidydta,
color="dark red", alpha=.2, size=.2)
Я успешно добавил на карту точки с геокодированием, используя geom_point, но я застрял с многоугольником.
Кто-нибудь может сказать мне, что я делаю не так?