You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:06:02