[会员专享]nature microbiology图表复现之热图终结版
欢迎关注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(0, 0.001, 0.01, 0.05, 0.1, 1),
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」数据可视化的方方面面,相信对各位观众老爷一定有所帮助
❞
小编微信
关注下方公众号下回更新不迷路
往期推荐