1. ホーム
  2. r

[解決済み] 重み付き隣接行列を作成するイグニッション

2022-02-14 17:52:38

質問

を使おうとしているのですが igraph パッケージで、(疎な)重み付きグラフを描画します。現在、隣接行列は持っていますが、グラフを描くための graph.adjacency 関数はエッジの重みを認識します。

次のランダムな対称行列を考える。

m <- read.table(row.names=1, header=TRUE, text=
"           A          B          C          D           E         F
A 0.00000000  0.0000000  0.0000000  0.0000000  0.05119703 1.3431599
B 0.00000000  0.0000000 -0.6088082  0.4016954  0.00000000 0.6132168
C 0.00000000 -0.6088082  0.0000000  0.0000000 -0.63295415 0.0000000
D 0.00000000  0.4016954  0.0000000  0.0000000 -0.29831267 0.0000000
E 0.05119703  0.0000000 -0.6329541 -0.2983127  0.00000000 0.1562458
F 1.34315990  0.6132168  0.0000000  0.0000000  0.15624584 0.0000000")
m <- as.matrix(m)

プロットするには、まず、この隣接行列を適切な igraph 形式を使用します。これは比較的簡単で graph.adjacency . のドキュメントを読んだところでは graph.adjacency というのは、以下のようにすればよいからです。

library(igraph)
ig <- graph.adjacency(m, mode="undirected", weighted=TRUE)

しかし、エッジの重みは認識されません。

str(ig)
# IGRAPH UNW- 6 8 -- 
# + attr: name (v/c), weight (e/n)
# + edges (vertex names):
# [1] A--E A--F B--C B--D B--F C--E D--E E--F
plot(ig)

<イグ

どうすればigraphでエッジの重みを認識できるようになりますか?

どのように解決するのですか?

ウェイトがある。 weight (e/n) は、weightというエッジ属性があり、それが数値であることを意味します。参照 ?print.igraph . しかし、これらはデフォルトではプロットされないので、edge.labelとして追加する必要があります。

plot(ig, edge.label=round(E(ig)$weight, 3))

<イグ

プロットする場合は、必ず ?igraph.plotting .