python绘制弦图-科研作图

ops/2024/9/23 15:21:49/

一、背景
        弦图以其直观、精美的展示方式受到越来越多人的关注,它不仅能够有效展示两个变量之间的联系,还能同时展现多个变量间的复杂互动,本文将通过Python语言中的pycirclize库,带你深入了解如何绘制弦图。

        弦图是一种圆形可视化方法,通常用于展示两组对象之间的相互联系和权重,弧线代表对象,弦代表对象之间的连接,弦的宽度表示关系的强弱,弦图直观地反映了多个对象之间的复杂联系,使其非常适用于社交网络、基因表达、系统架构等领域的数据展示。

二、代码实例。

from pycirclize import Circos
import pandas as pd#定义行名称与列名称
rows_name = ['S1', 'S2', 'S3']
cols_name = ['E1', 'E2', 'E3', 'E4', 'E5', 'E6']#定义矩阵数据
matrix_data = [[4,14,13,17,5,2],[5,12,9,15,3,7],[6,8,11,19,1,4]
]#创建数据框,用于表示矩阵数据,行名称与列名称分别为rows_name与cols_name
matrix_df = pd.DataFrame(matrix_data, index=rows_name, columns=cols_name)
matrix_df

#创建弦图对象
circos = Circos.initialize_from_matrix(matrix_df,#矩阵数据start=-265,#起始角度end=95,#结束角度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()
fig.savefig('弦图1.pdf',format='pdf',bbox_inches='tight',dpi=1200)

 

from pycirclize import Circos
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 生成一个10x10的随机整数矩阵
row_names = [f"S{i+1}" for i in range(10)]  # 行名称,S1 到 S10
col_names = [f"E{i+1}" for i in range(10)]  # 列名称,E1 到 E10
matrix_data = np.random.randint(1, 20, size=(10, 10))  # 生成随机1到20之间的整数
# 将矩阵数据转换为 DataFrame,以方便后续操作
matrix_df = pd.DataFrame(matrix_data, index=row_names, columns=col_names)
# 初始化 Circos 图
circos = Circos.initialize_from_matrix(    matrix_df,             # 传入矩阵数据    space=5,               # 每个单元之间的间隔设为5度    r_lim=(93, 100),       # 设置圆形图的半径范围为93到100    cmap='tab10',          # 使用颜色映射方案 'tab10',可以生成多种颜色    ticks_interval=30,     # 设置刻度间隔,每隔20个单位标记一个刻度    label_kws=dict(        r=94,              # 标签的半径距离为94        size=12,           # 标签的字体大小设为12        color='white'      # 标签的字体颜色为白色    ),    link_kws=dict(        ec='black',        # 弦的边框颜色为黑色        lw=0.5             # 弦的线宽设为0.5    ))
# 绘制 Circos 图
fig = circos.plotfig()
print(matrix_df)
fig.savefig("弦图2.pdf", format='pdf', bbox_inches='tight', dpi=1200)

 

 

from pycirclize.parser import Matrix
import pandas as pd
from pycirclize import Circos
# 创建一个包含 'from'、'to' 和 'value' 列的 DataFrame# 该表表示从某个节点到另一个节点的联系及其权重
fromto_table_df = pd.DataFrame([ ["A", "B", 10],  # A到B的权重为10    ["A", "C", 5],   # A到C的权重为5    ["A", "D", 15],  # A到D的权重为15    ["A", "E", 20],  # A到E的权重为20    ["A", "F", 3],   # A到F的权重为3    ["B", "A", 3],   # B到A的权重为3    ["B", "G", 15],  # B到G的权重为15    ["F", "D", 13],  # F到D的权重为13    ["F", "E", 13],  # F到E的权重为13    ["E", "A", 20],  # E到A的权重为20    ["E", "D", 6]    # E到D的权重为6], columns=["from", "to", "value"])  # 设置列名为 'from','to','value'
# 使用 Matrix 类的 parse_fromto_table 方法将 'from-to' 表解析为矩阵
matrix = Matrix.parse_fromto_table(fromto_table_df)
# 使用解析后的矩阵初始化 Circos 图
circos = Circos.initialize_from_matrix( matrix,              # 传入解析后的矩阵    space=3,             # 每个单元之间的间隔设置为3度    cmap="viridis",      # 使用 'viridis' 颜色映射表    ticks_interval=5,    # 设置刻度间隔为5    label_kws=dict(      # 设置标签的关键字参数        size=12,         # 标签字体大小为12       r=110            # 标签距离圆心的半径为110    ),    link_kws=dict(       # 设置弦的样式        direction=1,     # 设定弦的方向        ec="black",      # 弦的边框颜色为黑色       lw=0.5           # 弦的线宽设置为0.5    )
)
# 打印 from-to 表的内容,方便调试或查看
print(fromto_table_df.to_string(index=False))# 绘制 Circos 图
fig = circos.plotfig()
fig.savefig("弦图3.pdf", format='pdf', bbox_inches='tight', dpi=1200)


http://www.ppmy.cn/ops/114831.html

相关文章

【Java】掌握Java:基础概念与核心技能

文章目录 前言:1. 注释2. 字面量3. 变量详解3.1 变量的定义3.2 变量里的数据存储原理3.3 数据类型3.4 关键字、标识符 4. 方法4.1 方法是啥?4.2 方法的完整定义格式4.3 方法如何使用:4.4 方法的其他形式4.5 方法的其他注意事项4.5.1 方法是可…

Python 单元测试:深入理解与实战应用20240919

Python 单元测试:深入理解与实战应用 引言 在动态语言如 Python 中,代码的灵活性和动态特性使得开发效率大大提升,但也带来了潜在的风险:小的改动可能导致不可预见的功能失效。因此,确保代码逻辑的正确性和稳健性至关…

Python PDF转图片自定义输出

PDF转图片自定义输出 一、引入必要库 1 2import fitz import os也可以检查一下版本就是了:print(fitz.__doc__) 上一篇文章已经介绍过要使用的库,和写代码要用到的思路了。我们直接开始: 二、找到文件 首先是我们要获取用户的输入&#x…

C++--C++11(下)

目录 7.5 完美转发 8 新的类功能 9 可变参数模板 10 lambda表达式 11 包装器 7.5 完美转发 模板中的 && 万能引用 void Fun(int &x){ cout << "左值引用" << endl; } void Fun(const int &x){ cout << "const 左值引用…

卷积神经网络(CNN):深度学习中的视觉奇迹

目录 一、什么是卷积神经网络&#xff1f; 二、CNN的核心组件 1. 卷积层&#xff08;Convolutional Layer&#xff09; 2. 激活函数&#xff08;Activation Function&#xff09; 3. 池化层&#xff08;Pooling Layer&#xff09; 4. 全连接层&#xff08;Fully Connected…

git pull的merge和rebase模式

git pull 命令用于将远程仓库的更改拉取到本地仓库&#xff0c;并合并到当前分支中。git pull 默认使用合并&#xff08;merge&#xff09;模式&#xff0c;但也可以选择使用变基&#xff08;rebase&#xff09;模式。 Merge 模式&#xff08;默认模式&#xff09; git pull …

Leetcode990.等式方程的可满足性

题目 原题链接 等式方程的可满足性 思路 定义一个长度为26&#xff08;变量为小写字母&#xff09;的数组充当并查集&#xff0c;并将数组中的元素初始化为 -1判断“”并合并元素&#xff0c;将相等的放在一个集合中判断“!”&#xff1b;不等的如果在一个集合中&#xff0c;则…

VUE项目在Linux子系统部署

1、导读 环境&#xff1a;Windows 11、python 3.12.3、Django 4.2.11、 APScheduler 3.10.4 vue 背景&#xff1a;换系统需要重新安装&#xff0c;避免后期忘记&#xff0c;此处记录一下啊 事件&#xff1a;20240922 说明&#xff1a;使用node启动&#xff0c;非nginx&…