我正在尝试R制图软件包。必须努力找到一个希望与制图工作配合使用的美国州shapefile-许多文件似乎太大,等等。我似乎一切顺利,但科罗拉多州错失了位置。
library(cartography)
library(sf)
library(RColorBrewer)
library(maps)
library(ggplot2)
rm(list = ls())
# USA shape file
states <- st_as_sf(map("state", plot = F, fill = TRUE))
#seems to plot correctly here
#ggplot(states) + geom_sf(aes(fill = ID))
usa <- st_transform(states,
CRS("+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=37.5 +lon_0=-96"))
# still seems to plot fine
#ggplot(usa) + geom_sf(aes(fill = ID))
usa <- st_buffer(usa, dist=0)
datamap <- usa
datamap$randoVar <- sample(1:3, length(datamap$ID), replace = T)
datamap_pencil <- getPencilLayer(
x = datamap,
buffer = 500,
size = 400,
lefthanded = F
)
plot(st_geometry(usa), col = "white", border = "black", bg = "lightblue1")
typoLayer(
x = datamap_pencil,
var="randoVar",
col = c("aquamarine4", "yellow3","#3c5cb0"),
lwd = .7,
legend.values.order = 1:3,
legend.pos = "bottomleft",
legend.title.txt = "",
add = TRUE
)
labelLayer(x = datamap, txt = "ID",
cex = 0.9, halo = TRUE, r = 0.15)
我首先注意到,因为当我尝试合并数据文件并使用该功能进行填充时,科罗拉多州出现为“无数据”。同样,上面的代码似乎表明状态宝石学或ID已关闭。我对GIS的了解不足以了解原因。我确实必须更改CRS投影,以便可以缓冲地图文件(getPencilLayer不断抛出自交叉错误,这似乎与R映射很常见)。
关于做什么的任何想法?
嗯,我最终使用了美国人口普查的shapefile进行了修复
https://www2.census.gov/geo/tiger/TIGER2017/STATE/
states <- st_read("#mypath#/tl_2017_us_state/tl_2017_us_state.shp")
states <- states[!(states$NAME %in%
c("Commonwealth of the Northern Mariana Islands", "United States Virgin Islands",
"Puerto Rico", "American Samoa", "Hawaii", "Guam", "Alaska")
), ]
usa <- st_transform(states,
CRS("+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=37.5 +lon_0=-96"))
usa <- st_buffer(usa, dist=0)
不确定如何调整以从map(“ state” ...)获取地理日期,但这对我有用。
使用了这些缓冲区和大小设置(在合并数据之后)
datamap_pencil <- getPencilLayer(
x = datamap,
buffer = 500,
size = 400,
lefthanded = F
)