ggsankey 関数を使ったサンキーダイアグラム作成
UB3/informatics/r/sankey_ggsankey
このページの最終更新日: 2025/08/06広告
概要: サンキーダイアグラムとは
サンキーダイアグラム Sankey diagram とは、各工程間の流量を示す以下のような図のことである。sanketNetwork 関数 のページにもう少し基本情報がある。
このページでは、R の ggplot に含まれる ggsankey 関数を用いてサンキーダイアグラムを作る方法をまとめる。

R の ggsankey() 関数
インストールは remotes() 関数を使って Github から。
これを実行すると、以下の図が出力される。

インプットデータ links
重要なのは input データの形式である。上の例では、最初に作っているデータは以下。

つまり、左の node と、そこと線で繋がる右の node が一行に書かれているだけである。これを make_long() で変換した sankey_data はこうなっている。
奇数行目はわかりやすい。例えば一行目なら、user_id という列 (x で表される) の 1 という node から、stage という列 (その次の x) の Start という node に線が引かれるということ。
偶数行目はちょっとわかりにくいが、「線が出ない」ことを指定しているようだ。二行目なら、stage 列の Start という node には、そこから線をひく「その次の X」が存在しないため、NA になっている。

このような 3 列の Sankey を作りたい場合も、input データの形式は基本的に同じである。

データは、やはり一行が一本の線に相当する。1 から Start へ、さらにそこから A へと線が引かれる。1 から End へは線が引かれない。

これを make_long() すると、以下のように変換される。ggplot 系の関数は基本的にこのような整然データを input とするので、慣れるとこの形はわかりやすい。

sankeyNetwork() で色をつける
sankeyNetwork() 関数で link および node の色を指定したい場合、付け足すのは原則として以下の情報である。
つまり、links および node に色を指定する列を追加することになる。links は以下のようなデータになる。

同様に node にも group という列が追加され、そこに blue というグループ名が入る。

my_color の部分は、pink や blue というグループ名と、実際の色をマッチさせている。links や nodes の group 列は単に名前なので、色でなく A とか B でもよい。その場合の script は以下。
最後に、Sankey を作るところで color とグループを指定する。

全体のスクリプトは以下のようになる。
sankeyNetwork() で順番を変える
順番を変えるときは、まず nodes で順番を変え、次に links に ID をつける。さらに iteration を 0 にする。
たとえば、group A と group B をひっくり返したい場合には、まず nodes を変更する。
これで、iterations = 0 を設定すれば OK。全体の script は以下。ID を振る前に nodes の順を変更しないと、ボックスの位置は変わらず、nodes の名前の表示だけが変わるので間違った図になってしまう。注意。

sankeyNetwork() で html ファイルを出力する
savenetwork() 関数を使う。
paste() 関数を用いる。
広告
References
- Sankey diagrams in ggplot2 with ggsankey. Link: Last access 2024/01/04.
コメント欄
サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。