首页 分享 Circos 可视化:多维数据的环形展示

Circos 可视化:多维数据的环形展示

来源:花匠小妙招 时间:2025-05-13 18:24

背景

数据可视化是数据分析中的重要环节,尤其是在面对多维数据时,如何有效地展示各类特征及其之间的关系是一项挑战,接下来将介绍一种独特且高效的可视化工具——Circos,它以环形布局为基础,能够清晰、直观地展示不同类别、维度的复杂数据结构

通过本文,读者将了解 Circos 的基本原理和使用方法,配合 Python 实现环形图的构建,并展示 Circos 如何在不同场景下应用于模拟数据和实际数据分析中

Circos 可视化的基本原理

Circos 是一种环状图表,最初用于基因组学中的基因关系可视化,后来逐渐发展为广泛应用于各类多维数据展示的工具,它以圆形扇区为核心,不同的类别或维度可以分配到各个扇区中,每个扇区内可以绘制多个图形轨道,从而能够在同一图表中显示多种图形类型

Circos 的优势在于它可以将复杂的数据结构可视化,并且能在不同类别、维度之间绘制关联线,使数据间的关系一目了然

代码实现

模拟数据的 Circos 可视化

import numpy as np

from pycirclize import Circos

import matplotlib.pyplot as plt

plt.rcParams['font.family'] = 'Times New Roman'

plt.rcParams['axes.unicode_minus'] = False

np.random.seed(0)

sectors = {"A": 10, "B": 15, "C": 12, "D": 20, "E": 15}

circos = Circos(sectors, space=5)

for sector in circos.sectors:

sector.text(f"Sector:{sector.name}", r=110, size=15)

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))

circos.link(("B", 0, 3), ("C", 7, 11), color="skyblue")

circos.link(("C", 3, 5), ("E", 15, 12), color="lime", ec="black", lw=0.5, hatch="//", direction=2)

circos.link(("D", 8, 10), ("E", 2, 8), color="violet", ec="red", lw=1.0, ls="dashed")

circos.savefig("example01.pdf", dpi=1200)

fig = circos.plotfig()

利用 Circos 图表库生成了一个包含多个扇区和数据轨道的环形可视化图。每个扇区(A、B、C、D、E)代表不同的类别或数据区域,在每个扇区内绘制了三种不同类型的图表:线条图、散点图和条形图,用来展示数据的不同维度。此外,代码还绘制了多个扇区之间的连接线,展示它们之间的关联关系。通过这些图形和连接线,能够直观地展示不同类别的数据及其相互关系

Circos 可视化的实际应用:从模拟数据到真实数据

from sklearn.datasets import load_iris

from matplotlib.lines import Line2D

iris = load_iris()

data = iris.data

labels = iris.target

feature_names = iris.feature_names

species = iris.target_names

setosa = data[labels == 0]

versicolor = data[labels == 1]

virginica = data[labels == 2]

sectors = {"Setosa": len(setosa), "Versicolor": len(versicolor), "Virginica": len(virginica)}

circos = Circos(sectors, space=5)

for sector in circos.sectors:

sector.text(f"Species: {sector.name}", r=110, size=15)

if sector.name == "Setosa":

data_subset = setosa

elif sector.name == "Versicolor":

data_subset = versicolor

elif sector.name == "Virginica":

data_subset = virginica

x = np.arange(0, len(data_subset)) + 0.5

y_sepal_length = data_subset[:, 0]

y_sepal_width = data_subset[:, 1]

y_petal_length = data_subset[:, 2]

y_petal_width = data_subset[:, 3]

track1 = sector.add_track((80, 100), r_pad_ratio=0.1)

track1.axis()

track1.scatter(x, y_sepal_length)

track2 = sector.add_track((55, 75), r_pad_ratio=0.1)

track2.axis()

track2.bar(x, y_sepal_width)

track3 = sector.add_track((30, 50), r_pad_ratio=0.1)

track3.axis()

track3.line(x, y_petal_length)

track4 = sector.add_track((5, 25), r_pad_ratio=0.1)

track4.axis()

track4.scatter(x, y_petal_width)

circos.savefig("iris_circos.pdf", dpi=1200)

fig = circos.plotfig()

legend_text = """Track Information:

Track 1: Sepal Length

Track 2: Sepal Width

Track 3: Petal Length

Track 4: Petal Width

"""

plt.text(1.05, 0.5, legend_text, transform=plt.gca().transAxes, fontsize=12,

verticalalignment='center', bbox=dict(facecolor='white', alpha=0.5))

plt.savefig("iris_circos_with_legend_text.pdf", dpi=1200, bbox_inches="tight")

plt.show()

为进一步展示 Circos 的强大功能,使用 Circos 图表可视化了经典的鸢尾花(Iris)数据集,展示了每个物种(Setosa、Versicolor、Virginica)的四个特征:花萼长度、花萼宽度、花瓣长度和花瓣宽,每个物种对应一个环形扇区,内部按顺序展示四个轨道:第一轨道为花萼长度的散点图,第二轨道为花萼宽度的条形图,第三轨道为花瓣长度的线图,第四轨道为花瓣宽度的散点图。最后,代码添加了图例,说明了每个轨道代表的特征。通过这种方式,图形清晰地展示了不同鸢尾花物种之间在各个特征上的差异,由于 Circos 图中的数据展示相对复杂,尤其是当图形较为密集时,单独添加图例显得尤为重要,确保读者不会因为信息过载而感到困惑。

相关知识

基于Python的数据可视化:从一维到多维
数据可视化中的交互式图表和动态展示
数据可视化平台
数据可视化的通用逻辑
告别枯燥数据!20种色彩缤纷的数据可视化图表任你选,轻松应对各种场景
什么是数据可视化应用?它又是怎么实现的?
环形图
什么是大数据可视化?
创新玫瑰图展示:数据可视化实战教程.zip
Zeppelin可视化:使用leaflet插件实现数据的地图可视化展示

网址: Circos 可视化:多维数据的环形展示 https://www.huajiangbk.com/newsview1947039.html

所属分类:花卉
上一篇: 实验八 Pandas统计分析基础
下一篇: 通过KMeans聚类算法对鸢尾花

推荐分享