原始教程链接:https://github.com/iMetaScience/iMetaPlot/tree/main/221027Circlize

写在前面

和弦图 (Chord diagram) 可以表示不同组数据间的相互关系,在微生物组研究中可以用来展示样本物种相对丰度。本期我们挑选2022年10月13日刊登在iMeta上的Gut microbiota composition in the sympatric and diet-sharing Drosophila simulans and Dicranocephalus wallichii bowringi shaped largely by community assembly processes rather than regional species pool- iMeta | 扬州大学杜予州团队揭示同域内同食物的两种昆虫肠道微生物群落装配机制,选择文章的Figure 1E进行复现,基于顾祖光博士开发的circlize包,讲解和探讨和弦图的绘制方法,先上原图:

接下来,我们将通过详尽的代码逐步拆解原图,最终实现对原图的复现。代码编写及注释:农心生信工作室。

R包检测和安装

01

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

# 检查开发者工具devtools,如没有则安装
if (!require("devtools"))install.packages("devtools")
# 加载开发者工具devtools
library(devtools)
# 检查热图包,没有则通过github安装最新版
if (!require("circlize"))install_github("jokergoo/circlize")
if (!require("tidyr"))install.packages('tidyr')
# 加载包
library(circlize)
library(tidyr)

生成测试数据

02

生成测试数据,一般情况下,和弦图表示组与组之间对应关系。因此,和弦图的数据可以是一个矩阵,行名和列名对应。

# 设置随机数种子,确保数据可重复
set.seed(123)
#仿照原图创建一个11×5的随机数矩阵
mat <- matrix(runif(55, min = 1, max = 7), 11, 5)
#列名为样本名
colnames(mat) <- c("Fly", "Beetle", "Leaf", "Soil", "Waxberry")
#行名为属名
rownames(mat) <- c("Wolbachia", "Vibrionimonas", "uncultured", "Pseudomonas","others", "norank", "Lactococcus", "Enterococcus","Dysgomonas", "Bradyrhizobium", "Bartomella")

03

除此之外,和弦图还可以用另一种长表形式的数据绘制,第一列代表起点,第二列对应终点,第三列代表分配的数值。我们可以利用tidyr包的pivot_longer函数将矩阵数据转化成长表。两种数据格式都符合和弦图的绘图要求。

mat2 <- as.data.frame(mat)
mat2 <- cbind(rownames(mat2), mat2)
#pivot_longer函数核心参数cols决定哪些列进行转化,本例中为除第一列外所有列
df <- pivot_longer(mat2, cols = -1)
colnames(df) <- c("from", "to", "value")

和弦图预览

03

先绘制一张简单的和弦图,绘图时我们输入矩阵mat。代码非常简洁,使用的核心函数是chordDiagram函数:

pdf("plot1.pdf", width = 8, height = 6)
chordDiagram(mat)
circos.clear()
dev.off()

05

接下来,对和弦图的细节进行优化:

