首页 > 其他分享 >跟着iMeta学做图 | 冲击图展示菌群随盐度的变化

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

时间:2024-09-13 15:54:42浏览次数:8  
标签:菌群 iMeta 学做 library element ggalluvial blank 数据 panel

本文代码已经上传至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)

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

标签:菌群,iMeta,学做,library,element,ggalluvial,blank,数据,panel
From: https://blog.csdn.net/qazplm12_3/article/details/142212419

相关文章

  • 考研数学做题速度怎么提高
    前言目前大家都快结束强化的学习了,有的同学已经开始做套卷了,那么肯定会有很多同学感觉到时间不够用。因而提高做题速度就迫在眉睫。做题速度由于什么决定做题速度很大程度上是因为没有做题思路,从我们看到题到有完整的清晰的做题思路的时间的多少,决定了你做题的快慢。很多人......
  • 跟着iMeta学做图|ggplot2绘制多个饼图展示菌群物种组成
    原始教程链接:https://github.com/iMetaScience/iMetaPlot/tree/main/221017multi-pieplot写在前面饼图(PiePlot) 在微生物组研究中可以用来展示菌群物种组成,可以起到与堆叠柱状图相同的展示效果。本期我们挑选2022年4月5日刊登在iMeta上的Theimpactofaquaculturesyst......
  • LimeTabular TypeError:__init__() 缺少 1 个必需的位置参数:'model'
    我已经开始学习Lime了。当我使用LimeTabular形式的Interpret时,我遇到一个问题,我按照标准完成了功能,但它不起作用。错误是TypeError:init()缺少1个必需的位置参数:'model'#%%ImportsfromutilsimportDataLoaderfromsklearn.ensembleimportRandomForestCla......
  • ​ChiMetadata && ChiMetadataManager​
    目录ChiMetadatachiMetadata与metabuffer的调用关系ChiMetadata的成员变量ChiMetadata的成员函数解析ChiMetadataManagerChiMetadataManager的成员变量ChiMetadataManager的成员函数configure_stream过程中的metadataChiMetadatachiMetadata与metabuffer的调用关系......
  • [Maths] 数学做题记录
    P7481梦现时刻由题得:\[F(a,b)=\sum_{i=0}^{b}\dbinom{b}{i}\dbinom{n-i}{a}\]根据公式\(\displaystyle\dbinom{n}{m}=\dbinom{n-1}{m-1}+\dbinom{n-1}{m}\),有:\[F(a,b)=\sum_{i=0}^{b}\dbinom{b-1}{i-1}\dbinom{n-i}{a}+\sum_......
  • PostgreSQL插件(1): pg_timeout及pg_timetable 及 若干FAQ(1)
           PostgreSQL插件(1):pg_timeout及pg_timetable及若干FAQ(1)PostgreSQL2023-05-1209:20发表于河北编者荐语:报考PG数据库专家上盘古云课堂以下文章来源于数据库杂记,作者SeanHe1、前言这次将简单介绍PG的两个插件,以及若干常见问题汇集,作......
  • Educational Codeforces Round 39 (Rated for Div. 2) -- D. Timetable (DP)
    写得很折磨人,每次dp都写个一个多小时,写出来明明觉得不难.题目大意:可以进行K次操作,把删除1,进行k次操作后每行第一个1和最后一个1的位置相减的绝对值加1得到的结果最小。做法:每次肯定是要从左删或者从右边删,然后顺着这个思路,先把每行的进行小于等于k次操作时,每行最小......
  • 数学做题笔记
    ABC267GIncreasingKTimes[ABC267G]IncreasingKTimes一道计数题.主要是是一个比较经典的trick才来做的这题.就是形如已知一个序列,求有多少个排列满足一个条件,这......
  • CF946D Timetable(动态规划)
    Timetable题意:给出\(n\)行\(m\)列\(01\)串,对于每一行所要花费的代价是行中第一个\(1\)和最后一个\(1\)之间的距离加一,现在你有魔法可以去除掉\(k\)个\(1\),......
  • #盲盒+码# #跟着小白一起学鸿蒙# [番外]一起学做Tetris(下)
    #跟着小白一起学鸿蒙#[番外]一起学做Tetris(下)作者:王石简介接着《#跟着小白一起学鸿蒙#[番外]一起学做Tetris(上)》我们完善了页面,增加了左右按键和之前方块显示,方块......