R+igraphを用いた(グラフ理論の意味での)グラフの描画
インストール
install.packages("igraph")
使う前
library(igraph)
データ読み込み
adjmat <- read.table("adj.dat")
ここではadj.datは隣接行列データファイルとする
(列区切りは空白、行区切りは改行)
なお、有向グラフの隣接行列とは、一般に?
from i to jのエッジがある時にg_{ij}=1なるG=(g_{ij})である。
g_{ij}はfrom j to iの意味で使ってる場合、転置しないとだめ
転置
tadjmat<-t(adjmat)
隣接行列だと認識させた上でグラフオブジェクトgを生成
g<-graph.adjacency(tadjmat,mode="directed")
描画
plot(g)
ノードを動かせるように描画
tkplot(g)
tkplot(g,layout=layout.fruchterman.reingold,vertex.size=10)
LayoutメニューからFruchterman, Reingoldあたりで。
エッジで接続されたノード同士は距離の二乗に比例する引力。
すべてのノードはノード間距離に反比例する斥力。
Fa=d^2/l
Fr=-l^2/d
温度をだんだん下げて低いエネルギー状態になる配置に落ち着かせる。
次数分布
plot(degree.distribution(g,mode="in"),log="xy")
ノード数
vcount(g)
エッジ数
ecount(g)
平均最短距離
average.path.length(g)
クラスタリング係数
transitivity(g)
平均次数
sum(degree(g))/vcount(g)
グラフのsummary
summary(g)
グラフ密度
graph.density(g)
install.packages("igraph")
使う前
library(igraph)
データ読み込み
adjmat <- read.table("adj.dat")
ここではadj.datは隣接行列データファイルとする
(列区切りは空白、行区切りは改行)
なお、有向グラフの隣接行列とは、一般に?
from i to jのエッジがある時にg_{ij}=1なるG=(g_{ij})である。
g_{ij}はfrom j to iの意味で使ってる場合、転置しないとだめ
転置
tadjmat<-t(adjmat)
隣接行列だと認識させた上でグラフオブジェクトgを生成
g<-graph.adjacency(tadjmat,mode="directed")
描画
plot(g)
ノードを動かせるように描画
tkplot(g)
tkplot(g,layout=layout.fruchterman.reingold,vertex.size=10)
LayoutメニューからFruchterman, Reingoldあたりで。
エッジで接続されたノード同士は距離の二乗に比例する引力。
すべてのノードはノード間距離に反比例する斥力。
Fa=d^2/l
Fr=-l^2/d
温度をだんだん下げて低いエネルギー状態になる配置に落ち着かせる。
次数分布
plot(degree.distribution(g,mode="in"),log="xy")
ノード数
vcount(g)
エッジ数
ecount(g)
平均最短距離
average.path.length(g)
クラスタリング係数
transitivity(g)
平均次数
sum(degree(g))/vcount(g)
グラフのsummary
summary(g)
グラフ密度
graph.density(g)
コメント 0