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

如何用ggplot2+patchwork实现共享Y轴与图例的并排绘图?

用ggplot2和patchwork实现DEM图共享Y轴与图例

要实现共享Y轴和合并图例,只需对现有代码做以下几处修改:

完整修改后代码

library(ggplot2)
library(patchwork)

# 转成带坐标的数据框(原逻辑不变)
df_dem10 <- dem %>% as.data.frame(xy = TRUE)
df_dem30 <- dem30 %>% as.data.frame(xy = TRUE)

# 定义统一的填充色刻度,避免重复创建
common_fill <- scale_fill_gradientn(colors = terrain.colors(100), name = "高程")

# 左图:保留完整Y轴
p1 <- ggplot(df_dem10) +
  geom_raster(aes(x = x, y = y, fill = `10m_BA`)) +
  common_fill +
  labs(x = "X坐标", y = "Y坐标") +
  theme_bw()

# 右图:隐藏Y轴的标题、刻度和标签
p2 <- ggplot(df_dem30) +
  geom_raster(aes(x = x, y = y, fill = `10m_BA`)) +
  common_fill +
  labs(x = "X坐标") +
  theme_bw() +
  theme(
    axis.title.y = element_blank(),
    axis.text.y = element_blank(),
    axis.ticks.y = element_blank()
  )

# 组合图形:合并图例+并排布局
combined_plot <- p1 + p2 + 
  plot_layout(ncol = 2, guides = "collect") +
  plot_annotation(title = "10m与30m分辨率DEM对比")

# 展示图形
print(combined_plot)

核心修改说明

  • 统一图例配置:单独定义common_fill并在两个图中复用,配合plot_layout(guides = "collect")就能自动合并图例,避免重复生成。
  • 隐藏右侧Y轴元素:通过theme()把右图的Y轴标题、刻度文本、刻度线都设为element_blank(),只保留左侧Y轴作为共享轴。
  • 自动对齐Y轴范围:如果两个DEM数据的Y坐标范围一致,patchwork会自动对齐轴范围;如果范围不同,可在两个图里加ylim(min_y, max_y)手动指定统一范围。
  • 统一主题风格:添加theme_bw()让两个图视觉风格统一,对比更直观。

原效果参考:
原并排效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:40:58