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

使用R的layout布局:在热图上方叠加降水趋势图的实现问题

R语言:组合热图与上方降水折线图的布局方案

你遇到的核心问题是基础绘图系统(wtr.heat.map属于这类)和ggplot绘图系统不兼容layout布局,同时原代码的layout矩阵定义有误。下面给出两种可行的解决方案:

方案一:统一用基础绘图系统(推荐,适合已有基础热图的情况)

调整layout矩阵,并将降水图改用基础绘图函数绘制,这样可以正常使用layout布局:

# 定义布局:2行1列,第一行放降水图(高度占1份),第二行放热图(高度占2份)
layout(matrix(c(2, 1), nrow = 2, ncol = 1), heights = c(1, 2))

# 绘制热图(下方图)
par(mar = c(4, 4, 0, 1)) # 上方边距设为0,避免和降水图重叠;右边留少量边距
TalusNorthHeatMap <- wtr.heat.map(TalusNorthdf, zlim = c(0, 20),
                                 xlab = "Date",
                                 ylab = "Depth (m)")

# 绘制降水折线图(上方图),隐藏x轴、保留y轴
par(mar = c(0, 4, 1, 1)) # 下方边距设为0,隐藏x轴空间
plot(PrecipTS$Date, PrecipTS$Precip...mm., type = "l", 
     xlab = "", ylab = "Precipitation (mm)",
     xaxt = "n") # xaxt="n" 隐藏x轴刻度与标签

方案二:用patchwork组合ggplot与基础热图(如果坚持用ggplot画降水图)

需要借助patchwork和gridGraphics包,将基础热图转换为ggplot兼容的对象:

# 安装并加载所需包
install.packages(c("patchwork", "gridGraphics"))
library(patchwork)
library(gridGraphics)

# 绘制基础热图并转换为grob对象
wtr.heat.map(TalusNorthdf, zlim = c(0, 20),
             xlab = "Date",
             ylab = "Depth (m)")
heatmap_grob <- grid.grab() # 捕获当前绘图为grob

# 绘制ggplot降水图,隐藏x轴元素
precip_plot <- ggplot(data = PrecipTS, aes(x=Date, y=Precip...mm.))+
  geom_line()+
  labs(y="Precipitation (mm)")+
  theme(
    axis.title.x = element_blank(), # 隐藏x轴标题
    axis.text.x = element_blank(),  # 隐藏x轴刻度文本
    axis.ticks.x = element_blank()  # 隐藏x轴刻度线
  )

# 组合两个图,设置高度比例1:2
precip_plot / heatmap_grob + plot_layout(heights = c(1, 2))

关键说明

  • layout仅支持基础绘图系统,ggplot属于独立的grid绘图系统,两者不能直接混用layout。
  • 边距调整(par(mar)或ggplot的theme)是避免轴标签重叠的关键,根据你的实际图大小可微调数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 17:43:12