Python Pycirclize绘制切尔科斯图(附带实例)
切尔科斯图(Circos)是一种用于可视化循环数据的强大工具,它的特点是将数据以圆环的形式展示出来,便于观察和理解数据之间的关系。
通常情况下,切尔科斯图用于展示染色体的结构、基因组之间的相互作用、基因表达数据等循环性质的数据。切尔科斯图由以下 4 个部分组成:
【实例 1】使用 Pycirclize 库创建一个切尔科斯图。输入如下代码:
【实例 2】利用 Pycirclize 库创建一个切尔科斯图,用于展示大肠杆菌质粒(NC_002483)的基因组结构信息,包括基因的分布和定位。输入如下代码:
通常情况下,切尔科斯图用于展示染色体的结构、基因组之间的相互作用、基因表达数据等循环性质的数据。切尔科斯图由以下 4 个部分组成:
- 圆环结构:切尔科斯图以一个圆环的形式展示数据,圆环被分为若干扇形区域,每个区域代表数据中的一个部分或者数据集。
- 数据编码:切尔科斯图通过将数据映射到圆环的不同区域来展示数据,这些区域可以代表不同的实体、样本或者特征。数据可以通过扇形区域的长度、颜色、弧度等来编码,以表达不同的属性或者数值。
- 连接线:切尔科斯图还可以显示数据之间的连接关系,这些连接关系通过连接扇形区域的方式展示。连接线的粗细、颜色等属性可以反映连接的强度、类型或者其他信息。
- 标签和刻度:切尔科斯图通常会在圆环的外部添加标签和刻度,用于标识不同的区域或者提供数据的附加信息。
【实例 1】使用 Pycirclize 库创建一个切尔科斯图。输入如下代码:
from pycirclize import Circos # 导入 Pycirclize 库中的 Circos 类 import numpy as np # 导入 NumPy np.random.seed(0) # 设置随机数种子,确保每次运行结果一致 # 初始化切尔科斯图的扇形区域 sectors={"A": 10,"B": 15,"C": 12,"D": 20,"E": 15} circos=Circos(sectors,space=5) # 创建 Circos 对象,指定扇形区域和间隔 for sector in circos.sectors: # 循环遍历每个扇形区域 # 绘制扇形区域的名称 sector.text(f"Sector: {sector.name}", r=110,size=15) # 创建 X 坐标位置和随机的 Y 值 x=np.arange(sector.start,sector.end) + 0.5 y=np.random.randint(0,100,len(x)) # 绘制线条 track1=sector.add_track((80,100),r_pad_ratio=0.1) # 在扇形区域内添加轨道 track1.xticks_by_interval(interval=1) # 设置刻度间隔 track1.axis() # 添加轨道的坐标轴 track1.line(x,y) # 绘制线条 # 绘制散点 track2=sector.add_track(55,75),r_pad_ratio=0.1) # 添加轨道 track2.axis() # 添加坐标轴 track2.scatter(x,y) # 绘制散点图 # 绘制条形图 track3=sector.add_track(30,50),r_pad_ratio=0.1) # 添加轨道 track3.axis() # 添加坐标轴 track3.bar(x,y) # 绘制条形图 # 绘制连接线 circos.link("A",0,3,"B",15,12) # 连接扇形区域 A 和 B circos.link("B",0,3,"C",7,11),color="skyblue" # 连接扇形区域 B 和 C,指定颜色为天蓝色 circos.link("C",2,5,"E",15,12),color="chocolate",direction=1) # 连接扇形区域 C 和 E,指定颜色为巧克力色,设置方向为逆时针 circos.link("D",3,5,"D",18,15),color="lime", ec="black",lw=0.5,hatch="//",direction=2) # 连接扇形区域 D 和 D,指定颜色为酸橙色,边缘颜色为黑色,填充样式为斜线 circos.link("D",8,10,"E",2,8),color="violet", ec="red",lw=1.0,ls="dashed") # 连接扇形区域 D 和 E,指定颜色为紫罗兰色,边缘颜色为红色,线型为虚线 circos.save("example01.png") # 将绘制好的切尔科斯图保存为图片文件 fig=circos.plotfig() # 绘制切尔科斯图上述代码展示如何在不同的扇形区域内绘制线条、散点和条形图,以及如何添加连接线。通过这些可视化操作,可以直观地展示循环数据之间的关系和分布情况。输出的结果如下图所示。

【实例 2】利用 Pycirclize 库创建一个切尔科斯图,用于展示大肠杆菌质粒(NC_002483)的基因组结构信息,包括基因的分布和定位。输入如下代码:
from pycirclize import Circos # 导入 Pycirclize 库中的 Circos 类 from pycirclize.utils import fetch_genbank_by_acid # 用于下载 GenBank 数据 from pycirclize.parser import Genbank # 用于解析 GenBank 数据 # 下载大肠杆菌质粒(NC 002483)的 GenBank 数据 gbk_fetch_data=fetch_genbank_by_acid("NC_002483") gbk=Genbank(gbk_fetch_data) # 使用 GenBank 数据初始化 Genbank 解析器 # 使用基因组大小初始化 Circos 实例 circos=Circos(sectors=(gbk.name: gbk.range_size) circos.text(f"Escherichia coli K-12 plasmid F\nn{gbk.name}", size=14) # 在图中添加文本信息 circos.rect(r_lim=(90,100), fc="lightgrey", ec="none", alpha=0.5) # 绘制一个灰色矩形 sector=circos.sectors[0] # 获取第一个扇形区域 # 绘制正向链 CDS f_cds_track=sector.add_track(95, 100) # 在扇形区域内添加轨道 f_cds_feat=gbk.extract_features("CDS", target_strand=1) f_cds_track.genomic_features(f_cds_feat, plotstyle="arrow", fc="salmon", lw=0.5) # 绘制反向链 CDS r_cds_track=sector.add_track(90, 95) r_cds_feat=gbk.extract_features("CDS", target_strand=-1) r_cds_track.genomic_features(r_cds_feat, plotstyle="arrow", fc="skyblue", lw=0.5) # 绘制 'gene' qualifier 标签(如果存在) labels, label_pos_list=[], [] for feat in gbk.extract_features("CDS"): start=int(feat.location.start) end=int(feat.location.end) label_pos=(start + end) / 2 gene_name=feat.qualifiers.get("gene", [None] [0] if gene_name is not None: labels.append(gene_name) label_pos.append(label_pos) f_cds_track.xticks(label_pos_list, labels, label_size=6, label_orientation="vertical") # 绘制 X 轴刻度(间隔为 10Kb) r_cds_track.xticks_by_interval(10000, outer=False, label_formatter=lambda v: f"{v/1000:.1f} Kb") fig=circos.plotfig() # 绘制 Circos 图上述代码首先下载 GenBank 数据,使用 Genbank 解析器进行解析。然后,利用 Circos 类初始化一个 Circos 实例,根据基因组大小创建了相应的扇形区域,并在图中添加了相关文本信息和灰色矩形。接着,根据正向链和反向链的 CDS 数据绘制了箭头表示的基因区域。最后,根据基因名称绘制了刻度标签。输出的结果如下图所示。
