如何根据边缘属性为 R 中 igraph 图中的边缘分配颜色范围?

How can I assign a color range to edges in igraph plot in R based on edge attributes?

我有一个大型社交网络图,我正在尝试使用个人之间的联系强度对其进行颜色编码。在 mock_table 中,个体列在 ab 列中,每个连接的强度在列 c 中给出。

我成功地将这些强度值正确分配给 edge.width 函数,但是,当我尝试将其应用于 edge.color 时,这些值没有正确对齐。图中的颜色确实表示 sn_color,但它们未分配给正确的边缘。最粗的边缘(最强的连接,最大的 c-value)也应该有最暗的颜色,反之亦然。

下面是我当前代码的简化版本:

mock_table <- as.data.frame(cbind(a=c("PO", "BL", "MA", "AL", "BL"), b=c("MA", "BO", "ED", "MA", "MA"), c=as.numeric(c(8,41,10,23,50))))
mock_table$c <- as.numeric(as.character(mock_table$c))

sn_graph <- graph_from_data_frame(d=mock_table, vertices = c("PO", "BL", "MA", "AL", "BO", "ED"), directed = FALSE)
sn_proximity <- (mock_table$"c")

sn_colorrange <- colorRampPalette(c("yellow", "orange", "red", "darkred"))
sn_color <- sn_colorrange(length(sn_proximity))

plot(sn_graph,
     edge.width=(1/3)*(sn_proximity),
     edge.color=sn_color
     )

谁能帮我弄清楚如何正确分配这个调色板?非常感谢!

已编辑以包含可重现的示例代码。

您需要准确地告诉绘图要使用哪种颜色。如果你想为每个坡道使用不同的颜色,那么你可以做类似

的事情
plot(sn_graph,
     edge.width=(1/3)*(sn_proximity),
     edge.color=sn_color[order(sn_proximity)]
)

否则可能更常见的是设置固定数量的bin然后使用cut()颜色更有意义

n_bins <- 5
sn_color <- sn_colorrange(n_bins)
plot(sn_graph,
     edge.width=(1/3)*(sn_proximity),
     edge.color=sn_color[cut(sn_proximity, breaks=n_bins )]
)