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

如何在R的patchwork包中实现共享X轴的重叠Y轴可视化?

用patchwork实现共享X轴的多Y轴(含反转轴)图表

当然可以!不用再手动借助Inkscape调整,patchwork完全能帮你实现这种共享X轴、独立Y轴(包括反转Y轴)的图表效果。咱们来优化你的代码:

library(tidyverse)
library(patchwork)

set.seed(123)
dat <- tibble(
  a = 1:10, 
  b = c(0, 2, 5, 8, 5, 4, 6, 4, 3, 2), 
  c = -rnorm(10, b, 3), 
  d = sample(letters[1:3], 10, TRUE)
)

shared_x <- c(0, 11)

# 顶部图表:Y轴在右侧,隐藏X轴元素
pl1 <- dat %>% 
  ggplot(aes(x = a, y = b)) + 
  geom_point(colour = "indianred") + 
  coord_cartesian(xlim = shared_x) + 
  scale_y_continuous("B is awesome", position = "right") +
  theme_classic() +
  theme(
    axis.title.x = element_blank(),
    axis.text.x = element_blank(),
    axis.ticks.x = element_blank(),
    # 若不需要顶部图的X轴线,可改为element_blank(),按需调整
    # axis.line.x = element_blank(),
    plot.margin = margin(b = 0) # 去掉底部边距,让两图紧密贴合
  )

# 底部图表:反转Y轴,保留完整X轴元素
pl2 <- dat %>% 
  ggplot(aes(x = a, y = c)) + 
  geom_point(colour = "steelblue") + 
  scale_y_reverse("C is inversely related to B") + 
  coord_cartesian(xlim = shared_x, ylim = c(3, -13)) +
  theme_classic() +
  theme(
    plot.margin = margin(t = 0) # 去掉顶部边距,和上方图表无缝衔接
  )

# 垂直拼接图表,自动对齐X轴,可自定义高度比例
pl1 / pl2 +
  plot_layout(heights = c(1, 1)) # 比如想让底部图更高,可改为c(0.8, 1.2)

ggsave("overlapping_axes.pdf", width = 10, height = 8, units = "cm")

关键优化说明:

  • 坐标轴精准对齐:你已经用coord_cartesian(xlim = shared_x)统一了X轴范围,patchwork会自动基于此对齐两个图的X轴,完全不需要手动调整。
  • 紧凑视觉效果:通过plot.margin去掉两图之间的空隙,模拟“共享X轴”的连贯视觉体验。
  • 灵活定制化:可以通过plot_layout(heights)调整两个图的高度比例,也能在theme()里进一步修改Y轴标签样式、轴线粗细等细节,完全匹配你的理想效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 21:47:33