2017-10-10 20 views
1

igraphとvisNetworkの組み合わせに関する非常に簡単な質問があります。 visEdges(value = E(graph)$ weight)でエッジに重み付けしたいが、それはうまくいかない。私は今、重み付きグラフとしてそれを視覚化しようとすると、それはそれをプロットしませんR visNetwork + igraph visEdgesによるネットワーク視覚化

 test 
    [,1] [,2] [,3] [,4] [,5] 
[1,] 0 1 3 7 1 
[2,] 4 0 8 9 5 
[3,] 10 3 0 8 3 
[4,] 5 1 5 0 7 
[5,] 8 2 7 4 0 

library(igraph); library(visNetwork) 

test.gr <- graph_from_adjacency_matrix(test, mode="undirected", weighted=T) 

test.gr %>% 
    visIgraph(layout = "layout_in_circle") %>% 
    visEdges(value = E(test.gr)$weight) 

を私は

を使用する場合はここで は、問題を説明するためのおもちゃの一例です
test.gr %>% 
    visIgraph(layout = "layout_in_circle") %>% 
    visEdges(value = 10) 

代わりに、私はプロットを得る:

enter image description here

しかし、これはもちろん私が望むものではありません。私はE(test.gr)$ weigthに従って異なる辺の幅を求めます。

どうすればいいのですか?

答えて

2

visNodesvisEdgesグローバルオプションをすべてのノードとエッジに対して設定できます。例えばvisNodes(shape = "square")、すべてのノードを正方形にします。これは、個々のエッジ幅を設定する正しいルートではないことを理解しています。

igraphオブジェクトをvisNetwork -listに変換することができます。次に、「値」という名前の「期待される」列を追加することができます。 visNetworkは、その列を使用してエッジにウェイトを与えます。

おそらく、これは最善の解決策ではありませんが、機能します。

test <- as.matrix(read.table(header = FALSE, text = " 
    0 1 3 7 1 
    4 0 8 9 5 
    10 3 0 8 3 
    5 1 5 0 7 
    8 2 7 4 0")) 

library(igraph) 
library(visNetwork) 

## make igraph object 
test.gr <- graph_from_adjacency_matrix(test, mode="undirected", weighted=T) 

## convert to VisNetwork-list 
test.visn <- toVisNetworkData(test.gr) 
## copy column "weight" to new column "value" in list "edges" 
test.visn$edges$value <- test.visn$edges$weight 

test.visn$edges 
# from to weight value 
# V1 V2  4  4 
# V1 V3  10 10 
# V1 V4  7  7 
# V1 V5  8  8 
# V2 V3  8  8 
# V2 V4  9  9 
# V2 V5  5  5 
# V3 V4  8  8 
# V3 V5  7  7 
# V4 V5  7  7 

visNetwork(test.visn$nodes, test.visn$edges) %>% 
    visIgraphLayout(layout = "layout_in_circle") 

これは、次のグラフが得られます。

enter image description here

が、私はこれがあなたが望むものであるかどうかをお知らせください。

関連する問題