使用sf包在巴西地图添加坐标点失败,求解决方案
解决sf+ggplot绘制巴西地图时坐标点错位问题
问题根源
geobr加载的巴西地图默认使用EPSG:4674(SIRGAS 2000)坐标系,而你的坐标点数据集大概率是EPSG:4326(WGS84经纬度),坐标系不匹配导致点无法正确叠加在地图上。
解决步骤
1. 检查并统一坐标系
先确认两者的坐标系信息:
# 查看地图的坐标系 st_crs(brasil) # 查看坐标点数据集的坐标系 st_crs(unidades_lat_long)
若点数据坐标系为EPSG:4326,将其转换为与地图一致的坐标系:
unidades_lat_long <- st_transform(unidades_lat_long, crs = st_crs(brasil))
如果你的点数据未设置坐标系,先手动指定(假设是WGS84经纬度):
st_crs(unidades_lat_long) <- 4326
2. 修正绘图代码
geom_sf会自动识别sf对象的geometry列,无需手动指定aes(geometry = geom);同时调整点的样式和主题参数,匹配期望效果:
library(ggplot2) library(sf) library(geobr) # 加载地图数据 brasil <- read_state(year = 2020, showProgress = FALSE) # 统一坐标系 unidades_lat_long <- st_transform(unidades_lat_long, crs = st_crs(brasil)) # 绘图 ggplot() + geom_sf(data = brasil, fill = "white") + geom_sf(data = unidades_lat_long, color = "black", size = 1.2) + # 调整点大小让显示更清晰 labs(title = "Unidades fixas - Brasil") + theme( legend.position = "none", plot.title = element_text(hjust = 0.5), plot.caption = element_text(hjust = 0, face = "italic", lineheight = 1), axis.title = element_blank(), axis.text = element_blank(), axis.ticks = element_blank(), panel.background = element_blank() )
内容的提问来源于stack exchange,提问作者Rafael Cunha
相关产品推荐
相关产品推荐

