如何减小ggplot2 size美学映射图例键的垂直间距
问题
请问如何减小size图例中各图例键之间的间距?无需调整另一类color(颜色)图例的间距。
当前使用的简化绘图代码如下:
data %>% ggplot( aes(x=x, y=y, size=z, color=c, alpha=d))+ geom_point()+ scale_size_area(name="Cumulative excess deaths (thousands)", max_size = 70, limits=c(NA, 10000), breaks=c(1, 10, 100,500,1000, 5000))+ geom_abline(slope=1, intercept = 0, size=0.2)+ scale_color_manual(name="World Bank Income group")+ scale_alpha_manual(values=c(0.55,0.2))+ labs(...)+ theme_bw()+ theme( plot.margin = margin(0.5, 0.2, 0.5, 0.5, "cm"), plot.background = element_rect(size = 1), plot.caption.position="plot", legend.position="right", legend.box.margin = margin(2,0,0,0, "cm"), legend.title=element_text(size=8,color="black", hjust=0), legend.text =element_text(size=8,color="black"), legend.spacing = unit(-0.5, "cm"), legend.key.size = unit(1,"line"), panel.grid.minor = element_blank(), panel.grid.major.x = element_blank(), panel.border = element_blank())+ coord_cartesian(clip = 'off')+ guides(alpha=FALSE)+ guides(size=guide_legend(override.aes=list(shape=1),order=1), color = guide_legend(override.aes = list(size=6, alpha=0.55), order=2))
解决方法
不要在全局theme()中修改图例间距参数,这类全局设置会同时作用于所有图例。你只需要在size对应的guide_legend()配置项中单独设置图例键尺寸、间距参数即可,这类参数仅对当前生效的图例有效,完全不会改动color图例的原有间距。
具体修改方式是调整guides()中size图例的配置,添加keyheight参数控制单个图例键的高度(size图例默认给所有键分配统一高度,小尺寸点周围会产生大量空白,缩小该值即可压缩空白),如果需要进一步缩小键与键之间的空隙,可以搭配spacing.y参数(ggplot2 3.5.0及以上版本支持):
guides( alpha = FALSE, size = guide_legend( override.aes = list(shape=1), order = 1, # 调整单个图例键的高度,数值可根据显示效果微调,不要过小避免最大点被裁切 keyheight = unit(0.6, "line"), # 可选:调整图例键之间的垂直间距,数值越小间距越窄 spacing.y = unit(0.1, "line") ), color = guide_legend( override.aes = list(size=6, alpha=0.55), order = 2 # 此处不添加间距相关配置,自动沿用全局theme设置,保持原有间距 ) )
- 你可以根据实际渲染效果反复调整
unit()内的数值,直到size图例的间距符合预期 - 如果使用的ggplot2版本较低不支持
spacing.y参数,仅调整keyheight即可达到压缩间距的效果
内容的提问来源于stack exchange,提问作者Philip
相关产品推荐
相关产品推荐

