流程图(一)利用python绘制弦图

devtools/2024/12/22 0:23:19/

python_0">流程图(一)利用python绘制弦图

弦图(Chord diagram)简介

1

数据围绕一个圆呈放射状排列,显示不同实体之间的相互关系,这既是弦图。弦图通过每个圆弧的大小比例表示连接分配数值,可以用颜色将数据分成不同类别以助于比较和区分。缺点则是当连接过多时会显得混乱。

快速绘制

  1. 基于bokeh

    首先需要安装holoviews:pip install holoviews

    然后安装最新的bokeh即可:pip install --upgrade bokeh

    python">import pandas as pd
    import holoviews as hv
    from holoviews import opts, dim
    from bokeh.sampledata.les_mis import datahv.extension('bokeh')
    hv.output(size=300)# 导入数据
    nodes = hv.Dataset(pd.DataFrame(data['nodes']), 'index')
    links = pd.DataFrame(data['links'])# 绘制弦图
    chord = hv.Chord((links, nodes)).select(value=(5, None))
    chord.opts(opts.Chord(cmap='Category20', edge_cmap='Category20', edge_color=dim('source').str(), labels='name', node_color=dim('index').str()))
    

    2

  2. 基于pyecharts

    python">import requests
    import json
    from pyecharts import options as opts
    from pyecharts.charts import Graph# 获取官方的数据
    url = "https://raw.githubusercontent.com/pyecharts/pyecharts-gallery/master/Graph/les-miserables.json"response = requests.get(url)
    j = json.loads(response.text)
    nodes = j["nodes"]
    links = j["links"]
    categories = j["categories"]c = (Graph(init_opts=opts.InitOpts(width="1000px", height="600px")).add("",nodes=nodes,links=links,categories=categories,layout="circular",is_rotate_label=True,linestyle_opts=opts.LineStyleOpts(color="source", curve=0.3),label_opts=opts.LabelOpts(position="right"),).set_global_opts(title_opts=opts.TitleOpts(title="悲惨世界角色关系"),legend_opts=opts.LegendOpts(orient="vertical", pos_left="2%", pos_top="20%"),)
    )c.render_notebook()
    

    3

  3. 基于mne

    pip install -U mne
    pip install -U mne-connectivity
    pip install nibabel

    python">from mne_connectivity.viz import plot_connectivity_circle 
    import numpy as np# 自定义数据:随机连接的20个node
    N = 20
    node_names = [f"N{i}" for i in range(N)]# 随机连接
    ran = np.random.rand(N,N)
    con = np.where(ran > 0.9, ran, np.nan)  # 低于0.9的连接置为NaN# 绘制弦图
    fig, axes = plot_connectivity_circle(con, node_names) 
    

    4

    定制多样化的弦图

    自定义日历弦图一般是结合使用场景对相关参数进行修改,并辅以其他的绘图知识。参数信息可以通过官网进行查看,其他的绘图知识则更多来源于实战经验,大家不妨将接下来的绘图作为一种学习经验,以便于日后总结。

    1. 修改node_angles实现弦图分割

      python">from mne_connectivity.viz import plot_connectivity_circle 
      import numpy as np# 自定义数据:随机连接的20个node
      N = 20
      node_names = [f"N{i}" for i in range(N)]# 随机连接
      ran = np.random.rand(N,N)
      con = np.where(ran > 0.9, ran, np.nan)  # 低于0.9的连接置为NaN# 自定义弧度
      start, end = 45, 135
      first_half = (np.linspace(start, end, len(node_names)//2) +90).astype(int)[::+1] %360
      second_half = (np.linspace(start, end, len(node_names)//2) -90).astype(int)[::-1] %360
      node_angles = np.array(list(first_half) + list(second_half))# 自定义参数node_angles
      fig, axes = plot_connectivity_circle(con, node_names, node_angles=node_angles)
      

      5

    2. 自定义节点

      python">from mne_connectivity.viz import plot_connectivity_circle 
      import numpy as np# 自定义数据:随机连接的20个node
      N = 20
      node_names = [f"N{i}" for i in range(N)]# 随机连接
      ran = np.random.rand(N,N)
      con = np.where(ran > 0.9, ran, np.nan)  # 低于0.9的连接置为NaN# 自定义节点
      node_edgecolor = N//2 * [(0,0,0,0.)] + N//2 * ['green']
      node_colors = N//2 * ['crimson'] + N//2 * [(0,0,0,0.)]fig, axes = plot_connectivity_circle(con, node_names, 
      #     node_width=50, # 节点宽度
      #      vmin=0.97, vmax=0.99, # 显示连接的范围
      #      node_colors=node_colors, # 自定义节点颜色                            
      #      node_edgecolor=node_edgecolor, # 自定义节点颜边缘node_linewidth=2, # 自定义节点线宽colormap='Blues', facecolor='white',textcolor='black',colorbar=False, linewidth=10 # 连接线宽度                              
      )
      

      6

    总结

    以上通过bokeh、pyecharts和mne快速绘制弦图。并通过修改参数或者辅以其他绘图知识自定义各种各样的弦图来适应相关使用场景。

    共勉~


http://www.ppmy.cn/devtools/144219.html

相关文章

八大设计模式

设计模式在日常软件开发中的重要性 目录 单例模式工厂模式策略模式代理模式观察者模式装饰器模式模板方法模式建造者模式总结 单例模式 单例模式确保一个类只有一个实例,通常用于管理共享资源,如配置、缓存、线程池等。 代码实现:双重检查…

MySQL使用LOAD DATA INFILE方式导入文本文件

【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客 《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…

< ,<<, <<<, >,>>,>>>的使用场景和区别

几个尖括号傻傻分不清,到底都是些啥?怎么用? 在 Linux Shell 中,<, <<, <<<, >, >>, 和 >>> 是重定向符号,用于控制输入和输出的数据流。下面详细解释它们的使用场景和区别: 1. 输入重定向:< 语法: command < input_file…

oracle常用语句

目录 一.连接数据库SQL*Plus 连接本地连接远程连接使用操作系统认证 二.管理数据库启动数据库关闭数据库 三.数据字典和视图视图&#xff1a;1.数据库基础信息视图V$DATABASEV$INSTANCEV$VERSION 2.用户和权限管理视图DBA_USERSDBA_ROLE_PRIVSDBA_SYS_PRIVSDBA_TAB_PRIVS 3.表空…

三维天地ELN助力职业卫生领域实验室无纸化、自动化

平台简介 随着国家对环保行业的日益重视,与环保行业息息相关的检测行业方法体系也越来越完善和规范。北京三维天地科技股份有限公司(以下简称“三维天地”)长期以来专注于实验室数智化建设,在环保行业拥有众多成功案例,通过自主研发的实验室信息管理系统(SW-LIMS),为客户提供完…

#Java篇:非常火热的Spring Boot典型项目结构

非常火热的Spring Boot典型项目结构 项目根目录/src/main/java&#xff1a;放置项目Java源代码 项目根目录/src/main/resources&#xff1a;放置项目静态资源和配置文件 结构目录介绍 ├── src/main/java│ ├── config/ (配置类)│ ├── controller/ (控…

云计算HCIP-OpenStack02

书接上回&#xff1a; 云计算HCIP-OpenStack01-CSDN博客 7.OpenStack核心服务 7.1Horizon&#xff1a;界面管理服务 Horizon提供了OpenStack中基于web界面的管理控制页面&#xff0c;用户或者是管理员都需要通过该服务进行OpenStack的访问和控制 界面管理服务需要依赖于keyston…

GUI07-学工具栏,懂MVC

MVC模式&#xff0c;是天底下编写GUI程序最为经典、实效的一种软件架构模式。当一个人学完菜单栏、开始学习工具栏时&#xff0c;就是他的一生中&#xff0c;最适合开始认识 MVC 模式的好时机之一。这节将安排您学习&#xff1a; Model-View-Controller 模式如何创建工具栏以及…