Я хотел бы создать карту США, показывающую границы штатов и округов (т.е. границы штатов в другом цвете). Обычно я делаю это, используя либо импортируемые мной файлы форм, либо используя функцию ggplot2
map_data
. Однако я сталкиваюсь с тремя препятствиями.
1) Я не могу установить gdal
и geos
в своей вычислительной среде, что исключает использование любых файлов фигур или файлов Geo JSON (мои попытки отобразить файлы форм на уровне округов, загруженные с использованием fastshp
не увенчались успехом, но я открыт для любого решения, которое может воспроизвести карту ниже, но с учетом границ штатов).
2) Мне нужно включить Гавайи и Аляску, что исключает использование map_data
с ggplot2
.
3) Мне нужно, чтобы карта включала границы штата и округа, что делает использование usmap
пакета проблематичным c в качестве функции-оболочки для ggplot2
, но без простоты и общей способности настроить до уровня необработанного объекта ggplot2.
4) Кроме того, нельзя использовать sf
пакет b c он имеет зависимость не от библиотеки R (пакет units
зависит от библиотеки C libudunits2
).
Что мне нужно: карта, которая может проецировать Аляску и Гавайи и отображать границы штатов и округов, используя контрастные цвета, и мне нужно выполнить sh все это, не прибегая к пакетам, которые полагаются на rgeos
, rgdal
и / или units
.
То, что я до сих пор пробовал plot_usmap
из пакета usmap
:
library(dplyr)
library(stringr)
library(ggplot2)
library(usmap)
library(mapproj)
devtools::install_github("wmurphyrd/fiftystater")
library(fiftystater)
county_data<-read.csv("https://www.ers.usda.gov/webdocs/DataFiles/48747/PovertyEstimates.csv?v=2529") %>% #
filter(Area_name != "United States") %>%
select(FIPStxt, Stabr, Area_name, PCTPOVALL_2017) %>%
rename(fips = FIPStxt)
crimes <- data.frame(state = tolower(rownames(USArrests)), USArrests)
state_map <- map_data("state")
plot_usmap(data = county_data, values = "PCTPOVALL_2017", color = "white") +
geom_map(data = crimes, aes(map_id = state), map = fifty_states, color= "red") +
geom_path(data = state_map, aes(x =long , y=lat), color= "red")+
expand_limits(x = fifty_states$long, y = fifty_states$lat) +
theme(legend.position = "none") +
theme_map() #no go
plot_usmap(data = county_data, values = "PCTPOVALL_2017", color = "white") +
geom_map(data = crimes, aes(map_id = state), map = fifty_states, color= "red") +
expand_limits(x = fifty_states$long, y = fifty_states$lat) +
theme(legend.position = "none") +
theme_map() #no go
plot_usmap(data = county_data, values = "PCTPOVALL_2017", color = "white") +
geom_map(data = crimes, aes(map_id = state, color= "red"), map = fifty_states) +
expand_limits(x = fifty_states$long, y = fifty_states$lat) +
theme(legend.position = "none") +
theme_map() #no go
Что я подозреваю происходит то, что один слой (исходный код ggplot
) проецируется с использованием системы CRS, отличной от другого уровня, сгенерированного plot_usmap
. Этот второй слой приводит к очень маленькой красной точке (см. Круг на карте ниже). Не уверен, как перепроектировать без установленного geos / gdal. См. Карту ниже с черным кружком, выделяющим красную точку.