geom_sf对象填充图例符号无法缩小,求可行解决方案
解决ggplot2中sf图例符号缩小至默认尺寸以下的问题
你的问题根源在于:geom_sf的图例符号默认是多边形,你通过override.aes = list(size = x)调整的只是多边形边框的粗细,而非符号本身的填充区域尺寸。当数值小于默认值时,边框变细但填充区域大小不变,视觉上看不出变化;放大时边框变粗,效果才会显现。
要真正缩小图例符号的整体尺寸,有两种实用方法:
方法1:直接调整图例键的宽高(推荐)
在guide_legend中设置keywidth和keyheight参数,直接控制图例符号的整体大小,同时可配合调整边框粗细避免不协调:
library(sf) library(ggplot2) nc <- st_read(system.file("shape/nc.shp", package="sf")) ggplot(nc[1:2,]) + geom_sf(aes(fill=NAME)) + theme( legend.text = element_text(size = 5), plot.margin = margin(0., 0., 0., 0., "cm"), plot.background = element_rect(fill='white', colour = "black", size = 1), legend.box.background = element_rect(color = "black",fill='lightgrey'), legend.box.margin = margin(t = 1, l = 1) ) + guides( fill = guide_legend( keywidth = unit(0.3, "cm"), # 自定义图例符号宽度 keyheight = unit(0.3, "cm"), # 自定义图例符号高度 override.aes = list(size = 0.5) # 同步调细边框,避免比例失衡 ) )
方法2:自定义图例符号绘制逻辑
通过key_glyph指定自定义函数,手动缩小符号的绘制范围:
# 定义缩小版的多边形图例符号绘制函数 small_polygon <- function(data, params, size) { grid::polygonGrob( x = c(0.2, 0.8, 0.8, 0.2), # 缩小x轴绘制范围(默认是0-1) y = c(0.2, 0.2, 0.8, 0.8), # 缩小y轴绘制范围 gp = grid::gpar( fill = data$fill, col = data$colour, lwd = data$size * .pt ) ) } ggplot(nc[1:2,]) + geom_sf(aes(fill=NAME), key_glyph = small_polygon) + theme( legend.text = element_text(size = 5), plot.margin = margin(0., 0., 0., 0., "cm"), plot.background = element_rect(fill='white', colour = "black", size = 1), legend.box.background = element_rect(color = "black",fill='lightgrey'), legend.box.margin = margin(t = 1, l = 1) ) + guides(fill=guide_legend(override.aes = list(size = 0.5)))
两种方法都能实现将图例符号缩小至默认尺寸以下,方法1操作更简洁,适合大多数场景。
内容的提问来源于stack exchange,提问作者jsimpsno
相关产品推荐
相关产品推荐

