使用R igraph基于重量绘制边缘

时间:2014-08-12 16:43:37

标签: r plot igraph

我正在尝试在R中绘制带有igraph的网络,其中边缘按重量排序。我已经指定了颜色,但我希望背面有弱边缘,前面有强边缘。有办法做到这一点吗? 感谢

2 个答案:

答案 0 :(得分:2)

这是一个可能的解决方案。这实际上取决于你正在使用什么,所以使用代码示例我可以改进它。

基本上,边缘按它们出现的顺序绘制。所以我们需要根据权重属性对边进行排序。这似乎不可能在同一个图表中完成,因此可能只需要创建一个具有相同属性但边缘已排序的新图形。

g <- graph( c(1,2, 1,3,1,4,1,5,2,3,2,4,2,5,3,4,3,5,4,5), n=5 )
E(g)$weight <- runif(10)

# Generates a the same graph but with edges sorted by weight.
h <- graph.empty() + vertices(V(g))
h <- h + edges(as.vector(t(get.edgelist(g)[order(E(g)$weight),])))
E(h)$weight <- E(g)$weight[order(E(g)$weight)]

E(h)$color <- "red"
E(h)[weight>0.3]$color <- "yellow"
E(h)[weight>0.7]$color <- "green"
plot(h,edge.width=2+3*E(h)$weight)

答案 1 :(得分:0)

更新版本对我有用:

df_edges <- as_data_frame(old_graph, what = "edges")
df_edges <- df_edges[order(df_edges$weight),]
new_graph <- graph_from_data_frame(d = df_edges, vertices = as_data_frame(old_graph, what = "vertices"))