メモ

  • グラフは多次元データ
  • それを2次元に描くためにノードの位置を定める必要がある
  • 定め方が「グラフレイアウト」
  • Rのigraphパッケージでは、いくつかのレイアウト関数があって、2次元座標を返してくれるのだが…
  • その座標を「適切に」画面に配置するためのルールがよくわからなくて困った(ている)…


library(igraph)
# ノード数を指定して作成したエッジなしのグラフにエッジを加えている

ed.list <- matrix( c(1,2,1,3,2,4,1,5,3,4), nc=2, byrow=TRUE)
g <- graph.edgelist(ed.list)


plot(g)


# グラフを絵にするには、ノードの座標を決める必要がある
# layoutはその座標を決めるルールのこと
# 座標決めルールの一つkamada.kawai法を用いることとする
coords <- layout.kamada.kawai(g)

# グラフとして描く
plot(g,layout = coords)

# ノードの名前を文字列にするために別の方法をとる
# ノードに色を付けよう
v.col <- rep(1,length(coords[,1]))
v.col[c(2)] <- 3
plot(coords,cex = 4, pch = 19, col = v.col)

# エッジを描く
# エッジにも色を付けよう
e.col <- rep(1,length(ed.list[,1]))
e.col[c(2)] <- 2
segments(coords[ed.list[,1],1],coords[ed.list[,1],2],coords[ed.list[,2],1],coords[ed.list[,2],2], col = e.col)

# 文字列を重ねる
par(new =TRUE)
# ノードから少しずらした位置に文字列を描かせる
coords2 <- cbind(coords[,1],coords[,2]-0.1)
text(coords2,c("foo","bar","foobar","hoge","hage"),xlim = range(coords[,1]),ylim=range(coords[,2]))