如何根据边缘属性为 R 中 igraph 图中的边缘分配颜色范围?
How can I assign a color range to edges in igraph plot in R based on edge attributes?
我有一个大型社交网络图,我正在尝试使用个人之间的联系强度对其进行颜色编码。在 mock_table
中,个体列在 a
和 b
列中,每个连接的强度在列 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 )]
)
我有一个大型社交网络图,我正在尝试使用个人之间的联系强度对其进行颜色编码。在 mock_table
中,个体列在 a
和 b
列中,每个连接的强度在列 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 )]
)