Circos图是一种采用圆形布局展示数据的可视化图表,这种独特的圆形设计特别适合用来探索不同对象之间或位置之间的关系。如果你的数据涉及某种关联性,或者需要展示多层次、多尺度的注释信息,Circos图将是一个非常理想的选择。
Circos图无论是基因组学研究、迁徙模式分析,还是数学艺术创作等领域,Circos图都能通过清晰、直观的方式将复杂的数据关系展现出来,帮助人们更好地理解和分析数据。
本文内容包含:
- circos案例分享
- Python实现circos图
circos案例分享
看一些案CNS、NAR等顶刊中的案例,
Python实现circos图
利用matplotlib结合pycirclize可轻松实现circos图。利用“3.2.16 circos 数据集”,构建一个五层 Circos 图,依次展示 hg38 基因组上的 Cytoband 信息、染色体区域的数值分布(包括散点图、柱状图和折线图),以及不同染色体区域之间的关联关系(和弦图),以直观演示 PyCirclize 的基本用法。
- 数据准备
chr_bed_file = "matplotlib_data/pycircos_data/hg38_chr.bed" # 染色体信息
cytoband_file = "matplotlib_data/pycircos_data/hg38_cytoband.tsv" # Cytoband数据
link_file = "matplotlib_data/pycircos_data/hg38_genomic_link.tsv" # 基因组链接数据
link_data = pd.read_csv(link_file, sep="\t", header=None)
- circos图绘制
# 定义绘图配色
ColorCycler.set_cmap("Accent") # 设置调色板
chr_names = [s.name for s in circos.sectors] # 获取染色体名称
colors = ColorCycler.get_color_list(len(chr_names)) # 生成颜色列表
chr_name2color = {name: color for name, color in zip(chr_names, colors)}
# 绘图
circos = Circos.initialize_from_bed(chr_bed_file,
start=0,
end=360,
space=2,
endspace=True) # 初始化Circos图
# 添加Cytoband(最外层)
circos.add_cytoband_tracks((95, 100), cytoband_file)
for sector in circos.sectors:
sector.text(sector.name.replace("chr", "Chr"),
r=120,
size=10,
color="black") # 显示染色体名称
sector.get_track("cytoband").xticks_by_interval(
50000000, # 每隔50000000bp添加刻度
label_size=8,
label_orientation="vertical",
label_formatter=lambda v: f"{v / 1000000:.0f} Mb", # 刻度标签格式化为Mb
)
for sector in circos.sectors:
# 为每条染色体区域(sector)生成示例数据(一般使用场景为,区域的基因表达水平、突变频率或覆盖度等信息)
step = 8000000 # 数据间隔
x = np.arange(sector.start + (step / 2), sector.end - (step / 2),
step) # X轴数据
y = np.random.randint(0, 100, size=len(x)) # Y轴数据
# 添加散点图(第2层)
track1 = sector.add_track((80, 90), r_pad_ratio=0.1)
track1.axis()
track1.scatter(x, y, vmax=100, s=10, color="g")
# 添加柱状图(第3层)
track2 = sector.add_track((65, 75), r_pad_ratio=0.1)
track2.axis()
track2.bar(x, y, vmax=100, width=step * 0.7, color="r")
# 添加折线图(第4层)
track3 = sector.add_track((50, 60), r_pad_ratio=0.1)
track3.axis()
track3.line(x, y, vmax=100, color="b")
# 添加Chord图(第5层)
for index, row in link_data.sample(n=2500, random_state=42).iterrows():
region1 = (row[0], row[1], row[2]) # 第一个基因组区域
region2 = (row[3], row[4], row[5]) # 第二个基因组区域
color = chr_name2color.get(row[0], "gray") # 连接颜色
circos.link(region1, region2, color=color)
# 添加标题和个性化设置
circos.text("Circos图", deg=320, r=145, size=20, color="red") # 添加标题
fig = circos.plotfig(dpi=500) # 绘制图像,设置分辨率
fig.subplots_adjust() # 调整子图布局
fig.set_edgecolor("gray")
fig.set_linewidth(0.8)
fig.show()
Circos 图从外到里共5层,每一层的含义见代码中。
推荐阅读:
标签:全场,sector,Circos,color,震撼,chr,row,circos From: https://blog.csdn.net/qq_21478261/article/details/145247428