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

如何调整plot.sf中颜色图例的宽高参数?(仿spplot实现)

如何调整plot.sf颜色图例的宽高(类似spplot的效果)

你说的没错——plot.sf自带的图例控制参数确实有点受限:当设置key.pos=1(底部图例)时,key.size只能调整高度,没法直接像spplot那样同时指定宽高。不过有三种实用的方法可以解决这个问题:

方法1:用sf原生参数(新版本推荐)

如果你的sf版本是1.0.0及以上,其实已经新增了key.width参数,可以直接和key.size配合,同时控制图例的宽高,用法和spplot的逻辑非常接近:

library(sf)
nc_sf <- st_read(system.file("shape/nc.shp", package="sf"))

plot(nc_sf["AREA"], 
     main = "sf with custom legend size", 
     key.pos = 1, 
     key.size = lcm(1.2),  # 控制图例高度(厘米单位)
     key.width = lcm(8))   # 控制图例宽度(厘米单位)

你可以根据需求调整lcm()里的数值,轻松实现和spplot一样的宽高控制效果。

方法2:调整绘图边距间接控制(兼容旧版本)

如果你的sf版本比较旧,不支持key.width,可以通过调整绘图边距来间接扩大图例的宽度。plot.sf的图例会占用绘图区域的边距空间,我们用par(mar)扩大底部边距后,图例就能横向展开:

library(sf)
nc_sf <- st_read(system.file("shape/nc.shp", package="sf"))

# 调整底部边距(第一个数值代表底部边距,单位是行)
par(mar = c(6, 4, 4, 2) + 0.1)  
plot(nc_sf["AREA"], 
     main = "sf with adjusted legend width via mar", 
     key.pos = 1, 
     key.size = lcm(1.2))  # 控制高度,宽度由边距空间决定

这种方法不需要额外依赖包,适合快速调整旧版本的图例效果。

方法3:手动绘制图例(完全自定义)

如果需要极致的控制(比如精确到像素的尺寸、自定义刻度样式),可以先隐藏默认图例,再用基础绘图工具手动添加:

library(sf)
library(fields)  # 需要先安装:install.packages("fields")

nc_sf <- st_read(system.file("shape/nc.shp", package="sf"))

# 先绘制地图,不显示默认图例
plot(nc_sf["AREA"], main = "sf with fully custom legend", key.pos = NULL)

# 获取数据范围和颜色映射
area_minmax <- range(nc_sf$AREA)
color_palette <- sf.colors(10)

# 手动添加底部图例,精确控制宽高
image.plot(
  zlim = area_minmax,
  col = color_palette,
  legend.only = TRUE,
  horizontal = TRUE,
  legend.width = 8,  # 宽度(单位:字符)
  legend.height = 1, # 高度(单位:字符)
  mar = c(3, 0, 0, 0),
  axis.args = list(at = seq(area_minmax[1], area_minmax[2], length.out = 5)),
  xpd = TRUE,
  plot.axes = axis(1, at = seq(area_minmax[1], area_minmax[2], length.out = 5))
)

这种方法完全脱离plot.sf的默认图例系统,灵活性和spplot不相上下,适合需要高度定制的场景。

小总结

  • 新版本sf直接用key.width + key.size就能快速搞定,最方便;
  • 旧版本可以通过调整par(mar)间接控制宽度;
  • 追求极致自定义就手动绘制图例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:58:12