R を使ったサンキーダイアグラムの作り方: NetworkD3 パッケージ

UB3/informatics/r/sankey

このページの最終更新日: 2025/01/05

  1. 概要: サンキーダイアグラムとは
  2. R の sankeyNetwork() 関数
  3. sankeyNetwork() で色をつける
  4. sankeyNetwork() で順番を変える
  5. sankeyNetwork() で html ファイルを出力する

広告

概要: サンキーダイアグラムとは

サンキーダイアグラム Sankey diagram とは、各工程間の流量を示す以下のような図のことである (2)。Sankey にちなんでこのように呼ばれるが、それ以前にも類似の表現方法はあったようである。

Sankeyダイアグラム オリジナル

1898 年、アイルランドの Sankey が蒸気機関の熱効率を示すのに使ったオリジナルの Sankey diagram (Public domain)。

このページでは、R の networkD3 パッケージに含まれる sanketNetwork 関数でサンキーダイアグラムを作る方法をまとめる。以下のような図ができる (このページの下の方 にスクリプトがあります)。サンキーダイアグラムは ggplot でも作ることができ、その方法は ggsankey 関数を使ったサンキーダイアグラム作成 のページにまとめた。

R サンキーダイアグラム

R の sankeyNetwork() 関数

R でサンキーダイアグラムの作成に最も使われている関数は、networkD3 というパッケージに含まれる sankeyNetwork だろう。

まずは、このページ を参考にシンプルなスクリプトを。

これを実行すると、ページの上の方で示した図が出力される。png と html で出力され、pdf は方法がわからない。

R サンキーダイアグラム

上記 script の最後の部分を見るとわかるように、メインとなる input は links という変数である。これは以下のような中身をしている。結構単純に、線の出発点となる source、標的の target および線の太さを指定する value があるだけである。source と target の ID は、# With networkD3, connection must be provided using id, not using real name like in the links の部分で自動で追加される。

なお、この IDsource と IDtarget は numeric であり、文字列になっていると結果が出力されない。str(links) などで確認できる。

R サンキーダイアグラム input
  • 上の例では value は整数だが、少数が入っても問題ない。
  • value = 0 でも線は消えず、非常に細い線が引かれる。
  • マイナスの値はゼロ扱いになってしまい、細い線になる。

node という変数はさらにシンプルで、node の名前が書いてあるだけである。

R サンキーダイアグラム input

sankeyNetwork() のオプション

自分が使ったことのあるもののみ。詳細は R Documentation を参照のこと。

Links

上記の インプットデータ の部分で示したような links を指定する。

Nodes

上記の インプットデータ の部分で示したような nodes を指定する。

fontSize

fontSize = 10 のようにフォントサイズを指定。

iterations

それぞれの node の y 軸上の位置を計算する回数。ブラウザで計算されるので、高い数を設定しないこと。iterations = 0 を指定すると、nodes autopositioning をオフにでき、入力順に並ぶようになる (参考)。

colourScale

色をつけるときに指定。使い方は、このページの下にある sankeyNetwork() で色をつける に。

LinkGroup

リンク (線の部分) 色をつけるときに使用。

NodeGroup

ノードに色をつけるときに使用。

nodeWidth

ノードの太さ。nodeWidth = 1 のように数字で指定。0 で node が完全に見えなくなる。

width
height

図全体の幅、高さを指定。

sankeyNetwork() で色をつける

sankeyNetwork() 関数で link および node の色を指定したい場合、付け足すのは原則として以下の情報である。

つまり、links および node に色を指定する列を追加することになる。links は以下のようなデータになる。

R サンキーダイアグラム links 色

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

R サンキーダイアグラム nodes 色

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

最後に、Sankey を作るところで color とグループを指定する。

R サンキーダイアグラム

全体のスクリプトは以下のようになる。

sankeyNetwork() で順番を変える

順番を変えるときは、まず nodes で順番を変え、次に links に ID をつける。さらに iteration を 0 にする。

たとえば、group A と group B をひっくり返したい場合には、まず nodes を変更する。

これで、iterations = 0 を設定すれば OK。全体の script は以下。ID を振る前に nodes の順を変更しないと、ボックスの位置は変わらず、nodes の名前の表示だけが変わるので間違った図になってしまう。注意。

R サンキーダイアグラム

sankeyNetwork() で html ファイルを出力する

savenetwork() 関数を使う。

paste() 関数を用いる。

saveNetwork(network, file, selfcontained = TRUE)

selfcontained を TRUE にすると、結果が全ての情報を含んだ一つの html ファイルとして出力される。FALSE の場合、html ファイルと同じ階層にフォルダができ、そこに含まれるデータを参照する形になる。通常は TRUE を選ぶだろう。


広告

References

  1. Customize colors in Sankey Diagram. Link: Last access 2023/04/22.

コメント欄

サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。