如何将map.shp作为小插图放置在ggplot图表右侧?
把GADM地图作为小插图放在ggplot图表右侧的实现方法
我来帮你搞定这个需求!要把法国行政区地图(map.shp)作为小插图放在ggplot散点图的右侧,核心是解决基础绘图系统和ggplot系统不兼容的问题,我们需要先把地图转换成ggplot可处理的对象,再用专门的布局工具组合两个图表。下面是具体的步骤和代码:
1. 加载所需的包
除了你原本用的raster和ggplot2,还需要sf(处理空间数据)和patchwork(轻松组合ggplot图表):
library(raster) library(ggplot2) library(sf) library(patchwork)
2. 获取并转换地图数据
你原本的map.shp是SpatialPolygonsDataFrame类型,需要转换成sf对象才能用ggplot流畅绘制:
# 获取法国一级行政区地图 map.shp <- getData('GADM', country='FRA', level=1) # 转换为sf对象 map_sf <- st_as_sf(map.shp)
3. 绘制主图和小插图
先画出你的主散点图,再把地图做成简洁的小插图(用theme_void()去掉多余的坐标轴元素):
# 主图:mtcars散点图 main_plot <- ggplot(mtcars, aes(x = hp, y = disp)) + geom_point(color = "#2c3e50") + labs(x = "马力(Horsepower)", y = "排量(Displacement)") + theme_bw() # 小插图:法国地图 inset_plot <- ggplot(map_sf) + geom_sf(fill = "#bdc3c7", color = "white", linewidth = 0.3) + theme_void() # 清空主题,让地图更紧凑
4. 组合两个图表
用patchwork的plot_layout()设置宽度比例,让主图占据大部分空间,小图放在右侧:
# 组合图表,宽度比例4:1(主图:小插图) main_plot + inset_plot + plot_layout(widths = c(4, 1))
这样就能得到主散点图右侧带法国地图小插图的组合图表啦!如果你习惯用gridExtra包,也可以用grid.arrange()来实现类似的布局,但patchwork的语法更贴合ggplot的使用习惯。
内容的提问来源于stack exchange,提问作者89_Simple




