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

使用geom_sf绘制跨日界线的Robinson投影地图时闭合边界异常问题

自定义中心的Robinson投影地图问题及解决方法

问题背景

我想制作一幅不以0°经度为中心、跨180°经线两侧的Robinson投影地图,编写的代码如下:

library("rnaturalearthdata")
world <- ne_countries(scale = "medium", returnclass = "sf")
robinson = "+proj=robin +lon_0=-90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs"
transformed = st_transform(world, robinson)
ggplot(data=transformed) + geom_sf(fill = "gray", colour = "black")+theme_bw()

生成的地图方向正确,但所有分割边界呈现“内翻”状态,并在整个地图上延伸。

我希望借助近期包更新找到更简便的解决方案,无需额外转换就能用geom_point()绘制经纬度数据点(之前找到过一个9年前的相关问题,但方法不够简便)。

有效解决方案(L. Tyrone提供)

该方案解决了地图边界问题,同时支持绘制点数据。绘制点数据时,需先将数据框转换为与地图同坐标系的sf对象,否则经纬度会被误读为米单位,最终点会集中在(0,0)附近:

# 模拟数据转换示例
fakedata=data.frame(lat=c(-10,-20,80),lon=c(45,-100,120),tag=c("indian","tropical","arctic"))
transpoint = st_as_sf(fakedata,coords=c("lon","lat"),crs=4326)
dtran = st_transform(transpoint,robinson)

之后可以通过为geom_point或geom_text_repel指定geometry参数和stat="sf_coordinates"来绘制:

geom_point(data=dtran,aes(geometry=geometry,color=tag),stat="sf_coordinates") +
geom_text_repel(data=dtran,aes(geometry=geometry,label=tag),stat="sf_coordinates")

最终效果

成功绘制点数据的Robinson投影地图

内容的提问来源于stack exchange,提问作者beroe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 17:02:41