Rのigraphパッケージを使ってネットワークグラフの可視化をするとき、エッジの重みを表現する方法で結構悩んだので解決案のひとつとして共有します。
例えば、重みをエッジの太さで表現すると
・エッジが重なる
・矢印が埋もれて向きがわかりにくい(edge.arrow.sizeにE(g)$weightを指定しても大きさが同じになってしまい、太いエッジでは隠れてしまう)
ということがあるので
こんな感じでエッジの濃淡で重みを表現したいと思います。
ggraphを使ってやる方法は以下のページで解説されています。
Draw Network in R (control edge thickness plus non-overlapping edges)
方法
plot() のオプション edge.color で rgb() を指定し、引数に重みを渡すだけです。
ただし、 rgb()の引数にするため、重みを0~1の範囲に変換します。
変換方法は可視化の目的に応じたものを選べばOKだと思います
(正規化すると重み最小のエッジが消えてしまうので注意)。
今回は単純に、最大値で割るだけにします。
1から引くことで重みが大きいほど暗く(濃く)なるようにします
# g はグラフオブジェクト
w <- E(g)$weight
c = 1 - (w / max(w))
plot()の引数で
edge.color = rgb(c,c,c)
と指定すれば最大値に近いエッジほど濃く描画されます。
#####例
冒頭に載せたグラフのコードです
plot(g ,edge.width = 1, edge.curved = 0.2,
layout=layout, edge.label = w, edge.color = rgb(c,c,c),
vertex.size = 50, vertex.color = 0)