在 R 中使用 igraph 从数据框中添加边权重
Adding edge weights from dataframe with igraph in R
我创建了一个图形对象
ig <- graph(df$ig)
并且希望能够根据网络矩阵绘制带加权边的图
ig[]
ig[]
没有加权,如何直接从网络矩阵添加权重以便我可以使用 E(ig)$weight
访问它?
您可以像这样给图表加权:
示例:
gg3 <- graph.ring(10)
[1,] . 1 . . . . . . . 1
[2,] 1 . 1 . . . . . . .
[3,] . 1 . 1 . . . . . .
[4,] . . 1 . 1 . . . . .
[5,] . . . 1 . 1 . . . .
[6,] . . . . 1 . 1 . . .
[7,] . . . . . 1 . 1 . .
[8,] . . . . . . 1 . 1 .
[9,] . . . . . . . 1 . 1
[10,] 1 . . . . . . . 1 .
E(gg3)$weight <- 15
[1,] . 15 . . . . . . . 15
[2,] 15 . 15 . . . . . . .
[3,] . 15 . 15 . . . . . .
[4,] . . 15 . 15 . . . . .
[5,] . . . 15 . 15 . . . .
[6,] . . . . 15 . 15 . . .
[7,] . . . . . 15 . 15 . .
[8,] . . . . . . 15 . 15 .
[9,] . . . . . . . 15 . 15
[10,] 15 . . . . . . . 15 .
或
E(gg3)$weight <- c(20,10)
[1,] . 20 . . . . . . . 10
[2,] 20 . 10 . . . . . . .
[3,] . 10 . 20 . . . . . .
[4,] . . 20 . 10 . . . . .
[5,] . . . 10 . 20 . . . .
[6,] . . . . 20 . 10 . . .
[7,] . . . . . 10 . 20 . .
[8,] . . . . . . 20 . 10 .
[9,] . . . . . . . 10 . 20
[10,] 10 . . . . . . . 20 .
看看这个:
Using edge-lists with associated edge values to create a weighted network。
以下回答可能对 ([igraph] capturing edge weights in g <- graph.data.frame?) 有帮助:
如果数据框中没有明确给出权重,但你只是想
要使用电子邮件交换次数作为权重,您可以这样做:
> df <- data.frame(from=c("a", "b", "a"), to=c("b", "a", "b"))
> g <- graph.data.frame(df)
> E(g)$weight <- 1
> g <- simplify(g, edge.attr.comb="sum")
然后我添加了以下行以便能够在图表中绘制宽度。
E(themes_graph)$width <-E(themes_graph)$weight/15
我创建了一个图形对象
ig <- graph(df$ig)
并且希望能够根据网络矩阵绘制带加权边的图
ig[]
ig[]
没有加权,如何直接从网络矩阵添加权重以便我可以使用 E(ig)$weight
访问它?
您可以像这样给图表加权:
示例:
gg3 <- graph.ring(10)
[1,] . 1 . . . . . . . 1
[2,] 1 . 1 . . . . . . .
[3,] . 1 . 1 . . . . . .
[4,] . . 1 . 1 . . . . .
[5,] . . . 1 . 1 . . . .
[6,] . . . . 1 . 1 . . .
[7,] . . . . . 1 . 1 . .
[8,] . . . . . . 1 . 1 .
[9,] . . . . . . . 1 . 1
[10,] 1 . . . . . . . 1 .
E(gg3)$weight <- 15
[1,] . 15 . . . . . . . 15
[2,] 15 . 15 . . . . . . .
[3,] . 15 . 15 . . . . . .
[4,] . . 15 . 15 . . . . .
[5,] . . . 15 . 15 . . . .
[6,] . . . . 15 . 15 . . .
[7,] . . . . . 15 . 15 . .
[8,] . . . . . . 15 . 15 .
[9,] . . . . . . . 15 . 15
[10,] 15 . . . . . . . 15 .
或
E(gg3)$weight <- c(20,10)
[1,] . 20 . . . . . . . 10
[2,] 20 . 10 . . . . . . .
[3,] . 10 . 20 . . . . . .
[4,] . . 20 . 10 . . . . .
[5,] . . . 10 . 20 . . . .
[6,] . . . . 20 . 10 . . .
[7,] . . . . . 10 . 20 . .
[8,] . . . . . . 20 . 10 .
[9,] . . . . . . . 10 . 20
[10,] 10 . . . . . . . 20 .
看看这个: Using edge-lists with associated edge values to create a weighted network。
以下回答可能对 ([igraph] capturing edge weights in g <- graph.data.frame?) 有帮助:
如果数据框中没有明确给出权重,但你只是想 要使用电子邮件交换次数作为权重,您可以这样做:
> df <- data.frame(from=c("a", "b", "a"), to=c("b", "a", "b"))
> g <- graph.data.frame(df)
> E(g)$weight <- 1
> g <- simplify(g, edge.attr.comb="sum")
然后我添加了以下行以便能够在图表中绘制宽度。
E(themes_graph)$width <-E(themes_graph)$weight/15