如何在R中绘制不同精度的地图 现有巴西地图代码如何显示州界
问题描述
如何在R中绘制可调整国家展示精度的地图?现有一段用于绘制巴西地图的代码,需要让生成的地图展示巴西各州的边界,实现方式如下。
原始代码
world <- ne_countries(scale = "medium", returnclass = "sf") class(world) sites <- data.frame(Longitude = c(-55.8683, -42.9999, -39.0676, -35.1046, -39.7717, -42.4000, -48.9946, -41.0526, -53.0000), Latitude = c(-1.7670, -5.0951, -13.3724, -8.7500, -18.7747, -5.0892, -12.4332, -21.6488, 4.0040)) row.names(sites) <- c("1 Oriximiná-PA", "2-7 Timon-MA", "3 Valença-BA", "4 Tamandaré-PE", "5 Guriri-ES", "6 Teresina-PI", "8-9 Brasil", "10 São João da Bara-RJ", "11 Guiana Francesa") sites sites$Cidades <- c("Oriximiná - PA", "Timon - MA", "Valença - BA", "Tamandaré - PE", "Guriri - ES", "Teresina - PI", "Brasil - BR", "São João da Bara - RJ", "Guiana Francesa - GF") sites ggplot(data = world) + geom_sf() + geom_point(data = sites, aes(x = Longitude, y = Latitude, shape= Cidades), size = 3) + scale_shape_manual("Cidades", values = c(17, 15, 13, 7, 4, 0, 6, 19, 1)) + coord_sf(xlim = c(-60, -29), ylim = c(-23, 6), expand = FALSE) + theme(text = element_text(size=10), plot.title = element_text(size=12, hjust=0.5), axis.text.x = element_text(size = 10, angle=0, hjust=1), axis.text.y = element_text(size = 10, angle=0, vjust=1), axis.title.x = element_text(size = 9, angle=0), axis.title.y = element_text(size = 9, angle=90))
修改方案
你当前使用的ne_countries()接口返回的是国家级别的矢量边界,仅能展示国家轮廓,想要展示巴西各州边界,需要调用同包的ne_states()接口获取巴西的州级矢量数据,具体修改步骤如下:
- 第一步:保留原有国家底图数据用于展示周边国家轮廓,新增巴西州级数据拉取逻辑
# 新增代码,拉取巴西州级边界,scale参数可调整精度,可选low/medium/high,精度越高加载速度越慢 brazil_states <- ne_states(country = "Brazil", scale = "medium", returnclass = "sf")
- 第二步:调整ggplot的图层叠加顺序,在国家底图之后、点位绘制之前,新增巴西州边界的图层即可,修改后的绘图代码如下:
ggplot() + # 先画全球国家底图,展示周边区域 geom_sf(data = world) + # 叠加巴西州级边界,可自定义颜色、线宽突出州界 geom_sf(data = brazil_states, fill = NA, color = "gray20", linewidth = 0.3) + # 保留原有点位绘制逻辑 geom_point(data = sites, aes(x = Longitude, y = Latitude, shape= Cidades), size = 3) + scale_shape_manual("Cidades", values = c(17, 15, 13, 7, 4, 0, 6, 19, 1)) + coord_sf(xlim = c(-60, -29), ylim = c(-23, 6), expand = FALSE) + theme(text = element_text(size=10), plot.title = element_text(size=12, hjust=0.5), axis.text.x = element_text(size = 10, angle=0, hjust=1), axis.text.y = element_text(size = 10, angle=0, vjust=1), axis.title.x = element_text(size = 9, angle=0), axis.title.y = element_text(size = 9, angle=90))
内容的提问来源于stack exchange,提问作者Thiago Soares
相关产品推荐
相关产品推荐

