如何根据空间位置取值并直接通过world变量在地图国家中心标注名称?
问题解答
可以直接通过world变量实现国家中心标注的需求,无需额外引入其他数据源,修改后的可运行代码如下:
# 加载所需包 library(sf) library(sp) # 提取沙特阿拉伯矢量边界 saudi = world[world$name_long == "Saudi Arabia", ] # 绘制沙特底图 plot(st_geometry(saudi), expandBB = c(0, 0.2, 0.1, 1), col = "gray", lwd = 2) # 叠加周边国家边界 plot(world[0], add = TRUE) # 计算所有国家的几何中心点,取最大多边形的中心避免飞地影响 world_centers <- st_centroid(world, of_largest_polygon = TRUE) # 获取当前绘图窗口的坐标范围 plot_extent <- st_bbox(st_as_sfc(st_bbox(par("usr")))) # 筛选当前可见范围内的国家中心 visible_centers <- st_intersection(world_centers, plot_extent) # 在中心位置标注国家名称,cex可调整文字大小 text(st_coordinates(visible_centers), labels = visible_centers$name_long, cex = 0.7, col = "black")
关键逻辑说明
- 直接基于
world内置的几何字段计算中心坐标,不需要额外调用其他数据接口 - 增加可见范围筛选逻辑,仅标注当前视窗内的国家,不会生成冗余标注
- 可自行调整
text()函数的cex、col、font等参数,适配你的绘图风格需求
参考效果对比
- 当前实现效果:

- 期望标注效果:

内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