pdf("plot2.pdf", width = 8, height = 6)
#首先对布局进行设置,设置扇形间的距离
circos.par(gap.after = c(rep(3, nrow(mat)-1), 10, rep(3, ncol(mat)-1), 10))
#调整扇形顺序与原图保持一致
orderlist <- c(rev(rownames(mat)), colnames(mat))
#设置扇形颜色,可以使扇形区域与颜色一一对应
col_list1 <- c(Fly = "#C6CF85", Beetle = "#717862", Leaf = "#943A74",Soil = "#7267AC", Waxberry ="#040000", Wolbachia = "#DA3918",Vibrionimonas = "#172F2E", uncultured = "#80B862",Pseudomonas = "#635368", others = "#DAEDDF", norank = "#040000",Lactococcus = "#0A351B", Enterococcus = "#A1CB36",Dysgomonas = "#172989", Bradyrhizobium = "#1C2A53", Bartomella = "#7DCDEC")
#设置link颜色,link颜色与列所代表的扇形颜色一致,因此使用column.col参数设置
col_list2 <- c(Fly = "#C6CF85", Beetle = "#717862", Leaf = "#943A74", Soil = "#7267AC", Waxberry = "#040000")chordDiagram(mat,order = orderlist, #设置扇区顺序grid.col = col_list1, #设置扇区颜色column.col = col_list2) #设置link颜色
circos.clear()
dev.off()

06

目前为止,基本的复现已经完成,但观察原图,我们注意到原图中扇形注释文字的方向是垂直指向和弦图圆心的,chordDiagram函数中并没有参数可以直接设置注释文字的方向。因此,我们需要手动添加注释:

pdf("plot3.pdf", width = 8, height = 6)
#首先对布局进行设置,设置扇形间的距离
circos.par(gap.after = c(rep(3, nrow(mat)-1), 10, rep(3, ncol(mat)-1), 10))
#调整扇形顺序与原图保持一致
orderlist <- c(rev(rownames(mat)), colnames(mat))
#设置扇形颜色,可以使扇形区域与颜色一一对应
col_list1 <- c(Fly = "#C6CF85", Beetle = "#717862", Leaf = "#943A74",Soil = "#7267AC", Waxberry = "#040000", Wolbachia = "#DA3918",Vibrionimonas = "#172F2E", uncultured = "#80B862",Pseudomonas = "#635368", others = "#DAEDDF", norank = "#040000",Lactococcus = "#0A351B", Enterococcus = "#A1CB36",Dysgomonas = "#172989", Bradyrhizobium = "#1C2A53", Bartomella = "#7DCDEC")
#设置link颜色, link颜色与列所代表的扇形颜色一致,因此使用column.col参数设置
col_list2 <- c(Fly = "#C6CF85", Beetle = "#717862", Leaf = "#943A74", Soil = "#7267AC", Waxberry = "#040000")chordDiagram(mat, order = orderlist, #设置扇区顺序grid.col = col_list1, #设置扇区颜色column.col = col_list2, #设置link颜色annotationTrack = "grid") #不绘制扇区注释#添加扇形区注释
for(i in get.all.sector.index()) {xlim = get.cell.meta.data("xlim", sector.index = i, track.index = 1)circos.text(x = mean(xlim), y = 0.5, sector.index = i, facing = "clockwise", niceFacing = TRUE, cex = 1, col = "black", labels = i, track.index = 1)
}
circos.clear()
dev.off()

07

最后,我们通过Adobe Illustrator ( AI ) 调整图片,成图如下:

完整代码

## R包检测和安装
# 检查开发者工具devtools,如没有则安装
if (!require("devtools"))install.packages("devtools")
# 加载开发者工具devtools
library(devtools)
# 检查热图包,没有则通过github安装最新版
if (!require("circlize"))install_github("jokergoo/circlize")
if (!require("tidyr"))install.packages('tidyr')
# 加载包
library(circlize)
library(tidyr)
## 生成测试数据
# 设置随机数种子,确保数据可重复
set.seed(123)
#仿照原图创建一个11×5的随机数矩阵
mat <- matrix(runif(55, min = 1, max = 7), 11, 5)
#列名为样本名
colnames(mat) <- c("Fly", "Beetle", "Leaf", "Soil", "Waxberry")
#行名为属名
rownames(mat) <- c("Wolbachia", "Vibrionimonas", "uncultured", "Pseudomonas","others", "norank", "Lactococcus", "Enterococcus","Dysgomonas", "Bradyrhizobium", "Bartomella")
mat2 <- as.data.frame(mat)
mat2 <- cbind(rownames(mat2), mat2)
#pivot_longer函数核心参数cols决定哪些列进行转化,本例中为除第一列外所有列
df <- pivot_longer(mat2, cols = -1)
colnames(df) <- c("from", "to", "value")
## 简单和弦图绘制
pdf("plot1.pdf", width = 8, height = 6)
chordDiagram(mat)
circos.clear()
dev.off()
## 对和弦图的细节进行优化
pdf("plot2.pdf", width = 8, height = 6)
#首先对布局进行设置,设置扇形间的距离
circos.par(gap.after = c(rep(3, nrow(mat)-1), 10, rep(3, ncol(mat)-1), 10))
#调整扇形顺序与原图保持一致
orderlist <- c(rev(rownames(mat)), colnames(mat))
#设置扇形颜色,可以使扇形区域与颜色一一对应
col_list1 <- c(Fly = "#C6CF85", Beetle = "#717862", Leaf = "#943A74",Soil = "#7267AC", Waxberry ="#040000", Wolbachia = "#DA3918",Vibrionimonas = "#172F2E", uncultured = "#80B862",Pseudomonas = "#635368", others = "#DAEDDF", norank = "#040000",Lactococcus = "#0A351B", Enterococcus = "#A1CB36",Dysgomonas = "#172989", Bradyrhizobium = "#1C2A53", Bartomella = "#7DCDEC")
#设置link颜色,link颜色与列所代表的扇形颜色一致,因此使用column.col参数设置
col_list2 <- c(Fly = "#C6CF85", Beetle = "#717862", Leaf = "#943A74", Soil = "#7267AC", Waxberry = "#040000")
chordDiagram(mat,order = orderlist, #设置扇区顺序grid.col = col_list1, #设置扇区颜色column.col = col_list2) #设置link颜色
circos.clear()
dev.off()
## 手动添加注释
pdf("plot3.pdf", width = 8, height = 6)
#首先对布局进行设置,设置扇形间的距离
circos.par(gap.after = c(rep(3, nrow(mat)-1), 10, rep(3, ncol(mat)-1), 10))
#调整扇形顺序与原图保持一致
orderlist <- c(rev(rownames(mat)), colnames(mat))
#设置扇形颜色,可以使扇形区域与颜色一一对应
col_list1 <- c(Fly = "#C6CF85", Beetle = "#717862", Leaf = "#943A74",Soil = "#7267AC", Waxberry = "#040000", Wolbachia = "#DA3918",Vibrionimonas = "#172F2E", uncultured = "#80B862",Pseudomonas = "#635368", others = "#DAEDDF", norank = "#040000",Lactococcus = "#0A351B", Enterococcus = "#A1CB36",Dysgomonas = "#172989", Bradyrhizobium = "#1C2A53", Bartomella = "#7DCDEC")
#设置link颜色, link颜色与列所代表的扇形颜色一致,因此使用column.col参数设置
col_list2 <- c(Fly = "#C6CF85", Beetle = "#717862", Leaf = "#943A74", Soil = "#7267AC", Waxberry = "#040000")
chordDiagram(mat, order = orderlist, #设置扇区顺序grid.col = col_list1, #设置扇区颜色column.col = col_list2, #设置link颜色annotationTrack = "grid") #不绘制扇区注释
#添加扇形区注释
for(i in get.all.sector.index()) {xlim = get.cell.meta.data("xlim", sector.index = i, track.index = 1)circos.text(x = mean(xlim), y = 0.5, sector.index = i, facing = "clockwise", niceFacing = TRUE, cex = 1, col = "black", labels = i, track.index = 1)
}
circos.clear()
dev.off()

猜你喜欢

iMeta简介 高引文章 高颜值绘图imageGP 网络分析iNAP
iMeta网页工具 代谢组MetOrigin 美吉云乳酸化预测DeepKla
iMeta综述 肠菌菌群 植物菌群 口腔菌群 蛋白质结构预测

10000+:菌群分析 宝宝与猫狗 梅毒狂想曲 提DNA发Nature

系列教程:微生物组入门 Biostar 微生物组  宏基因组

专业技能:学术图表 高分文章 生信宝典 不可或缺的人

一文读懂:宏基因组 寄生虫益处 进化树 必备技能:提问 搜索  Endnote

扩增子分析:图表解读 分析流程 统计绘图

16S功能预测   PICRUSt  FAPROTAX  Bugbase Tax4Fun

生物科普:  肠道细菌 人体上的生命 生命大跃进  细胞暗战 人体奥秘

写在后面

为鼓励读者交流快速解决科研困难,我们建立了“宏基因组”讨论群,己有国内外6000+ 科研人员加入。请添加主编微信meta-genomics带你入群,务必备注“姓名-单位-研究方向-职称/年级”。高级职称请注明身份,另有海内外微生物PI群供大佬合作交流。技术问题寻求帮助,首先阅读《如何优雅的提问》学习解决问题思路,仍未解决群内讨论,问题不私聊,帮助同行。

点击阅读原文,跳转最新文章目录阅读

跟着iMeta学做图|circlize绘制和弦图展示样本物种相对丰度相关推荐

  1. 跟着iMeta学做图|ComplexHeatmap包绘制热图展示不同样本物种相对丰度

    本教程相关代码已经上传至 https://github.com/iMetaScience/iMetaPlot/tree/main/221125HeatmapOfAbundance 如果你使用本代码,请 ...

  2. 跟着iMeta学做图|用三元图展示微生物种群相对丰度

    本文代码已经上传至https://github.com/iMetaScience/iMetaPlot230125ternary 如果你使用本代码,请引用:Chenyuan Dang. 2022. Mi ...

  3. 跟着iMeta学做图|NMDS分析展示群落beta多样性

    原始教程链接:https://github.com/iMetaScience/iMetaPlot/tree/main/221108NMDS 写在前面 非度量多维尺度分析(Non-metric mult ...

  4. 跟着iMeta学做图|双侧柱状图展示具有正负相关性的类型数量

    源代码已经上传至https://github.com/iMetaScience/iMetaPlot/tree/main/230130barplot 如果你使用本代码,请引用:Changwu Wu. 2 ...

  5. 使用circlize包绘制和弦图

    在写这个教程是3月16号凌晨的5点钟,这个点还没睡的话,一是在外面玩,二是有事情.我是属于第二种情况,昨晚从下班6点后一直在办公室,点了个外卖,吃结束后差不多7点.然后,就一直在弄自己的事情,一直到凌 ...

  6. 【数据可视化应用】绘制和弦图(附Python和R语言代码)

    和弦图(Chord diagram)简介 和弦图(chord Diagram),是一种显示矩阵中数据间相互关系的可视化方法,节点数据沿圆周径向排列,节点之间使用带权重(有宽度)的弧线链接.其适合节点数 ...

  7. 利用思维导图软件绘制鱼骨图怎样做

    思维导图的类型有哪些? 圆圈图 主要用于把一个主题展开来,联想或描述细节.小圈圈是主题,而外面的大圈圈里放的是和这个主题有关的细节或特征 气泡图 由很多泡泡组成,中间一个主题泡泡描述核心主题,周围的属 ...

  8. 举个栗子!Tableau技巧(52):学做一个实用的热图日历

    这种图表我们就叫它热图日历,通过方形展示具体日期,通过颜色呈现该日期的数值多少. 通常我们可以将它用作仪表板上的筛选器,来查看月.周.日的详细情况,通过它可以很容易查看具体到每一天的情况. 那么,怎样 ...

  9. Python一行代码即可绘制和弦图

    步骤 1.和弦图简介 1.1.和弦图构成 1.2.和弦图应用场景 2.和弦图Python库 3.chord的安装及使用 1.和弦图简介 和弦图(chord Diagram),是一种显示矩阵中数据间相互 ...

最新文章

  1. mysql之 CentOS系统针对mysql参数优化
  2. 关于AutoML的一些笔记
  3. 面试题22. 链表中倒数第k个节点
  4. asp.net通过webservice调用java接口全过程_100-RPC、RMI、WebService、httpClient、跨域、集群部署...
  5. 特征筛选5——距离相关系数筛选特征(单变量筛选)
  6. android 清除应用程序数据,清除Android应用程序用户数据
  7. js或jquery如何获取父级、子级、兄弟元素(包括祖级、孙级等)
  8. 简单的3个SQL视图搞定所有SqlServer数据库字典 (转载)
  9. JDBC01 mysql和navicat的安装
  10. 读《别闹了,费曼先生》 时的几点想法
  11. 中职学生计算机学情分析报告,中职学校学生学情分析及对策
  12. vue如何在地址栏拼接url参数
  13. springboot读取xml配置文件
  14. 01-运营可能是一种思维方式
  15. CDR无法启动此程序 因为计算机丢失,教您快速解决CorelDRAW X7因缺少VGCore.dll无法启动的难题...
  16. 浏览器便携化操作方法
  17. SVG实现圆形进度条
  18. 活猫还是死猫?| 薛定谔的猫 | 儿童故事
  19. 浅谈Altera和Xilinx的FPGA区别
  20. R中ifelse、which、%in%的用法

热门文章

  1. STM32 HAL库组成概述
  2. 标准曲线制作、jiance检验、使用知识大全
  3. GraphX二度关系(代码)
  4. 什么是计算机链式储存应用,链式存储和顺序存储区别
  5. mysql临时表 is full_mysql出现“the table xxx is full”的问题
  6. PostMan工具介绍及安装使用
  7. 12.2 布尔函数的表示
  8. 商业模式的构成及有效因素
  9. 第4集丨做一个内心强大的人
  10. 金山快盘 android,随时随地的存储 金山快盘Android版评测