[英]Removing or hiding specific edges in iGraph based on nodes
这个问题是我之前的一个问题的后续问题,我一直在努力解决这个问题。
我正在尝试使用 iGraph 包在 R 中可视化网络,但是,我想在完全相同的布局中可视化同一网络的不同子集。 所以子集之间会有不同的顶点,但我希望每个顶点和边在每个图中都位于同一位置。
最初,我尝试通过创建整体图的坐标,然后绘制具有相同坐标的子图来做到这一点。 但是,这最终导致了几个问题:
所以,我尝试了不同的策略。 现在我绘制了整个图形,但尝试简单地为我不想要的图形部分着色。 因此,在以下示例中:
set.seed(123)
g_overall = erdos.renyi.game(25, 0.3)
removals = c("2" ,"5" ,"13", "19", "25")
coords = layout_as_tree(g_overall,
root = 1,
circular = FALSE,
flip.y = FALSE,
mode = "all"
)
V(g_overall)$colour = ifelse(V(g_overall) %in% removals, "blue", "red")
plot.igraph(g_overall,
layout = coords,
vertex.shape = "none",
vertex.label = V(g_overall),
vertex.label.color = V(g_overall)$colour
)
这给出了以下内容:
然后,如果我将代码更改为:
plot.igraph(g_overall,
layout = coords,
vertex.shape = "none",
vertex.label = ifelse(V(g_overall)$colour == "red", V(g_overall), NA),
vertex.label.color = V(g_overall)$colour
)
这变成:
这几乎是现在,但显然现在有需要删除的边缘,我不知道如何处理。 理想情况下,我会使用类似的 ifelse 循环,例如: ifelse(starting_node$colour == "red", edge_colour = "black", edge_colour = "white"
以便边缘颜色基于其连接的节点(并且去像节点一样不可见)。但我想不出一种方法来做到这一点。
任何建议表示赞赏。
Ps 当然,我会研究基于完全去除边缘的答案,但我怀疑这会改变布局,因此宁愿坚持“隐藏”它们。
我认为您可以通过删除不需要的节点而不是隐藏它们来更简单地获得您想要的东西。 在我这样做之前,我想对您的代码进行一些小的更改,即:
removals = c(2, 5, 13, 19, 25)
接着就,随即,
g2 = induced_subgraph(g_overall, V(g_overall)[-removals])
coords2 = coords[-removals,]
plot.igraph(g2,
layout = coords2,
vertex.shape = "none",
vertex.label = V(g_overall)[-removals],
vertex.label.color = V(g_overall)$colour[-removals]
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.