はじめに
円形コードダイアグラムをpython環境で作成したときの手順を備忘録として書きます。
このグラフはchord chart, Cycle chord diagram, Arc chartなど複数の呼び方があるようです。
必要なライブラリのインストール
pip、condaのパターンを書いておきます。どちらかお好きな方でインストールしてください。
pip install pyviz holoviews bokeh
conda install -c pyviz holoviews bokeh
プロットするデータのフォーマット
本記事では2種類のデータファイルを用意して作成します。
1) ノード名のマスタファイル(nodes.csv)
流量の起点・終点となるノードのマスタとなります。
2) 流量データ(data.csv)
起点(from)、終点(to)、流量(num)で定義したデータファイルです。
グラフの作成につかうholeviewsの関数は文字列を使えないため起点・終点となるノード名を1)のインデックス番号で置換しておく必要があります。
コード
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
最後に
円形コードダイアグラムはノードが10個程度までくらいが煩雑にならずインサイトを得られそうなグラフになると思います。
記事を書く励みになるので参考になりましたらLGTMくださいな。