首页 > 编程笔记 > Python笔记 阅读:3

Python Pycirclize绘制和弦图(附带实例)

和弦图(Chord Diagram)是一种用于可视化关系和流量的图表类型。它通过使用弦和节点来表示数据中的实体和它们之间的关系,帮助展示复杂网络中的交互和连接模式。

弦的宽度和颜色可以用来表示关系的强度或流量的大小,较宽或较深的弦可能表示较强的关系或较大的流量。

弦图的优点是能够直观地显示实体之间的关系和流量,并帮助观察数据中的交互模式。它常用于显示社交网络、流量分析、组织结构等。

【实例 1】使用 Pycirclize 库创建和弦图 1。输入如下代码:
from pycirclize import Circos  # 导入 Pycirclize 库中的 Circos 类
import pandas as pd            # 导入 Pandas 库

# 创建矩阵数据框(3 行 6 列)
row_names = ["s1", "s2", "s3"]                       # 行名称
col_names = ["E1", "E2", "E3", "E4", "E5", "E6"]     # 列名称

# 矩阵数据
matrix_data = [
    [4,  14, 13, 17, 5,  2 ],
    [7,  1,  6,  8,  12, 15],
    [9,  10, 3,  16, 11, 18]
]

matrix_df = pd.DataFrame(matrix_data,
                         index=row_names,
                         columns=col_names)

# 从矩阵初始化和弦图(也可以直接加载 TSV 格式的矩阵文件)
circos = Circos.initialize_from_matrix(
    matrix_df,
    start=-265,         # 起始角度
    end=95,             # 结束角度
    space=5,            # 每个扇形之间的间隔
    r_lim=(93, 100),    # 设置半径范围
    cmap="tab10",       # 颜色映射
    label_kws=dict(r=94, size=12, color="white"),  # 标签参数
    link_kws=dict(ec="black", lw=0.5)              # 连接线参数
)

print(matrix_df)   # 打印矩阵数据框
fig = circos.plotfig()  # 绘制和弦图
上述代码首先创建了一个包含数字的矩阵数据框,然后使用该数据初始化了 Circos 对象。通过指定一些参数,如起始角度、结束角度、半径范围、颜色映射等,创建了和弦图。输出的结果如下图所示。


【实例 2】使用 Pycirclize 库创建和弦图 2。输入如下代码:
from pycirclize import Circos  # 导入 Pycirclize 库中的 Circos 类
import pandas as pd      # 导入 Pandas 库

# 创建矩阵数据(10 行 10 列)
row_names = list("ABCDEFGHIJ")  # 行名称
col_names = row_names    # 列名称与行名称相同
matrix_data = [
    [51, 115, 60, 17, 120, 126, 115, 179, 127, 114],
    [108, 138, 165, 170, 85, 221, 75, 107, 203, 791],
    [108, 54, 72, 123, 84, 117, 106, 114, 50, 271],
    [62, 134, 28, 185, 199, 179, 74, 94, 116, 108],
    [211, 114, 49, 55, 202, 97, 10, 52, 99, 111],
    [87, 6, 101, 117, 124, 171, 110, 14, 175, 164],
    [167, 99, 109, 143, 98, 42, 95, 163, 134, 781],
    [88, 83, 136, 71, 122, 20, 38, 264, 225, 115],
    [145, 82, 87, 123, 121, 55, 80, 32, 50, 121],
    [122, 109, 849, 94, 133, 75, 71, 115, 60, 210],
]

matrix_df = pd.DataFrame(matrix_data, index=row_names, columns=col_names)  # 使用 Pandas 创建数据框

# 从矩阵初始化和弦图(也可以直接加载 TSV 格式的矩阵文件)
circos = Circos.initialize_from_matrix(
    matrix_df,
    space=3,           # 每个扇形之间的间隔
    r_lim=(93, 100),   # 设置半径范围
    cmap="tab10",      # 颜色映射
    ticks_interval=500,    # 刻度间隔
    label_kws=dict(r=94, size=12, color="white"),  # 标签参数
    link_kws=dict(ec="black", lw=0.5),  # 连接线参数
)

print(matrix_df)  # 打印矩阵数据框
fig = circos.plotfig()  # 绘制和弦图
上述代码首先创建了一个包含数字的矩阵数据框,然后使用该数据初始化了 Circos 对象。通过指定一些参数,如每个扇形之间的间隔、半径范围、颜色映射等,创建了和弦图。输出的结果如下图所示。


【实例 3】使用 Pycirclize 库创建和弦图 3。输入如下代码:
from pycirclize import Circos  # 导入 Pycirclize 库中的 Circos 类
from pycirclize.parser import Matrix  # 导入 Pycirclize 库中的 Matrix 解析器
import pandas as pd      # 导入 Pandas 库

# 创建 from-to 表格数据框并转换为矩阵
fromto_table_df = pd.DataFrame([["A", "B", 10], ["A", "C", 5],
                   ["A", "D", 15], ["A", "E", 201], ["A", "F", 3],
                   ["B", "A", 3], ["B", "G", 151], ["F", "D", 13],
                   ["F", "E", 2], ["E", "A", 201], ["E", "D", 61]],
                  columns=["from", "to", "value"],)  # 列名(可选)

matrix = Matrix.parse_fromto_table(fromto_table_df)  # 从 from-to 表格数据框解析矩阵

# 从矩阵初始化和弦图
circos = Circos.initialize_from_matrix(matrix,
    space=3,                # 每个扇形之间的间隔
    cmap="viridis",            # 颜色映射
    ticks_interval=5,          # 刻度间隔
    label_kws=dict(size=12, r=110),    # 标签参数
    link_kws=dict(direction=1, ec="black", lw=0.5),)  # 连接线参数

print(fromto_table_df.to_string(index=False))  # 打印 from-to 表格数据框
fig = circos.plotfig()  # 绘制和弦图
上述代码首先创建了一个包含 from-to 信息的表格数据框,并使用 Matrix 解析器将其转换为矩阵。然后使用该矩阵初始化了 Circos 对象。通过指定一些参数,如每个扇形之间的间隔、颜色映射等,创建和弦图。输出的结果如下图所示。

相关文章