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

如何消除ggplot2中两个图例间的巨大间距?

解决ggplot2中两个图例间距过大的问题

问题出在你设置legend.box = "vertical"后,默认的图例框间距参数值过大,导致两个图例之间出现不必要的空白。你可以通过以下调整来修复:

  1. 在theme()中添加legend.box.spacing参数,控制两个图例之间的垂直间距,单位可用pt、mm等,根据需求设置数值(比如unit(2, "pt"))
  2. 可选:调整legend.margin减少单个图例内部的边距,进一步优化紧凑度

修改后的完整代码如下(新增参数已标注):

pchla.pco2.l <- ggplot(data = surf.new) +
  geom_point(aes(x =pCO2, y = pchla, color = Area, shape= factor(Location)), size =4)  +
  labs(x=expression(bold(paste("Log(", bolditalic('p'), "CO"['2'],"+1)"))), y=expression(bold(paste("Log (Chl-",bolditalic ("a"), " +1)"))), 
       title =expression(bold(paste(bolditalic('p'), "CO"['2']," vs. <20 µm Chl-", bolditalic ("a"))))) +
  geom_smooth(aes(x=pCO2, y = pchla), method = lm, formula = y ~ poly(x, 2, raw = T),color="orange1", se = T, data = surf.new) +
  scale_shape_manual(values = location_type) +
  scale_colour_manual(values = gom_region_colors) +
  labs(color  = "Area", shape = "Location") +
  expand_limits(y=c(0, 1.25), x=c(5.2, 6.2)) +
  theme(axis.text.x = element_text(margin = margin(t = 10, r = 0, b = 10, l = 0),size=12, face = "bold"),
        axis.text.y = element_text(margin = margin(t = 0, r = 10, b = 0, l = 10), size=12, face = "bold"), 
        axis.title.x = element_text(margin = margin(t = 10, r = 0, b = 10, l = 0), size=14, face = "bold"),
        axis.title.y = element_text(margin = margin(t = 0, r = 10, b = 0, l = 10), size=14, face = "bold"),
        legend.position = "top",
        legend.title = element_text(margin = margin(t = 0, r = 0, b = 0, l = 0), size=12, face = "bold"),
        legend.text = element_text(margin = margin(t = 0, r = 0, b = 0, l = 0), size=10), 
        plot.title = element_text(margin = margin(t = 0, r = 0, b = 0, l = 0),hjust = 0.5, size = 14, face = 'bold'),
        axis.line.x = element_line(color="black", size = 1), #add axis line
        axis.line.y = element_line(color="black", size = 1),
        panel.background = element_blank(), 
        legend.key=element_blank(), 
        legend.box = "vertical",
        # 新增:控制图例框之间的垂直间距
        legend.box.spacing = unit(2, "pt"),
        # 可选:缩小单个图例的内部边距
        legend.margin = margin(t = 0, r = 0, b = 0, l = 0))

如果需要更紧凑的效果,可以把legend.box.spacing的数值调小到unit(0, "pt"),或者根据实际预览结果微调。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 17:10:34