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

如何在ggplot绘制的中国地图中添加南海诸岛小图?

为中国地图添加南海区域小图的实现方法

现有数据与绘图流程

中国地图的shapefile数据包含bou2_4p.dbf、bou2_4p.shp、bou2_4p.shx三个文件,保存至D:/map data文件夹。

读取地图数据

setwd("D:/map data")
library(rgdal)
china_map = readOGR(file.choose()) # 选择bou2_4p.shp打开

数据预处理与基础地图绘制

library(plyr)
library(ggplot2)
library(viridis)

# 编码转换解决中文乱码
china_map@data$province <- iconv(china_map@data$NAME, from = "CP936", to = "UTF-8")
# 添加ID字段用于数据关联
china_map@data$id = rownames(china_map@data)
# 转换为ggplot兼容的格式
china.points = fortify(china_map, region="id")
china.df = join(china.points, china_map@data, by="id")

# 准备点位数据
data2 <- data.frame(
  city = c("NJ","AH","BJ","CD","CQ"),
  count = c(15,32,45,52,24),
  lat = c(32,31,39,29,29),
  long = c(118,117,116,111,106)
)

# 绘制基础地图
base_plot <- ggplot() +
  geom_polygon(data=china.df, aes(x = long, y = lat, group = group), fill="white", color="grey40") +
  geom_point(data=data2, aes(x = long, y = lat, size=count, color=count, alpha=count)) +
  scale_size_continuous(range=c(1,10)) +
  scale_color_viridis(option="inferno", trans="log") +
  scale_alpha_continuous(trans="log") +
  theme(legend.position = "none")

现有绘制效果:

无南海小图的中国地图

需要实现的效果:

右下角带有南海区域小图的中国地图

添加南海小图的具体步骤

1. 提取南海区域地理数据

从已加载的china_map中筛选出南海诸岛的图层(需确保shapefile包含该区域数据):

# 筛选南海诸岛数据(NAME字段值以实际数据为准)
south_china_sea <- china_map[china_map@data$NAME == "南海诸岛", ]
# 转换为ggplot兼容格式
scs.points <- fortify(south_china_sea, region="id")
scs.df <- join(scs.points, south_china_sea@data, by="id")

2. 绘制南海小图

单独绘制简洁的南海区域小图,去除不必要的元素:

scs_plot <- ggplot() +
  geom_polygon(data=scs.df, aes(x = long, y = lat, group = group), fill="white", color="grey40") +
  # 聚焦南海区域的坐标系范围
  coord_fixed(xlim = c(105, 125), ylim = c(0, 25)) +
  theme_void() # 移除坐标轴、网格等冗余元素

3. 组合主图与小图

使用patchwork包实现图中图布局(需先安装该包):

install.packages("patchwork")
library(patchwork)

# 将小图嵌入主图右下角,调整位置与大小参数适配布局
final_plot <- base_plot +
  inset_element(
    scs_plot,
    left = 0.75, bottom = 0.05,
    right = 0.98, top = 0.3,
    align_to = "plot"
  )

# 输出最终地图
print(final_plot)

注意事项

  • 如果现有shapefile未包含南海诸岛数据,需更换包含完整中国疆域的shapefile文件。
  • 可通过修改inset_element中的位置参数(left/bottom/right/top)微调小图的位置和尺寸,达到最佳视觉效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:53:19