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

打印 上一主题 下一主题

主题 1001|帖子 1001|积分 3013

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

弦图(Chord diagram)简介


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


  • 基于bokeh
           首先须要安装holoviews:pip install holoviews
        然后安装最新的bokeh即可:pip install --upgrade bokeh
       
    1. import pandas as pd
    2. import holoviews as hv
    3. from holoviews import opts, dim
    4. from bokeh.sampledata.les_mis import data
    5. hv.extension('bokeh')
    6. hv.output(size=300)
    7. # 导入数据
    8. nodes = hv.Dataset(pd.DataFrame(data['nodes']), 'index')
    9. links = pd.DataFrame(data['links'])
    10. # 绘制弦图
    11. chord = hv.Chord((links, nodes)).select(value=(5, None))
    12. chord.opts(
    13.     opts.Chord(cmap='Category20', edge_cmap='Category20', edge_color=dim('source').str(),
    14.                labels='name', node_color=dim('index').str()))
    复制代码

  • 基于pyecharts
    1. import requests
    2. import json
    3. from pyecharts import options as opts
    4. from pyecharts.charts import Graph
    5. # 获取官方的数据
    6. url = "https://raw.githubusercontent.com/pyecharts/pyecharts-gallery/master/Graph/les-miserables.json"
    7. response = requests.get(url)
    8. j = json.loads(response.text)
    9. nodes = j["nodes"]
    10. links = j["links"]
    11. categories = j["categories"]
    12. c = (
    13.     Graph(init_opts=opts.InitOpts(width="1000px", height="600px"))
    14.     .add(
    15.         "",
    16.         nodes=nodes,
    17.         links=links,
    18.         categories=categories,
    19.         layout="circular",
    20.         is_rotate_label=True,
    21.         linestyle_opts=opts.LineStyleOpts(color="source", curve=0.3),
    22.         label_opts=opts.LabelOpts(position="right"),
    23.     )
    24.     .set_global_opts(
    25.         title_opts=opts.TitleOpts(title="悲惨世界角色关系"),
    26.         legend_opts=opts.LegendOpts(orient="vertical", pos_left="2%", pos_top="20%"),
    27.     )
    28. )
    29. c.render_notebook()
    复制代码

  • 基于mne
           pip install -U mne
    pip install -U mne-connectivity
    pip install nibabel
       
    1. from mne_connectivity.viz import plot_connectivity_circle
    2. import numpy as np
    3. # 自定义数据:随机连接的20个node
    4. N = 20
    5. node_names = [f"N{i}" for i in range(N)]
    6. # 随机连接
    7. ran = np.random.rand(N,N)
    8. con = np.where(ran > 0.9, ran, np.nan)  # 低于0.9的连接置为NaN
    9. # 绘制弦图
    10. fig, axes = plot_connectivity_circle(con, node_names)
    复制代码

    定制多样化的弦图

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

    • 修改node_angles实现弦图分割
      1. from mne_connectivity.viz import plot_connectivity_circle
      2. import numpy as np
      3. # 自定义数据:随机连接的20个node
      4. N = 20
      5. node_names = [f"N{i}" for i in range(N)]
      6. # 随机连接
      7. ran = np.random.rand(N,N)
      8. con = np.where(ran > 0.9, ran, np.nan)  # 低于0.9的连接置为NaN
      9. # 自定义弧度
      10. start, end = 45, 135
      11. first_half = (np.linspace(start, end, len(node_names)//2) +90).astype(int)[::+1] %360
      12. second_half = (np.linspace(start, end, len(node_names)//2) -90).astype(int)[::-1] %360
      13. node_angles = np.array(list(first_half) + list(second_half))
      14. # 自定义参数node_angles
      15. fig, axes = plot_connectivity_circle(con, node_names,
      16.     node_angles=node_angles)
      复制代码

    • 自界说节点
      1. from mne_connectivity.viz import plot_connectivity_circle
      2. import numpy as np
      3. # 自定义数据:随机连接的20个node
      4. N = 20
      5. node_names = [f"N{i}" for i in range(N)]
      6. # 随机连接
      7. ran = np.random.rand(N,N)
      8. con = np.where(ran > 0.9, ran, np.nan)  # 低于0.9的连接置为NaN
      9. # 自定义节点
      10. node_edgecolor = N//2 * [(0,0,0,0.)] + N//2 * ['green']
      11. node_colors = N//2 * ['crimson'] + N//2 * [(0,0,0,0.)]
      12. fig, axes = plot_connectivity_circle(con, node_names,
      13. #     node_width=50, # 节点宽度
      14. #      vmin=0.97, vmax=0.99, # 显示连接的范围
      15. #      node_colors=node_colors, # 自定义节点颜色                           
      16. #      node_edgecolor=node_edgecolor, # 自定义节点颜边缘
      17.      node_linewidth=2, # 自定义节点线宽
      18.      colormap='Blues',
      19.      facecolor='white',
      20.      textcolor='black',
      21.      colorbar=False,
      22.      linewidth=10 # 连接线宽度                              
      23. )
      复制代码

    总结

    以上通过bokeh、pyecharts和mne快速绘制弦图。并通过修改参数或者辅以其他绘图知识自界说各种各样的弦图来顺应相关利用场景。
    共勉~


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

泉缘泉

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表