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

如何在RStudio热图的每两列上方添加分组标签?

解决热图分组标签错位问题

针对环境变量标签位置错误的问题,修改以下关键部分即可实现目标分组标签效果:

  • 修正标签的x轴位置计算,确保标签落在每组(tissue+mucus)的正上方
  • 调整标签宽度,使其刚好覆盖对应组的两列
  • 优化上下图的对齐逻辑

修改后的完整代码

library(ggplot2)
library(dplyr)
library(cowplot)

# 假设数据已加载到dfmerge中(替换为你的实际数据对象)
# dfmerge <- data

# 构建交互因子,保持原有排序逻辑
dfmerge$interaction <- with(dfmerge, interaction(Env, Type, sep = " - "))
dfmerge$interaction <- factor(dfmerge$interaction, levels = sort(levels(dfmerge$interaction)))

# 绘制主热图
heatmap_plot <- ggplot(dfmerge, aes(x = interaction, y = Taxa, fill = Correlation)) +
  geom_tile(color = "white") + # 添加白色边框区分单元格
  scale_fill_gradient2(low = "blue", mid = "white", high = "red", midpoint = 0) +
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1, size = 10),
    axis.text.y = element_text(size = 10),
    plot.title = element_text(hjust = 0.5),
    panel.grid = element_blank() # 去掉网格线贴合目标图风格
  ) +
  labs(x = "", y = "Observations", title = "Heatmap") +
  scale_x_discrete(labels = function(x) gsub("^[^-]* - ", "", x), expand = c(0, 0)) # 消除x轴边缘空白

# 计算环境变量数量和标签位置
num_envs <- length(unique(dfmerge$Env))
# 每组两列,标签位置设为每组中点(如第1组1.5、第2组3.5...)
env_labels_df <- dfmerge %>%
  distinct(Env) %>%
  mutate(xpos = seq(1.5, num_envs*2 - 0.5, by = 2))

# 绘制环境变量标签图
env_labels <- ggplot(env_labels_df, aes(x = xpos, y = 1, label = Env)) +
  geom_label(
    fill = "lightgrey", 
    size = 5, 
    label.padding = unit(0.25, "lines"),
    width = unit(2, "npc")/num_envs, # 标签宽度匹配每组两列的宽度
    label.size = 0 # 去掉标签边框
  ) +
  theme_void() +
  theme(plot.margin = margin(t = 0, r = 0, b = -10, l = 0)) + # 缩小上下边距,避免与热图间距过大
  coord_cartesian(xlim = c(0.5, num_envs*2 + 0.5), clip = "off")

# 组合标签和热图
heatmap_with_labels <- cowplot::plot_grid(
  env_labels, 
  heatmap_plot, 
  nrow = 2, 
  rel_heights = c(0.1, 1), 
  align = "hv", # 同时水平和垂直对齐
  axis = "lr" # 对齐左右轴
)

print(heatmap_with_labels)

关键修改说明

  1. 标签位置修正:xpos = seq(1.5, num_envs*2 - 0.5, by = 2) 确保每个环境变量标签精准落在对应tissue和mucus两列的中间位置。
  2. 标签宽度适配:width = unit(2, "npc")/num_envs 让标签宽度刚好覆盖每组的两个单元格,避免过宽或过窄。
  3. 热图样式优化:添加单元格白色边框、去掉网格线,更接近目标图的视觉效果;调整scale_x_discrete的expand参数消除边缘空白。
  4. 对齐与边距调整:修改plot_grid的align参数为"hv",同时调整标签图的下边距,确保标签和热图完美对齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 08:25:39