首页 > 其他分享 >跟着iMeta学作图 | 山峦图展示微生物丰度随盐度增加的动态变化

跟着iMeta学作图 | 山峦图展示微生物丰度随盐度增加的动态变化

时间:2024-09-13 15:55:05浏览次数:12  
标签:scale iMeta 作图 动态变化 library salinity 丰度 peakcol otu

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

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

写在前面

山峦图可以用来展现数据分布类型,数据分布情况用峰的高低来表示,分布越密集的区间,峰越高。 

本期我们挑选2023年1月9日刊登在iMeta上的Destabilized microbial networks with distinct performances of abundant and rare biospheres in maintaining networks under increasing salinity stress,以文章中Figure 2C为例,讲解和探讨如何利用山峦图展示微生物丰度随盐度增加的动态变化,先上原图:

图片

图片

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

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

R包检测和安装

01

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

library(ggplot2)if (!require("ggridges"))  install.packages("ggridges")
library(ggridges)# 这个包主要用来绘制山峦图,尤其是针对时间或者空间分布可视化library(reshape2)library(ggsci)

读取数据

02

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

otu <- read.csv('feature23.csv')#由于各 OTU 丰度之间差异巨大,对丰度标准化处理otu[2:ncol(otu)] <- scale(otu[2:ncol(otu)], center = FALSE)#对表中2到24列做归一化,但不做中心化#将宽数据变成长数据otu1 <- reshape2::melt(otu, id = 'Salinity') #保留的字段是“Salinity”,转化后“variable”是原本每列菌的名字,“value”是对应每个菌的丰度值head(otu1)

图片

#读取分组数据type <- read.csv('feature_type.csv')#将分组数据和OTU数据合并到一起otu2 <- merge(otu1, type, by = 'variable') #合并时按名为“variable'的列为准合并head(otu2)

图片

绘制山峦图

03

基础图形绘制。

#预设颜色peakcol = c("#9ECAE1", "#2171B5", "#999999")  p2c <-  ggplot(otu2, aes(x = Salinity, y = variable, height = value, fill = type))+  geom_ridgeline(stat="identity",scale=1,color='white',show.legend=T)+#主要绘制山脊线图,绘图函数里的stat参数表示对样本点做统计的方式,默认为identity,表示一个x对应一个y  scale_fill_manual(values = peakcol,limits = c('Low-salinity colonizing','High-salinity colonizing','Complex'))#设置填充颜色,按limits(即type)填充预设的peakcol中的颜色p2c

图片

04

对图形进行细节美化

p2c1 <-p2c+   scale_x_continuous(expand = c(0, 0))+#修改x轴刻度,这个也可以在theme()中输入axis.ticks.X=element_blank()取消x轴刻度  theme_minimal()+ #预设主题  theme(axis.title.x=element_blank(),axis.text.x.bottom=element_blank())+#取消设定的x轴标题和文本  labs(x = 'Salinity (ppt)', y = 'Salinity discriminant features')#设置x轴和y轴的标题p2c1

图片

完整代码

library(ggplot2)library(ggridges)library(reshape2)library(ggsci)
otu <- read.csv('feature23.csv')# 对丰度标准化处理,并且转换成长数据格式otu[2:ncol(otu)] <- scale(otu[2:ncol(otu)], center = FALSE)otu1 <- reshape2::melt(otu, id = 'Salinity') # 读取分组数据type <- read.csv('feature_type.csv')# 将分组数据和OTU数据合并到一起otu2 <- merge(otu1, type, by = 'variable')
peakcol = c("#9ECAE1", "#2171B5", "#999999")  p2c <-  ggplot(otu2, aes(x = Salinity, y = variable, height = value, fill = type))+  #主要绘制山脊线图,绘图函数里的stat参数表示对样本点做统计的方式,默认为identity,表示一个x对应一个y  geom_ridgeline(stat = "identity", scale = 1,color = 'white', show.legend = T)+  # 设置填充颜色,按limits(即type)填充预设的peakcol中的颜色  scale_fill_manual(values = peakcol, limits = c('Low-salinity colonizing','High-salinity colonizing','Complex'))
# 接下了需要对整体进行细节美化p2c1 <- p2c+   scale_x_continuous(expand = c(0, 0))+# 修改x轴刻度  theme_minimal()+ #预设主题  theme(axis.title.x = element_blank(),axis.text.x.bottom = element_blank())+# 取消设定的x轴标题和文本  labs(x = 'Salinity (ppt)', y = 'Salinity discriminant features')# 设置x轴和y轴的标题p2c1ggsave("山峦图展示微生物丰度随盐度增加的动态变化.pdf", p2c1, width = 8, height = 5)

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

