查看原文
其他

[会员专享]nature microbiology图表复现之热图终结版

ANERYAN R语言数据分析指南 2023-06-15

欢迎关注R语言数据分析指南

本节来复现「nature microbiology」上的一张经典图表,图均基于「ggplot2」及其扩展包绘制,不借助任何外部工具,在小编看来整张图特色细节处约计「6」处,可以说包罗万象,下面来进行具体介绍,已加VIP群的可在群内直接获取无需付费「Reduction of microbial diversity in grassland soil is driven by long-term climate warming」

论文原图

复现图

除过颜色与原图有差别,还有X轴阴影实在不知道怎么操作外可以说是基本复现了,细节那的确是多,下面来对小编的复现图做一番简单说明

图形解读

初看此图感觉无非就是简单的相关性热图,但是抛除AI等外部工具外那需要注意的细节是相当多
细节1 Y轴文本颜色
细节2 Y轴标签背景
细节3 Y轴文本阴影
细节4 X轴文本颜色
细节5 分面间距 细节6 Y轴标签颜色

看似只有简单几点但是实现起来那是相当繁琐,看到Y轴标签文本风格首先应想到分面操作,但是分面背景及字体颜色均需要调整,这里就可以使用「ggh4x」来实现,那么如何给Y轴文本在分面的基础上添加背景「annotation_custom2」函数呼之欲出,「最难的也是最容易被人忽视的当属在分面基础上修改Y轴文本颜色」这个的确值得深思,当然解决之道均在本文中;下面来看具体代码

加载R包

library(tidyverse)
library(magrittr)
library(ggh4x)
library(grid)

数据清洗

df <- read_tsv("R.xls") %>% pivot_longer(-ID) %>% 
  left_join(.,read_tsv("p.xls") %>% pivot_longer(-ID),by=c("ID","name")) %>% 
  set_colnames(c("ID","name","Rvalue","Pvalue")) %>% 
  mutate(p_signif=symnum(Pvalue,corr = FALSE, na = FALSE,  
                         cutpoints = c(00.0010.010.050.11), 
                         symbols = c("***""**""*""."" "))) 

构建分组文件

group <- df %>% select(1) %>% distinct() %>% as.data.frame() %>% 
  rownames_to_column("raw") %>% 
  mutate(raw=as.numeric(raw),group=case_when(raw >3 & raw <= 17 ~ "Baclerial phyla",
                                             raw <=3 ~ " ",
                                             raw >17 & raw<=20 ~"Fungal\nphyla",
                                             raw >20 & raw<=23 ~"Fungal\nguilds",
                                             raw > 23 & raw <= 28 ~"Protistan\nlineages",
                                             raw > 28 ~ "Protistan\ntrophic\ngroups")) %>% 
  select(-raw)

数据整合

df2 <- df %>% left_join(.,group,by="ID") %>% 
  mutate(across("ID",str_replace,"total","richness"),
         across("name",str_replace,"Total.biomass","Microbial"),
         across("name",str_replace,".biomass",""),
         across("name",str_replace,"F.B.ratio","F:B ratio"))

定义因子

df2$ID <- factor(df2$ID,levels = df2$ID %>% as.data.frame() %>% distinct() %>% pull() %>% rev())
df2$group <- factor(df2$group,levels=df2$group %>% as.data.frame() %>% distinct() %>% pull())
df2$name <- factor(df2$name,levels=df2$name %>% as.data.frame() %>% distinct() %>% pull())

annotation_custom2函数用于注释

annotation_custom2 <- function (grob, xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = Inf, data) 
{
  layer(data = data, stat = StatIdentity, position = PositionIdentity, 
        geom = ggplot2:::GeomCustomAnn,
        inherit.aes = TRUE, params = list(grob = grob, 
                                          xmin = xmin, xmax = xmax, 
                                          ymin = ymin, ymax = ymax))
}

看到此处如果您还有兴趣,欢迎加入小编的VIP群,目前已经上传「公众号文档数据+代码约170余篇」,包含之前的付费文档,扫描文末尾二维码加小编微信「付费99元」后邀请进群,「由于群名额有限人满之后将不在添加新成员」,有需要的请尽早加入,早进早享受;「一定让你感受到物超所值」加入小编的VIP如果你有一些让我感兴趣的图表提供示例数据小编若有时间会写成推文发送(付费购买也可获取)

群内资源

现在入群将可以同时获取小编「2021-2022」两年内公众号内文档的数据+代码目前约为「170」篇,目前同步更新中年底有望到「250+」;每一篇文档都以「ggplot2」为出发点,170篇文档可以说是包罗万象基本涵盖「ggplot2」数据可视化的方方面面,相信对各位观众老爷一定有所帮助

小编微信

关注下方公众号下回更新不迷路


往期推荐

ggplot2优雅的绘制全能型箱线图

ggplot2优雅的绘制多组配对箱线图

学习R数据可视化,你缺少这么一个群

ggplot2优雅的拆分堆砌条形图

箱线图进行方差分析并添加显著性标记

《R构建函数基础篇》计算多样性指数及绘图

分面绘图注释增强版之annotation_custom2

ggplot2优雅的给传统气泡图添加新元素

R自定义构建函数绘制相关性条形图

R自定义构建函数与批量绘图

ggplot2绘制正负分布条形图

[会员转享] ggplot2跨分面进行显著性标记

跟着nature communications学绘图(9) ggplot2绘制误差线点图

跟着nature communications学绘图(8) ggprism优雅的添加p值

ggplot2优雅的绘制圆点柱状图

ggplot2优雅的给图形添加渐变背景

ggplot2优雅对并排条形图添加显著性标记

ggplot2绘制CNS级热图

[会员专享] ggplot2绘制CNS级的柱状图

ggplot2绘制美美的面积图

数百个ggplot2经典绘图案例,带你解决R语言绘图烦恼

定义分面背景及文本颜色

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存