我有一个大型社交网络图,我试图使用个人之间联系的强度对它进行颜色编码。在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", "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
)
谁能帮我弄清楚如何正确分配这个调色板?非常感谢!
经过编辑以包含可重现的示例代码。
答案 0 :(得分:0)
您需要准确地告诉绘图要使用哪种颜色。如果您想为渐变中的每个颜色使用不同的颜色,那么您可以执行以下操作
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 )]
)