跟着小果学领略绘图的魅力!轻松复现IF16.6高分文献中的精美Chord图!!

在科学研究中,数据可视化是展示研究成果并传递信息的重要方式。其中,Chord图以其独特的视觉效果和强大的信息传达能力,在展示实体间关系和联系方面扮演着重要角色。

小果今天分享的这份高分文献中,Chord图以IF16.6的高影响因子荣登其中,为读者呈现了一场视觉盛宴。这些图表不仅令人赏心悦目,更是深藏着研究的宝贵信息。

所以小果带领小伙伴去学习这些高分文献中数据可视化的方法,并轻松复现这些高分文献中精美Chord图的绘制过程。我们先了解一下Chord图,其实它是通过环形布局展示了不同实体之间的关系网络,以弦的方式连接各个实体,线条的粗细、颜色的深浅都隐含着数据背后的丰富内涵。每一条线都是一个故事,连接着数据中的关联和联系,而每一次绘制都是对数据本身意义的再次诠释。

这次呢我们就去踏上Chord图的绘制之旅。通过解读高分文献中的数据结构和可视化手法,探索一下Chord图背后的绘制技巧和方法。从数据的准备,到Chord图的布局和装饰,我们将一步步解析每个环节,让复杂的图形变得易于理解和操作。

我们来看一下如何这次分享的文献中的图,是来自《A latitudinal gradient of deep-sea invasions for marine fishes》的图3,是来自IF16.6顶级期刊:

上述这个图,和我们平时见到的一些细节不一样,小伙伴也不知道如何绘制,下面我们就开始绘制吧

这里呢小果还要说明一下,我们这次做的数据分析数据量是非常大的,我们操作占用内存比较大,所以建议各位小伙伴可以使用服务器去运行,如果没有自己的服务器也没有关系,可以欢迎联系我们使用服务器租赁~

我们先看一下数据的格式

dat<-read_excel(“data1.xlsx”)

dat

小伙伴可以按照这样的数据自行去设置

然后我们加载一下使用的包

library(readxl)

library(circlize)

后面就可以进行绘制了,绘制之前呢,我们先设置一下Circos 图的参数

#circos.par定义 Circos 图的整体参数

circos.par(start.degree = 90, #控制了起始角度

#gap.degree = 4,

points.overflow.warning = FALSE,#控制点溢出的警告

gap.after=c(“A1″=5,”A2″=5,”A3″=15,#控制在特定区块后的间隔

“B1″=5,”B2″=5,”B3″=15,

“D1″=5,”D2″=5,”D3″=15))

这是对基础的设置了一下,还有去设置游戏额颜色的变量

#颜色向量,用于设定不同区块的颜色

