Circos 可视化:多维数据的环形展示
背景
数据可视化是数据分析中的重要环节,尤其是在面对多维数据时,如何有效地展示各类特征及其之间的关系是一项挑战,接下来将介绍一种独特且高效的可视化工具——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聚类算法对鸢尾花 |
推荐分享

- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039