

为了避免各位错过最新的推文教程,强烈建议大家将“科研后花园”设置为“星标”!





你手里有一张表格,里面全是数字。但你只关心两件事:某个特征在某个样本里 出现了没有?出现的时候属于哪一类?
比如:哪些基因在哪些菌株中存在?哪些病害在哪些地块发生过?哪些学生在哪些课程上拿了优秀?
这种“有/无”+“分类”的数据,最适合用存在-缺失热图来展示。
今天这篇推文,就用最通俗的语言 + 可复现的R代码,带你画出这张图,并且让它既专业又美观。
01 什么时候用这种图?
你有一张0/1(或正数/零)矩阵,想直观展示哪些单元格有值、哪些为空。
每个“有值”的单元格还带有类别标签(比如来自不同的处理组、不同的物种、不同的班级)。
你想按行(样本)和列(特征)进行分面,比如按样本的上级分组、按特征的上级分类来组织图形。
你希望不同分面使用不同颜色,让读者一眼看出差异。
02 数据长什么样?
我们只需要两个文件:
1、数据表:行是样本(或观测对象),列是特征(如基因、OTU、病害类型),数值可以是丰度、计数、或者任何正数(>0表示“有”,=0表示“无”)。
2、特征分组表:两列,第一列是特征名称,第二列是它所属的“大类”(用于分面着色)。
03 核心处理逻辑(附代码逐句解析)
1、R包加载、数据准备、处理
###加载所需R包library(ggplot2) # Create Elegant Data Visualisations Using the Grammar of Graphicslibrary(reshape2) # Flexibly Reshape Data: A Reboot of the Reshape Packagelibrary(dplyr) # A Grammar of Data Manipulationlibrary(ggh4x) # Hacks for 'ggplot2'##加载数据(随机编写,无实际意义)df <- read.table("data.txt",header = 1,check.names = F,sep = "\t")Group <- read.table("Group.txt",header = 1,check.names = F,sep = "\t")##数据处理#绘制存在OR缺失矩阵,这里统一将大于0的数字转换为1#为了实现为不同分面添加不同颜色,可以按照分面赋予不同数字data <- melt(df, id.vars = c("Sample", "Group"), variable.name = "OTU")#先将数据转换为长数据格式#添加分组信息plot_data <-merge(data, Group, by = "OTU")#将大于0的数字按照分组转换为不同数字plot_data$value2 <- ifelse(plot_data$value==0, "0",ifelse(plot_data$Species=="speciesA","1",ifelse(plot_data$Species=="speciesB","2",ifelse(plot_data$Species=="speciesC","3","4"))))#指定Sample列顺序plot_data$Sample <- factor(plot_data$Sample, levels = rev(df$Sample))
2、可视化
plot_data %>%ggplot(aes(x = OTU, y = Sample))+geom_tile(aes(fill = value2), width = 0.7, height = 0.7, color = "white",show.legend = F)+#自定义颜色scale_fill_manual(values = c("0"=NA,"1"="#ff6c5f","2"="#ffc168","3"="#2dde98","4"="#8e43e7"))+##设置分面facet_nested(Group~ Species,#设置分面变量scales = 'free',space = "free",switch = "y")+#设置主题labs(x=NULL, y = NULL)+theme_void()+theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1,size = 9, color = "black"),axis.text.y = element_text(size = 9, color = "black"),strip.background = element_rect(color=NA, fill=NA),strip.placement = "outside",panel.spacing.y = unit(0, "cm"),strip.text = element_text(size = 12, color = "black"))

最后将图形调整至合适大小并导出为PDF格式,导入AI或PS等修图软件中对图形进行美化即可!!!


希望这篇教程对大家的科研绘图有所帮助!欢迎关注科研后花园公众号,获取更多科研绘图技巧。
公众号:科研后花园原创教程,转载请注明出处
PS: 以上内容是小编个人学习代码笔记分享,仅供参考学习,欢迎大家一起交流学习。







「R绘图模板」中性群落模型:解密微生物群落构建的“随机密码”!!!

「R绘图模板」环形双向柱状堆积图+标签:让数据“内外兼修”!!!

「R绘图模板」环形并列柱状堆积图+误差线+组内显著性字母标记!!!

「R绘图模板」RDA&dbRDA&CCA可视化!!!

「R绘图模板」Communications Earth & Environment | 组合图系列—曼哈顿图+Venn图展示富集OTU情况!!!

「R绘图模板」Science Advances | 组合图-并列柱状图+饼图+折线图!!!

「R绘图模板」J. Agric. Food Chem. | 分面组合图-字母标记显著性柱状图+传统显著性标记箱线图!!!

「R绘图模板」主成分分析(PCA)+各类型边缘图!!!

「R绘图模板」Field Crops Res. | 组合图系列—三元图+条形图展示微生物丰度信息!!!

「R绘图模板」Nat. Commun | 复杂tree注释—分支颜色+多层离散热图+分组条形图!!!

「R绘图模板」多色系热图+分组气泡图!!!

「R绘图模板」配对连线图+均值点及连线+显著性+嵌套分组!!!






























夜雨聆风