r - 如何重新排列 igraph 图中边的顺序?

标签 r igraph

我正在尝试在 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) 

给了我一个图,其中单个红色边缘位于底部。 this plot makes me sad 如果我选择对编号较高的边(而不是#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/

相关文章:

python - 删除两个顶点之间的边[igraph python]

R:将行拆分为多行,然后将列拆分为多列

r - 在 gWidgetsRGtk2 中使用 ggplot2

python - 如何使用 igraph 在 python 中绘制 3d 图?

r - 使用 ggraph/ggplot2 在网络图中定位节点和边

r - 最短路径函数在 R igraph 中返回错误路径

r - .SD 和 .SDcols 用于 data.table 连接中的 i 表达式

r - Rstudio 使用 igraph 的网络错误消息

R:按位置(添加、减去或替换的一个元素)查找并计算嵌套在列表中的字符向量之间的所有差异

r - 如何避免 igraph 中的图形联合名称冲突?