grid.col<-c(“A1″=”#B0E0E6″,”A2″=”#2C8EB5″,”A3″=”#16465B”,

“B1″=”#B0E0E6″,”B2″=”#2C8EB5″,”B3″=”#16465B”,

“D1″=”#B0E0E6″,”D2″=”#2C8EB5″,”D3″=”#16465B”)

颜色设置完成后,就是对不同区域进行分,这样才能分清楚那个区域匹配那个

#区块组的标签向量,用于将不同的区块分组

group<-c(“A1″=”A”,”A2″=”A”,”A3″=”A”,

“B1″=”B”,”B2″=”B”,”B3″=”B”,

“D1″=”D”,”D2″=”D”,”D3″=”D”)

设置完,我们就创建和线图了

一些代码,小果都进行了注释,就不一一举例,很好理解

#创建 Chord 图

chordDiagram(dat,

grid.col = grid.col,#用于区块颜色的向量

col = rand_color(nrow(dat)),#通过 rand_color 函数随机生成用于连线的颜色

group = group,#指定区块所属的组

transparency = 0.25,#设置图形透明度。

directional = 1,#指定连接是否有方向性

direction.type = c(“arrows”, “diffHeight”), #设定连接线的类型

diffHeight = -0.04,#调整连接线的高度

annotationTrack = “grid”, #用于添加注释轨道和设置其高度。

annotationTrackHeight = c(0.08, 0.1),#用于添加注释轨道和设置其高度。

link.arr.type = “big.arrow”, #指定连接箭头的类型

# link.sort = TRUE,

# link.decreasing = TRUE,

link.largest.ontop = TRUE,#确保最大的连接位于最上层

#调整 Chord 图中轨道的外观和布局

preAllocateTracks = list(

track.height = 0.1,#设置轨道的高度为 0.1

#设定轨道的边距,第一个数字(0.01)代表轨道内部元素的上边距

#第二个数字(0)代表轨道内部元素的下边距

track.margin = c(0.01, 0)

))

这样基础的图形就出来了,后面我们还需要进行细节的调整

去自定义一下轨道上的内容,和文献中一样,这就需要用到通过 circos.trackPlotRegion() 函数

来看一下如何绘制的

circos.trackPlotRegion(

track.index = 2, #指定了要绘制的轨道的索引

bg.border = NA, #设置轨道的背景边框为透明

#自定义函数,用于在轨道上绘制内容

#获取了当前绘图区域的 x 轴限制

panel.fun = function(x, y) {

#从细胞元数据中获取了部分信息,处理区块的索引或标签。

xlim = get.cell.meta.data(“xlim”)

#sector.index = get.cell.meta.data(“sector.index”)

sector.index = gsub(“[a-z]+_”, “”, get.cell.meta.data(“sector.index”))

# 用于在轨道上添加文字标签

circos.text(

x = mean(xlim), #指定了文本标签的 x 轴位置,绘图区域 x 轴限制的平均值作为位置

y = 0.5, #文本标签的 y 轴位置设定为 0.5,指定了轨道的中心位置

col = “white”,#本标签的颜色设定为白色

labels = sector.index, #将区块的索引或标签作为标签添加到图上

facing = “bending”, #设定了文本标签的朝向

cex = 1,#指定了文本标签的缩放比例

niceFacing = TRUE#用于确保文本标签朝向的良好显示

)

}

)

不过到这步骤,我们的基础图形就绘制的差不多,为了进一步复现文献中,我们还需要进行细节上的调整,就是突出显示 Circos 图中特定区块的部分

就需要用highlight.sector()

names(group[7:9])#获取 group 变量中索引为7到9的区块的名称

i<-1

我们先调用完上面的分组,然后进行绘制

这里就分三个模块进行了绘制,原理都一样,所以就一起绘制了:

##highlight.sector() 函数在 Circos 图的特定轨道上突出显示不同组的区块

highlight.sector(names(group[7:9]),

track.index = 1, #指定了轨道索引

facing = “bending”, #控制了文本标签的朝向

font = 2,

col = ifelse(i == 1, “#E6AE48FF”, “#E6AE483a”),#设置区块颜色

border = ifelse(i == 1, TRUE, FALSE), #控制边框是否显示

lwd = ifelse(i == 1, 2, 0.01),#控制边框的线宽

text = “tropical”,

cex = 1.5, #文本缩放比例

text.col = “white”, ##文本颜色

niceFacing = TRUE)#确保文本标签朝向良好显示

代码中ifelse根据条件选择不同的颜色和属性来突出显示区块

##highlight.sector() 函数在 Circos 图的特定轨道上突出显示不同组的区块

highlight.sector(names(group[4:6]),

track.index = 1, #指定了轨道索引

facing = “bending”, #控制了文本标签的朝向

font = 2,

border = ifelse(i == 2, TRUE, FALSE),#控制边框是否显示

lwd = ifelse(i == 2, 2, 0.01),#控制边框的线宽

col = ifelse(i == 2, “#20A486”, “#20A4863a”),#设置区块颜色

#显示的文本

text = “temperate”,

cex = 1.5, #文本缩放比例

text.col = “white”,#文本颜色

niceFacing = TRUE)#确保文本标签朝向良好显示

##highlight.sector() 函数在 Circos 图的特定轨道上突出显示不同组的区块

highlight.sector(names(group[1:3]),

track.index = 1,

facing = “bending”,

font = 2,

col = ifelse(i == 3, “#472D7B”, “#472D7B3a”),

border = ifelse(i == 3, TRUE, FALSE),

lwd = ifelse(i == 3, 2, 0.01),

text = “polar”,

cex = 1.5,

text.col = “white”,

niceFacing = TRUE)

}

里面的字小果都按照文献中的内容进行了复现,

到现在我们的绘制就完成了,上述内容除了数据和颜色有一点不一样,小伙伴可以按照自己的喜爱去设置,记得多多理解代码的意思,这样才可以绘制出自己想要的图形,快去动手试试吧!!

最后呢,小果给小伙伴带个小福利,如果小伙伴觉得自己运行代码太麻烦,可以试试我们的云生信小工具哟,里面有成熟的代码,只要输入合适的数据就可以直接出想要的图呢。这是我们的网址http://www.biocloudservice.com/home.html

多多关注我们公众号,一来学生信!