我想创建一张显示州和县边界(即不同颜色的州边界)的美国地图。我通常使用导入或使用的形状文件来执行此操作ggplot2
's map_data
功能。然而,我面临三个障碍。
1)我无法安装gdal
and geos
在我的计算环境中,以便排除使用任何形状文件或 GeoJSON 文件(我尝试映射使用加载的县级形状文件fastshp
尚未成功,但我愿意接受任何可以重现下面的地图但包含州边界的解决方案。
2)我需要包括夏威夷和阿拉斯加,这样就排除了使用map_data
from ggplot2
.
3)我需要地图包含州和县边界,这需要使用usmap
包有问题,因为它的包装函数ggplot2
但没有轻松和一般的能力来定制原始 ggplot2 对象的级别。
4)此外,不能使用sf
包 bc 它具有非 R 库依赖项(units
包依赖于C库libudunits2
).
我需要什么:一张可以投影阿拉斯加和夏威夷并使用对比色显示州和县边界的地图,我需要完成所有这一切,而无需诉诸任何依赖的软件包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 的情况下重新投影。请参阅下面的地图,其中黑色圆圈突出显示红点所在的位置。