R语言使用rnaturalearth绘制世界地图时消除上下空白的方法
解决rnaturalearth绘制世界地图时的上下空白问题
你的问题主要出在两个地方:一是代码存在语法错误导致部分设置未生效,二是默认投影和画布比例不匹配。以下是彻底消除所有空白的完整方案:
完整可行代码
library(rnaturalearth) library(ggplot2) library(sf) # 获取世界地图数据(type="map_units"可省略,不影响结果) world <- ne_countries(scale = "small", returnclass = "sf") # 绘制无空白世界地图 p <- ggplot() + geom_sf(data = world, fill = "#cccccc", color = "#333333") + # 关键:使用圆柱投影消除上下空白,关闭扩展边距 coord_sf(expand = FALSE, crs = st_crs("ESRI:54009")) + # 彻底清除所有多余元素 theme_void() + theme( plot.margin = margin(0, 0, 0, 0, unit = "pt"), plot.background = element_rect(fill = "white", color = NA) ) # 保存图片,设置匹配地图的宽高比(2.5:1左右) ggsave("world_map_no_margins.jpg", plot = p, width = 10, height = 4, dpi = 300, bg = "white")
关键设置说明
- 修复语法错误:你之前的代码中,
ggthemes::theme_map()后面缺少+,导致coord_sf(expand = FALSE)和后续主题设置完全没生效,这是核心问题之一。 - 选择合适投影:
ESRI:54009是世界圆柱等面积投影,能让地图横向铺满画布,纵向没有多余空白,比默认的WGS84投影更适合全图展示。 - 关闭扩展边距:
expand = FALSE强制移除ggplot默认添加的画布边缘空白,让地图紧贴画布边界。 - 彻底清除主题元素:
theme_void()直接移除所有轴、网格、标题,再配合plot.margin = margin(0,0,0,0)清除画布外的所有边距。 - 匹配宽高比:世界地图的实际宽高比约为2.5:1(比如10x4),保存时用这个比例能让地图刚好填满画布,不会出现上下或左右空白。
内容的提问来源于stack exchange,提问作者ClaireR
相关产品推荐
相关产品推荐

