我想创建一个同时显示州和县边界(即州边界颜色不同)的美国地图。我通常使用导入的形状文件或使用ggplot2
的map_data
函数来执行此操作。但是,我面临三个障碍。
1]我无法在计算环境中安装gdal
和geos
,从而无法使用任何形状文件或GeoJSON文件(我尝试映射使用fastshp
加载的县级形状文件的尝试未成功,但我我们欢迎任何可以复制下面的地图但包含州界的解决方案)。
2)我需要包括夏威夷和阿拉斯加,以便从map_data
中排除ggplot2
的使用。
3)我需要地图同时包含州和县的边界,这使usmap
包的使用成为ggplot2
的包装函数时遇到了问题,但没有轻松且通用的功能来定制原始级别ggplot2对象。
4)另外,它不能使用sf
包,因为它具有非R库依赖项(units
包取决于C库libudunits2
)。
[我需要:一张可以投射阿拉斯加和夏威夷并使用对比色显示州和县边界的地图,而我需要完成所有这些工作,而不必依靠任何依赖于rgeos
,rgdal
和/或[ C0]。
[到目前为止,我从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
生成的另一层不同的CRS系统投影的。第二层产生一个非常小的红点(请参见下面的地图中的圆圈)。不知道如何在未安装geos / gdal的情况下重新投影。看到下面的地图,黑色圆圈突出显示红点所在的位置。
ggplot