标签:scale,iMeta,作图,动态变化,library,salinity,丰度,peakcol,otu
From: https://blog.csdn.net/qazplm12_3/article/details/142175662

相关文章

  • 跟着iMeta学做图 | 冲击图展示菌群随盐度的变化
    本文代码已经上传至https://github.com/iMetaScience/iMetaPlot如果你使用本代码,请引用:ChangchaoLi.2023.Destabilizedmicrobialnetworkswithdistinctperformancesofabundantandrarebiospheresinmaintainingnetworksunderincreasingsalinitystress.iMeta......
  • Star 39.9k太方便了!程序员的作图利器:draw.io!敲代码画图两不误!
    现在身处职场中,作为一名埋头苦干的打工人,不论是什么工种,不会做图有时候还真‘活不下去’。当然工厂拧螺丝就另说了!我是发现不论你是产品设计、运维、测试,还是程序员还是摆脱不了技术之外的事情,就比如制作各种图表,平时有平台/工具流程图,项目上有各种上项演示图表,私下其他部......
  • canvas作图,动图练习
    代码:<!Doctypehtml><htmllang="zh_cn"><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title>Canvas</title><metaname="K......
  • Cesium展示——图标 billboard 动态变化
    文章目录需求分析1.导入2.加载billboard3.点击图标展示对应name属性4.实现动态变化4.上代码需求Cesium展示——图标动态变化分析1.导入importspjkfrom'./assets/spjk.png';2.加载billboardfunctionaddBillboard(lon......
  • 跟着iMeta学做图|ggplot2绘制多个饼图展示菌群物种组成
    原始教程链接:https://github.com/iMetaScience/iMetaPlot/tree/main/221017multi-pieplot写在前面饼图(PiePlot) 在微生物组研究中可以用来展示菌群物种组成,可以起到与堆叠柱状图相同的展示效果。本期我们挑选2022年4月5日刊登在iMeta上的Theimpactofaquaculturesyst......
  • 快速幂的模板和维持动态变化中的最大值最小值,以及常见递归
      快速幂和大根堆小根堆都是一些需要记忆的东西,方便后面在题目中实现应用。图中的最短路径两个常用算法:  prim算法:通过小根堆来实现的,小根堆的作用是用来时刻维持状态的最小值。kruskal算法:核心手段(并查集)然后一开始是打算学习01bfs的,发现对于递归的过程确实还是理......
  • LimeTabular TypeError:__init__() 缺少 1 个必需的位置参数:'model'
    我已经开始学习Lime了。当我使用LimeTabular形式的Interpret时,我遇到一个问题,我按照标准完成了功能,但它不起作用。错误是TypeError:init()缺少1个必需的位置参数:'model'#%%ImportsfromutilsimportDataLoaderfromsklearn.ensembleimportRandomForestCla......
  • 适用任意复杂转移函数及方程式的 matlab 二维曲线作图与客制化界面
    優點曲線可自行定義粗細,顏色,精細度......等等字可自行定義字體,顏色,大小,方向,位置......等等可自行定義虛線與字來標註曲線上的某一點此方法可延伸至matlab三維曲線或曲面作圖,亦或是同樣概念,但是改用其他程式諸如python來實現前情提要matlab現有表達轉移函數,......
  • matplotlib作图不显示3D图,怎么办?
    大家好,我是Python进阶者。一、前言前几天在Python白银交流群【Kim】问了一个Python作图的问题,问题如下:他不显示3D图咋办?代码如下:from sklearn.linear_model import LogisticRegressionimport numpy as npfrom matplotlib import pyplot as pltfrom mpl_toolkit......
  • UML交互图-协作图
    概述协作图和序列图都表示出了对象间的交互作用,但是它们侧重点不同。序列图清楚地表示了交互作用中的时间顺序,但没有明确表示对象间的关系。协作图则清楚地表示了对象间的关系,但时间顺序必须从顺序号获得。序列图常常用于表示方案,而协作图用于过程的详细设计。一、协作图......