LoginSignup
1
0

More than 1 year has passed since last update.

円形コードダイアグラムをpythonで作成する

Posted at

はじめに

円形コードダイアグラムをpython環境で作成したときの手順を備忘録として書きます。
このグラフはchord chart, Cycle chord diagram, Arc chartなど複数の呼び方があるようです。
ccd.png

必要なライブラリのインストール

pip、condaのパターンを書いておきます。どちらかお好きな方でインストールしてください。

pip install pyviz holoviews bokeh
conda install -c pyviz holoviews bokeh

プロットするデータのフォーマット

本記事では2種類のデータファイルを用意して作成します。
1) ノード名のマスタファイル(nodes.csv)
流量の起点・終点となるノードのマスタとなります。
01.nodes_index.png

2) 流量データ(data.csv)
起点(from)、終点(to)、流量(num)で定義したデータファイルです。
グラフの作成につかうholeviewsの関数は文字列を使えないため起点・終点となるノード名を1)のインデックス番号で置換しておく必要があります。
02.flow.png

コード

png形式で円形コードダイアグラムを書き出すコードです。

import holoviews as hv
from holoviews import dim

hv.extension('matplotlib')
hv.output(fig='svg', size=300)

import matplotlib
import japanize_matplotlib

import pandas as pd


def main():
    # データを読み込み
    df = pd.read_csv('data.csv')
    df_nodes = pd.read_csv('nodes.csv')

    # 円形コードダイアグラムを作成
    nodes = hv.Dataset(df_nodes['name'], 'index')
    chord = hv.Chord((df, nodes))

    # 円形コードダイアグラムの色などを設定
    chord.opts(cmap='Category10', edge_color=dim('from').astype(str), labels='name', node_color=dim('index').astype(str))

    # PNGで書き出し
    hv.save(chord, 'ccd.png', fmt='png')

if __name__ == "__main__":
    main() 

PCのローカル環境でグラフ画像を出力するだけのコードです。
検索すれば沢山ヒットしますがjupyter notebook、Bokehで作ればインタラクティブなhtmlでグラフを作れます。

カラーパレット

グッとくるものを選べばよいかと思います。
冒頭のグラフはCategory10を指定してます。
https://docs.bokeh.org/en/2.4.0/docs/reference/palettes.html

カラーパレットを変えたサンプルをいくつか載せます。
Paired
ccd_Paired.png

Set3
ccd_Set3.png

Spectral
ccd_Spectral.png

最後に

円形コードダイアグラムはノードが10個程度までくらいが煩雑にならずインサイトを得られそうなグラフになると思います。
記事を書く励みになるので参考になりましたらLGTMくださいな。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0