我正在尝试在 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)
gives me a plot where the single red edge is at the bottom.
If I choose to color a higher-numbered edge (rather than #1) it has a better chance of not being buried.
所以在我看来,一种选择是以某种方式重新排列边缘。我试过
E(test) <- E(test)[order(E(test)$color)]
但这给我带来了“无效索引”错误。关于我还应该尝试什么的任何想法?
igraph 按照边在图形边列表中出现的顺序绘制边,所以你是对的,ID 较高的边将绘制在 ID 较低的边之上。不幸的是 igraph 没有提供一种简单的方法来重新排序图的边缘(尽管它有一个名为permute.vertices
,这将允许您排列顶点),所以我现在能想到的唯一方法是您需要构造另一个图,其中边处于“正确的顺序”。make_graph
确保边完全按照您指定的顺序存储在图中,我认为也是如此graph_from_data_frame
.
另一种选择(如果您不想重建整个图)是将图绘制两次:首先绘制“不太重要”的边并将重要边的宽度设置为零,然后绘制重要的边边缘在顶部。
如果您希望在即将推出的 igraph 版本中支持边排列,请提交功能请求 https://github.com/igraph/igraph/issues在 Github 上。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)