igraphパッケージを使ってみる

Rでグラフを扱うためのパッケージは結構あるようで、CRAN Task ViewのgRaphical Models in Rにまとめられています。
最近igraphで遊んでみましたので、メモを残しておきます。

1. インストールとライブラリのロード
特に変わったところもなく、

install.packages("igraph")
library(igraph)

でOK。

2. ちょっとした作図
山手線と総武線の路線を、タブ区切りで二項関係として記したファイルを読み込んでみます。
これをa.txtとします。

東京	有楽町
有楽町	新橋
新橋	浜松町
浜松町	田町
田町	品川
品川	大崎
大崎	五反田
五反田	目黒
目黒	恵比寿
恵比寿	渋谷
渋谷	原宿
原宿	代々木
代々木	新宿
新宿	新大久保
新大久保	高田馬場
高田馬場	目白
目白	池袋
池袋	大塚
大塚	巣鴨
巣鴨	駒込
駒込	田端
田端	西日暮里
西日暮里	日暮里
日暮里	鶯谷
鶯谷	上野
上野	御徒町
御徒町	秋葉原
秋葉原	神田
神田	東京
神田	御茶ノ水
秋葉原	御茶ノ水
御茶ノ水	水道橋
水道橋	飯田橋
飯田橋	市谷
市谷	四谷
四谷	信濃町
信濃町	千駄ヶ谷
千駄ヶ谷	代々木

上記ファイルを保存したディレクトリに移動して、

# ファイル読み込み
a <- as.matrix(read.delim("a.txt", h=FALSE, as.is=T))
g <- graph.edgelist(a, directed=FALSE)

# あるいは上記2行の代わりに
g <- graph.data.frame(read.delim("a.txt", h=FALSE, as.is=T), directed=FALSE)

# あるいはクリップボード経由で
g <- graph.data.frame(read.delim("clipboard", h=FALSE, as.is=T), directed=FALSE)

# グラフ描画
plot(g, layout=layout.kamada.kawai, vertex.label=V(g)$name)

これで、以下のような無向グラフが描画されます。



位置関係は変ですが、トポロジーとしては合っているので、まあ良しとしましょう。
なお、インタラクティブな微調整はtkigraph()で起動するTcl/Tkベースのアプリケーションでできます。

tkplot(g, layout=layout.kamada.kawai, vertex.label=V(g)$name)



本気でレイアウトに凝るのであれば、別途CytoscapePajek等が必要になるかもしれませんが、一通りの描画はできます。