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

为ggplot2添加边际图时,如何消除标题与主图间的空白?

解决ggplot2添加y轴边际密度图后主图与标题间的多余空白问题

当使用ggExtra::ggMarginal为ggplot2散点图添加y轴边际密度图时,主图标题与绘图区域之间会出现多余空白,而未添加边际图的散点图标题间距是正常的。


问题复现代码

正常散点图(标题间距正常)

library(tidyverse)
library(ggExtra)

# 创建不带边际图的散点图,标题间距符合预期
p <- diamonds %>% 
  ggplot(aes(x = carat, y = price)) +
  geom_point() +
  scale_y_log10() +
  annotation_logticks(sides = 'lr') +
  labs(title = 'Diamond Price by Carat') +
  theme_bw()
p

正常标题间距的散点图

添加边际图后出现空白

# 添加y轴边际密度图,标题与主图间出现多余空白
ggMarginal(p, margins = "y", type = "density", alpha = 0.5)

添加边际图后的散点图


解决方法

方法1:将标题添加到边际图组合对象上

先创建不带标题的基础散点图,添加边际图后再为组合图形设置标题,标题会自动对齐整体图形顶部,避免空白:

# 1. 创建不带标题的基础散点图
p_no_title <- diamonds %>% 
  ggplot(aes(x = carat, y = price)) +
  geom_point() +
  scale_y_log10() +
  annotation_logticks(sides = 'lr') +
  theme_bw()

# 2. 添加边际图后设置标题
ggMarginal(p_no_title, margins = "y", type = "density", alpha = 0.5) +
  labs(title = 'Diamond Price by Carat')

方法2:手动调整原图形的顶部边距

在原散点图中压缩顶部边距,抵消ggMarginal带来的额外空白(可根据实际需求微调边距数值):

# 调整原图形顶部边距为0,其他边距保持默认
p_adjusted <- diamonds %>% 
  ggplot(aes(x = carat, y = price)) +
  geom_point() +
  scale_y_log10() +
  annotation_logticks(sides = 'lr') +
  labs(title = 'Diamond Price by Carat') +
  theme_bw() +
  theme(plot.margin = margin(t = 0, r = 10, b = 10, l = 10))

# 添加边际图后空白消失
ggMarginal(p_adjusted, margins = "y", type = "density", alpha = 0.5)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 05:52:46