python绘制弦图-科研作图

news2024/9/23 7:42: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.coloradmin.cn/o/2157007.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux中vim编辑器的应用实例

前言 Linux有大量的配置文件,其中编辑一些配置文件,最常用的工具就是 Vim ,本文介绍一个实际应用的Vim编辑器开发文档的实例。 Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。…

力扣 92.反转链表Ⅱ

力扣《反转链表》系列文章目录 刷题次序,由易到难,一次刷通!!! 题目题解206. 反转链表反转链表的全部 题解192. 反转链表 II反转链表的指定段24. 两两交换链表中的节点两个一组反转链表 题解225. K 个一组翻转链表K …

基尔霍夫衍射理论

一、矢量理论到标量理论 前提条件:介质同时具有线性、各向同性、均匀性且无色散。 结论:电场和磁场的所有分量的行为完全相同,可由单一的一个标量波动方程描述,标量理论可以完全准确的代替矢量理论。 若介质不具备上述前提,则用标量理论来表征矢 量理论就会引入误差。 …

【C++】继承(上)

个人主页~ 继承 一、继承的概念以及定义1、继承的概念2、继承的定义(1)定义格式(2)继承基类成员访问方式的变化 二、基类和派生类对象赋值转换三、继承中的作用域 一、继承的概念以及定义 1、继承的概念 继承机制是面向对象程序…

【C语言零基础入门篇 - 17】:排序算法

文章目录 排序算法排序的基本概念冒泡排序选择排序插入排序 排序算法 排序的基本概念 1、什么是排序? 排序是指把一组数据以某种关系(递增或递减)按顺序排列起来的一种算法。 例如:数列 8、3、5、6、2、9、1、0、4、7 递增排序…

Windows 配置docker和ubuntu系统

windos10 配置docke时,无意间发现wsl功能挺好用,而且是和docker 的linux容器连通的。 记录一下解决的几个问题 error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.40/images/json: open //./pipe/docker_engine: The system cannot …

音乐项目,总结

今天的写的思路都挺简单的但是比较繁琐&#xff0c;这个查找&#xff0c;传文件的话可以了&#xff0c;但是没有用分片传送&#xff0c;然后在写音乐播放的处理&#xff0c;<歌单&#xff0c;二级评论&#xff0c;歌曲歌词滚轮播放>三个还没有实现&#xff0c;时间挺紧张…

Spring 源码分析

Spring 源码版本 4.2.8.RELEASE Bean 生命周期 动态代理 代理模式 优点: 在不修改目标对象的功能前提下&#xff0c;能通过代理对象对目标功能扩展缺点: 代理对象需要与目标对象实现一样的接口&#xff0c;所以会有很多代理类&#xff0c;一旦接口增加方法&#xff0c;目标对…

HarmonyOS鸿蒙开发实战(5.0)悬浮窗拖拽和吸附动画实践

鸿蒙HarmonyOS NEXT开发实战往期文章必看&#xff08;持续更新......&#xff09; HarmonyOS NEXT应用开发性能实践总结 HarmonyOS NEXT应用开发案例实践总结合集 最新版&#xff01;“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线&#xff01;&#xff08;从零基础入门…

spring揭秘22-springmvc01-概述

文章目录 【README】【1】MVC模式实现web应用架构【1.1】MVC模式【1.2】单个集中式控制器实现【1.2.1】引入2层控制器 【2】springmvc概述【2.1】一级控制器&#xff1a;DispatcherServlet【2.1.1】HandlerMapping处理器映射【2.1.2】springmvc二级控制器Controller【2.1.3】Vi…

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作

写在前面&#xff1a; &#x1f31f; 欢迎光临 清流君 的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落。&#x1f4dd; 个人主页&#xff1a;清流君_CSDN博客&#xff0c;期待与您一同探索 移动机器人 领域的无限可能。 &#x1f50d; 本文系 清流君 原创之作&…

7款国内AI搜索引擎大全网站

与传统搜索引擎相比&#xff0c;AI搜索引擎利用先进的自然语言处理、机器学习和深度学习技术&#xff0c;提供更加精准和个性化的搜索服务。小编就来和大家分享国内免费的AI搜索引擎网站&#xff0c;方便大家体验使用。 AI搜索引擎网站大全&#xff1a;https://www.bgrdh.com/f…

java日志框架之Log4j

文章目录 一、Log4j简介二、Log4j组件介绍1、Loggers (日志记录器)2、Appenders&#xff08;输出控制器&#xff09;3、Layout&#xff08;日志格式化器&#xff09; 三、Log4j快速入门四、Log4j自定义配置文件输出日志1、输出到控制台2、输出到文件3、输出到数据库 五、Log4j自…

ESP32无线WiFi蓝牙SOC,设备物联网通信方案,启明云端乐鑫代理商

在当今数字化时代&#xff0c;物联网(IoT)正迅速成为连接我们生活各个方面的无形纽带&#xff0c;越来越多的日常物品被赋予了智能功能&#xff0c;从灯泡到插座&#xff0c;从门锁到家电设备&#xff0c;这些设备正在改变我们与家庭环境的互动方式。 随着智能产品的普及&…

*C++:string

一.STL简介 1.STL STL(standard template libaray- 标准模板库 ) &#xff1a; 是 C 标准库的重要组成部分 &#xff0c;不仅是一个可复用的组件库&#xff0c;而且 是一个包罗数据结构与算法的软件框架 。 2.STL六大组件 二.标准库里的string类 标准string库网址&#xff1…

【AI算法岗面试八股面经【超全整理】——NLP】

AI算法岗面试八股面经【超全整理】 概率论【AI算法岗面试八股面经【超全整理】——概率论】信息论【AI算法岗面试八股面经【超全整理】——信息论】机器学习【AI算法岗面试八股面经【超全整理】——机器学习】深度学习【AI算法岗面试八股面经【超全整理】——深度学习】NLP【A…

Crack道路裂缝检测数据集——目标检测数据集

【Crack道路裂缝检测数据集】共3684张。 目标检测数据集&#xff0c;标注文件为YOLO适用的txt格式。已划分为训练、验证集。 图片分辨率&#xff1a;224*224 类别&#xff1a;crack Crack道路裂缝检测数据集 数据集描述 该数据集是一个专门用于训练和评估基于YOLO&#xff0…

[笔记]某变频器,功能列表及参数表

产品代号&#xff1a;INVT GOODDRIVE&#xff0c;这家公司我的产品我似乎在特检院看到过&#xff1f;或者在某个地铁建设工地看到过。是深圳的。 1.产品功能点&#xff1a; 变频锥形电机控制、抱闸转矩验证&#xff1f;抱闸反馈零位检测行程限位超载防护轻载升速&#xff08;…

机器学习课程学习周报十三

机器学习课程学习周报十三 文章目录 机器学习课程学习周报十三摘要Abstract一、机器学习部分1. 文生图模型概述2. Stable Diffusion概述3. ControlNet概述4. 概率论复习&#xff08;二&#xff09; 总结 摘要 本周的学习内容涵盖了文生图模型、Stable Diffusion、ControlNet以…

从零开始讲DDR(5)——读懂Datasheet

对于开发人员来说&#xff0c;需要根据实际场景和使用的需要&#xff0c;使用不同厂家&#xff0c;不同型号的DDR&#xff0c;虽然原理上大同小异&#xff0c;但是还是有一些细节上的需要注意的地方&#xff0c;接触一个新的DDR芯片&#xff0c;首先就是需要找到对应的datashee…