其他
circlize的简单弦状图快速作图示例
前篇展示了R包circlize绘制弦状图一个示例,该示例算是从头绘制弦图的一种方法吧,由外到内依次绘制每个区域,过程可能有些繁琐。
其实,相比从头绘制,circlize包中提供了一个自动作图函数,chordDiagram(),好处是可以很方便快捷地出图。不过它只能展示相对简单的情形,对于前篇中的那种“多环”结构,则很难呈现(似乎还需从头一步步来)。好在大多数情况下我们所需展示的弦图都不是复杂样式,因此即可直接通过chordDiagram()一条命令快速作出。
如下示例的两组弦图,来自我师兄们的毕业论文。师兄们在构建了微生物共发生网络图后,统计了不同种类微生物之间的互作频数(OTU-OTU连接数),并通过弦图展示出以反映某种规律。
这种类型的弦图组分不复杂,即可快速直接通过chordDiagram()一步生成。下文仿照师兄们文章中的图来两个
网盘附件“edge.csv”,同样来自某微生物互作网络图的边连接数据,包含了相互作用的OTU以及OTU所属的门水平分类。
https://pan.baidu.com/s/1uXtturMnIIDbKsJCVZMrcA
首先展示单节点(OTU)间的互作频数弦图。
library(circlize)##单个节点绘制
#读取数据
edge <- read.csv('edge.csv')
#edge <- edge[order(edge$phylum_source, edge$phylum_target), ]
edge1 <- edge[3:4]
edge1$value <- 1
#作图,详情 ?chordDiagram
#或者参阅文档 https://jokergoo.github.io/circlize_book/book/the-chorddiagram-function.html
color = c(Acidobacteria = 'green', Actinobacteria = 'red', Bacteroidetes = 'orange', Firmicutes = 'purple', Gemmatimonadetes = 'skyblue', Proteobacteria = 'blue')
#png('edge1.png', width = 2000, height = 2000, res = 300, units = 'px')
pdf('edge1.pdf', height = 6, width = 6)
chordDiagram(edge1,
annotationTrack = c('grid', 'name'), #绘制外周圆弧区,显示名称,但隐藏刻度轴;显示刻度可使用 c('grid', 'name', 'axis')
grid.col = color, #颜色设置
annotationTrackHeight = c(0.035, 0.015), #名称离圆弧的距离,以及圆弧的宽度
directional = 1 #“方向缩进”
)
dev.off()
按OTU的门分类水平统计所有的互作频数后,展示总频数。
##合并节点绘制#统计
library(doBy)
edge2 <- summaryBy(value~phylum_source+phylum_target, edge1, FUN = sum)
#作图,详情 ?chordDiagram
#png('edge2.png', width = 2000, height = 2000, res = 300, units = 'px')
pdf('edge2.pdf', height = 6, width = 6)
chordDiagram(edge2,
annotationTrack = c('grid', 'name'),
grid.col = color,
annotationTrackHeight = c(0.035, 0.015),
directional = 1 )
dev.off()
所以,弦图可能看起来比较“高大上”,但是绘制起来也还是并没有想象中的那么难,对不对呢?
R包circlize绘制弦状图示例(多组分信息样式,从头绘制)