欢迎关注R语言数据分析指南
❝本节来介绍一种对热图添加注释条带的新方法,使用NC上的一篇论文中的数据来进行案例展示,与原文有所不同个人观点仅供参考。有需要学习R语言绘图的朋友可关注文末介绍购买小编的R绘图文档。购买前请咨询,零基础不要买。
论文信息
Interspecies hydrogen transfer between cyanobacteria and symbiotic bacteria drives nitrogen loss
Kong, L., Feng, Y., Zheng, R. et al. Interspecies hydrogen transfer between cyanobacteria and symbiotic bacteria drives nitrogen loss. Nat Commun 16, 5078 (2025). https://doi.org/10.1038/s41467-025-60327-x
参考文档
https://teunbrand.github.io/legendry/
热图注释条带
在传统的ggplot2体系中,为热图添加分组注释条带往往需要通过facet_wrap或拼图方式实现,不仅代码冗长,而且难以保持整体美学一致。但是legendry包为R可视化带来了新的思路它通过 嵌套guides (nested guide)机制,使我们能够直接在坐标轴层面定义多级标签与注释条带,这种方法不仅减少手动画图层的麻烦,也让注释逻辑与数据结构保持一致。
热图注释条带的绘制大致有如下几种方法:
❝1.先通过geom_tile绘制注释色块,最后通过aplot包拼图连接而成
2.通过annotate()绘制矩形来实现,此方法适合分组较少的内容,同时可以在色块内添加文本。比较简单直观,但是较为繁琐,进阶阶段不推荐使用。
3.通过分面的方式,此功能主要通过ggh4x包来实现,但是由于每部分分面数据不同,后期还需要定义分面的宽度与高度,同时还需要定义分面面板的填充颜色。细节较多但适用性很广泛
4.通过legendry包内的函数直接添加注释条带,这部分原是ggh4x包的内容,但作者进行了优化开发出了legendry包。通过此方法将无需在考虑分面的尺寸。
本案例主要介绍第4种方法
结果图
图形解读
该段代码主要是使用了guides函数来分别定义注释条带,期间设置了众多参数。其中levels_text传人的是一个list先定义轴文本后定义注释条带的文本,且完美兼容markdown语法,同时在内也可定义注释条带的填充颜色以及边框颜色。
代码展示
library(tidyverse)
library(legendry)
library(readxl)
library(ggtext)
ggplot(df,aes(interaction(name,group),interaction(Gene,group2),fill=value))+
geom_tile(color="grey80") +
scale_x_discrete(expand = c(0,0),position = "top")+
scale_y_discrete(expand = c(0,0))+
scale_fill_gradientn(
colors = c("white", "#e0f3f3", "#66b2a3", "#004c4c", "black"),
values = scales::rescale(c(0, 0.01, 0.6, 0.95, 1.01)),
limits = c(0, 1),
oob = scales::squish,
breaks = c(0, 0.3, 0.6, 0.9, 1),
labels = c("0.0", "0.3", "0.6", "0.9", ">1.0"))+
guides(x = legendry::guide_axis_nested(type = "box",
key = key_range_auto(sep = "\\."),
levels_text = list(
element_text(angle = 90,size=9,vjust=0.5,color="black"),
element_markdown(angle = 0,face = "bold",size=10,
hjust=0.5,vjust=-0.05,color="white")),
theme=theme_guide(box = element_rect(c("#5A77D1","#44007A","#9AC2CD","#6B9B3C",
"#82B7F5"),"NA")))) +
guides(y = legendry::guide_axis_nested(type = "box",
key = key_range_auto(sep = "\\."),
levels_text = list(
element_text(angle = 0,size=8,vjust=0.5,color="black"),
element_markdown(angle = 90,face = "bold",size=8,vjust=0.5,
hjust=0.5,color="black")),
theme=theme_guide(box = element_rect(c("#EC7A05","#9AC2CD99","#82B7F590","#5A77D190",
"#FAD77B","#16419480"),"NA")))) +
coord_cartesian(clip="off") +
theme_test() +
theme(axis.ticks = element_blank(),
axis.title = element_blank(),
legend.key.height = unit(1,"null"))
关注下方公众号下回更新不迷路
购买介绍
❝本节介绍到此结束,有需要学习R数据可视化的读者欢迎到淘宝店铺:R语言数据分析指南,购买小编的R语言可视化文档,2025年购买将获取2025年更新的绘图内容,同时将赠送2024年的绘图文档内容,其余内容无。
更新的绘图内容包含数据+代码+注释文档+文档清单,小编只分享案例文档,不额外回答问题,无答疑服务,更新截止2025年12月31日结束,后续不在进行任何更新,零基础基础一般不推荐买。
在线目录大纲
淘宝店铺
2025年更新案例图展示
























