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

如何用ggMarginal将边际分布置于左侧并调整Y轴标签位置

实现左侧Y轴边际密度分布及Y轴标签居中摆放的两种方法

方法一:直接使用ggExtra的参数调整

ggExtra的ggMarginal()函数本身支持通过side参数将Y轴边际图放在左侧,再配合ggplot主题调整Y轴标签的位置,使其落在主图与边际图之间:

# 加载依赖包
library(ggplot2)
library(ggExtra)

# 绘制主图:调整Y轴标签位置,预留左侧空间
p <- ggplot(mtcars, aes(x=wt, y=mpg, color=cyl, size=cyl)) +
  geom_point() +
  labs(y = "mpg") + # 定义Y轴标签
  theme(
    legend.position = "none",
    # 调整Y轴标签的水平对齐和边距,使其靠近主图左侧边缘
    axis.title.y = element_text(hjust = 0, margin = margin(r = 12)),
    # 给左侧预留足够空间放置边际图和标签
    plot.margin = margin(l = 60, r = 10, t = 10, b = 10)
  )

# 生成左侧Y轴边际密度图
p2 <- ggMarginal(p, 
                 type = "density", 
                 margins = "y", 
                 side = "left", # 指定边际图放在左侧
                 size = 4) # 调整边际图相对于主图的大小

p2

方法二:用patchwork手动拼接(更灵活)

如果需要更精细的布局控制,可以用patchwork包分别绘制主图和边际图,再手动拼接,同时精准控制Y轴标签的位置:

# 加载依赖包
library(ggplot2)
library(patchwork)

# 绘制主图:隐藏Y轴刻度,将标签移至左侧边缘
main_plot <- ggplot(mtcars, aes(x=wt, y=mpg, color=cyl, size=cyl)) +
  geom_point() +
  labs(y = "mpg") +
  theme(
    legend.position = "none",
    # 调整Y轴标签位置,使其落在主图左侧
    axis.title.y = element_text(hjust = 0, margin = margin(r = 15)),
    # 隐藏主图Y轴刻度,避免与边际图重复
    axis.text.y = element_blank(),
    axis.ticks.y = element_blank(),
    plot.margin = margin(l = 0, r = 10, t = 10, b = 10)
  )

# 绘制左侧边际密度图:转为垂直方向,清空多余元素
marginal_plot <- ggplot(mtcars, aes(y=mpg, fill=factor(cyl))) +
  geom_density(alpha = 0.5) +
  theme_void() + # 移除所有轴元素
  theme(legend.position = "none") +
  coord_flip() # 翻转坐标系,适配左侧垂直布局

# 拼接布局:边际图占1份宽度,主图占4份宽度
marginal_plot + main_plot + plot_layout(widths = c(1, 4))

两种方法都能实现需求:方法一更简洁,依赖ggExtra原生参数;方法二布局自由度更高,适合需要自定义细节的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:30:26