微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

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

mock_table <- as.data.frame(cbind(a=c("PO","BL","MA","AL","BL"),b=c("MA","BO","ED","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","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.color=sn_color[cut(sn_proximity,breaks=n_bins )]
)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。