在生物信息学中,Circos图是一种常用的可视化工具,可以帮助研究人员直观地展示基因之间的关系。今天我们将通过一个简单的例子,带您了解如何在R语言中绘制一个Circos图。
什么是Circos图?
Circos图是一种环形图,可以显示复杂的关系和数据模式。它特别适合展示基因组数据中的相互作用和关联。Circos图的核心是其环形布局,使得数据的相互关系可以通过环形和弦的方式展示出来,非常直观和美观。
代码详解
# 加载必要的包
options(stringsAsFactors=F)
library(circlize)
library(ComplexHeatmap)
# 读取输入文件
rt <- read.table("input.txt", sep="\t", header=T, check.names=F, row.names=1)
rt <- t(rt) # 转置数据,使基因成为列
# 计算基因间相关系数
cor1 <- cor(rt)
# 设置图形颜色
# 创建一个颜色渐变,从指定的颜色到白色再到指定的颜色,共64个颜色
col <- colorRampPalette(c("#FE9200", "white", "#4F8D00"))(64)
cor1[cor1 == 1] <- 0 # 删除相关性为1的项,避免自相关干扰
# 创建颜色矩阵
c1 <- col[round((cor1 + 1) * 31) + 1] # 将相关性值映射到颜色渐变
col1 <- matrix(c1, ncol=ncol(rt))
# 绘制Circos图
pdf("circos.pdf", width=8, height=8) # 创建PDF文件以保存图形
par(mar=c(2, 2, 2, 4)) # 设置图形的边距
circos.par(gap.degree=c(4, rep(2, nrow(cor1)-1)), start.degree = 90) # 设置环形图参数
# 绘制和弦图
chordDiagram(cor1, grid.col=rainbow(ncol(rt)), col=col1, transparency=0.3, symmetric=T)
# 增加图例
par(xpd=T)
colorlegend(col, vertical=T, labels=c(1, 0, -1), xlim=c(1.2, 1.4), ylim=c(-0.5, 0.5), title="Correlation")
# 关闭PDF设备
dev.off()
circos.clear()
read.table
:从文件“input.txt”中读取数据,使用制表符(\t
)作为分隔符,第一行为列名,将第一列作为行名。
t(rt)
:转置数据矩阵,使得基因成为列,样本成为行。
cor(rt)
:计算转置后数据矩阵中基因间的相关系数,生成一个相关系数矩阵。
colorRampPalette
:创建一个颜色渐变,从橙色(#FE9200
)到白色,再到绿色(#4F8D00
),共64个颜色。
cor1[cor1 == 1] <- 0
:将相关性为1的项设为0,以避免自相关干扰(自相关的值总是1)。
round((cor1 + 1) * 31) + 1
:将相关性值从[-1, 1]范围映射到颜色渐变的索引范围[1, 64]。
matrix(c1, ncol=ncol(rt))
:将颜色向量转换为矩阵,以便用于图形绘制。
pdf("circos.pdf", width=8, height=8)
:创建一个PDF文件“circos.pdf”保存图形,设置宽高为8英寸。
par(mar=c(2, 2, 2, 4))
:设置图形的边距。
circos.par(gap.degree=c(4, rep(2, nrow(cor1)-1)), start.degree = 90)
:设置和弦图的参数,定义每个基因块之间的间隙角度和起始角度。
chordDiagram(cor1, grid.col=rainbow(ncol(rt)), col=col1, transparency=0.3, symmetric=T)
:使用chordDiagram
函数绘制和弦图。
grid.col=rainbow(ncol(rt))
:设置基因块的颜色,使用彩虹色。
col=col1
:设置和弦颜色,使用之前创建的颜色矩阵。
transparency=0.3
:设置和弦的透明度。
colorlegend(col, vertical=T, labels=c(1, 0, -1), xlim=c(1.2, 1.4), ylim=c(-0.5, 0.5), title="Correlation")
:添加颜色图例。
labels=c(1, 0, -1)
:设置图例标签。
title="Correlation"
:设置图例标题。
circos.clear()
:清除Circos图形环境。