我正在尝试在 igraph 中制作一个网络图,通过将某些重要的边缘着色为与其他边缘不同的颜色来突出显示它们。对于大图,它们经常被埋在其他图下面。例如:
library(igraph)
test <- barabasi.game(200,m=2)
E(test)$color <- "gray"
E(test)[1]$color <- "red"
sort(order(E(test)$color)[E(test)],decreasing=TRUE)
plot(test,
vertex.label=NA,
vertex.shape="none",
vertex.size=0,
edge.arrow.mode=0,
edge.width=2)
给了我一个图,其中单个红色边缘位于底部。
如果我选择对编号较高的边(而不是#1)进行着色,则它更有可能不被掩埋。
所以在我看来,一种选择是以某种方式重新排序边缘。我试过了
E(test) <- E(test)[order(E(test)$color)]
但这给我带来了“无效索引”错误。关于我还应该尝试什么的任何想法?
最佳答案
igraph 按照边在图形边列表中出现的顺序绘制边,所以你是对的,ID 较高的边将绘制在 ID 较低的边之上。不幸的是,igraph 没有提供一种简单的方法来重新排序图的边缘(尽管它有一个名为 permute.vertices
的函数,它允许您排列顶点),所以我能想到的唯一方法现在的问题是您需要构建另一个图,其中边处于“正确的顺序”。 make_graph
确保边完全按照您指定的顺序存储在图中,我认为 graph_from_data_frame
也是如此。
另一个选项(如果您不想重建整个图表)是将图表绘制两次:首先绘制“不太重要”的边并将重要边的宽度设置为零,然后您在顶部绘制重要的边缘。
如果您希望在即将推出的 igraph 版本中支持边排列,请file a feature request在 Github 上。
关于r - 如何重新排列 igraph 图中边的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33444188/