gpt4 book ai didi

带有visEdges的R visNetwork + igraph加权网络可视化

转载 作者:行者123 更新时间:2023-12-04 11:14:14 31 4
gpt4 key购买 nike

关于将igraph与visNetwork结合,我有一个非常简单的问题。我想用visEdges(value = E(graph)$ weight)加权边缘,但这不起作用。
这是一个说明问题的玩具示例:

     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使用不同的边缘宽度。

你能告诉我我该怎么做吗?

最佳答案

使用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

请让我知道这是否是您想要的。

关于带有visEdges的R visNetwork + igraph加权网络可视化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46664645/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com