跟着iMeta学做图 | 冲击图展示菌群随盐度的变化

本文代码已经上传至https://github.com/iMetaScience/iMetaPlot如果你使用本代码,请引用:Changchao Li. 2023. Destabilized microbial networks with distinct performances of abundant and rare biospheres in maintaining networks under increasing salinity stress. iMeta 1: e79. https://onlinelibrary.wiley.com/doi/10.1002/imt2.79

代码翻译及注释:农心生信工作室

写在前面

冲击图(alluvial diagram)是流程图(flow diagram)的一种,最初开发用于代表网络结构的时间变化。在微生物群落分析中可以用来展示不同分类学水平微生物的丰度及其从属关系,利用R语言做冲击图实现菌群相对丰度的变化是生信分析中较常见的。

本期我们挑选2023年1月9日刊登在iMeta上的Destabilized microbial networks with distinct performances of abundant and rare biospheres in maintaining networks under increasing salinity stress,以文章中Figure 1E为例,讲解和探讨如何用冲击图展示菌群随盐度的变化,先上原图:

图片

图片

代码、数据和结果下载,请访问https://github.com/iMetaScience/iMetaPlot/tree/main/230407ggalluvial

接下来,我们将通过详尽的代码逐步拆解原图,最终实现对原图的复现。

R包检测和安装

01

安装核心R包ggalluvial以及一些功能辅助性R包,并载入所有R包。

library(reshape2) # 重塑数据框的包,可以实现长数据和宽数据之间的转化# 加载ggalluvial包(绘图本图所用关键R包),基于ggplot2的ggalluvial包可用来绘制冲击图if (!require("ggalluvial"))  install.packages("ggalluvial")library(ggalluvial)library(ggsci) # ggsci包含期刊或软件的经典配色,可用于ggplot2()配色

读取数据

02

读取绘制所需数据并进行必要转换。

# 读取绘制数据,行为菌的名称,列为不同盐度,表中数据为菌的相对丰度d1e0 <- read.csv("ProClass.csv") # 示例数据可在GitHub上获取
# 将宽数据拉长,转化后"自变量"列为variable,代表梯度不同的盐度,"因变量"列为Value,代表菌的相对丰度d1e = as.data.frame(melt(d1e0, id.vars = c("phylumpro"))) # id.vars=c()用于指定要保留的字段head(d1e) # 列出前几行看看数据转化后长什么样

绘制冲击图

03

基础图形绘制。

# 预设渐变色taxcol <- c("#64A4CC", "#9CCEE3", "#C7E5DB", "#ECF6C8", "#FEEDAA",            "#FDC980", "#F89D59", "#E75B3A", "#D7191C")p1e <- ggplot(data=d1e,aes(x = variable, y = value, alluvium = phylumpro))+ # alluvium设置冲积层,在这里将菌(phylumpro)设置冲积层  geom_alluvium(aes(fill = phylumpro), alpha = 1)+ # 画冲击图,按菌(phylumpro)进行颜色填充  scale_fill_manual(values = taxcol) # 对冲积层填充颜色p1e

图片

04

对图形进行细节美化

p1e1 <- p1e +   theme_minimal() + #预设主题  theme(axis.text.x = element_blank(), # 因预期x轴另外加一条渐变的图形表示,在这里取消x轴        panel.grid.minor = element_blank(), # 移除图中的网格        panel.grid.major = element_blank(), # 移除图中的网格        panel.spacing.x = element_blank()) +  xlab("Salinity")+ # 设置x轴标题  ylab("Relative abundance (%)")# 设置Y轴标题p1e1

图片

完整代码

library(reshape2) # 重塑数据框的包,可以实现长数据和宽数据之间的转化# 加载ggalluvial包(绘图本图所用关键R包),基于ggplot2的ggalluvial包可用来绘制冲击图if (!require("ggalluvial"))  install.packages("ggalluvial")library(ggalluvial)library(ggsci) # ggsci包含期刊或软件的经典配色,可用于ggplot2()配色
# 读取绘制数据,行为菌的名称,列为不同盐度,表中数据为菌的相对丰度d1e0 <- read.csv("ProClass.csv") # 示例数据可在GitHub上获取# 将宽数据拉长,转化后"自变量"列为variable,代表梯度不同的盐度,"因变量"列为Value,代表菌的相对丰度d1e = as.data.frame(melt(d1e0, id.vars = c("phylumpro"))) # id.vars=c()用于指定要保留的字段
# 预设渐变色并绘制冲击图taxcol <- c("#64A4CC", "#9CCEE3", "#C7E5DB", "#ECF6C8", "#FEEDAA",            "#FDC980", "#F89D59", "#E75B3A", "#D7191C")p1e <- ggplot(data=d1e,aes(x = variable, y = value, alluvium = phylumpro))+ # alluvium设置冲积层,在这里将菌(phylumpro)设置冲积层  geom_alluvium(aes(fill = phylumpro), alpha = 1)+ # 画冲击图,按菌(phylumpro)进行颜色填充  scale_fill_manual(values = taxcol)+ # 对冲积层填充颜色  theme_minimal() + #预设主题  theme(axis.text.x = element_blank(), # 因预期x轴另外加一条渐变的图形表示,在这里取消x轴        panel.grid.minor = element_blank(), # 移除图中的网格        panel.grid.major = element_blank(), # 移除图中的网格        panel.spacing.x = element_blank()) +  xlab("Salinity")+ # 设置x轴标题  ylab("Relative abundance (%)")# 设置Y轴标题p1e
ggsave("冲击图展示菌群随盐度的变化.pdf", p1e, width = 8, height = 5)

以上数据和代码仅供大家参考,如有不完善之处,欢迎大家指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生信宝典

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值