繁体   English   中英

基于节点删除或隐藏 iGraph 中的特定边

[英]Removing or hiding specific edges in iGraph based on nodes

这个问题是我之前的一个问题的后续问题,我一直在努力解决这个问题。

我正在尝试使用 iGraph 包在 R 中可视化网络,但是,我想在完全相同的布局中可视化同一网络的不同子集。 所以子集之间会有不同的顶点,但我希望每个顶点和边在每个图中都位于同一位置。

最初,我尝试通过创建整体图的坐标,然后绘制具有相同坐标的子图来做到这一点。 但是,这最终导致了几个问题:

  1. iGraph 将顶点位置基于它们的编号,因此一旦您从子图中的图中删除一个顶点,所有后续顶点的编号都会发生变化,因此它们的位置将是错误的。
  2. 通过给出不再存在的顶点坐标,iGraph(我认为)仍然会尝试绘制它们,因此您最终可以得到未连接到子图的节点。

所以,我尝试了不同的策略。 现在我绘制了整个图形,但尝试简单地为我不想要的图形部分着色。 因此,在以下示例中:

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]
      )

简化图

我在模仿您的代码的简化图上保留了相同的标签。 对于减少图形的另一种方法,但保留旧标签在 R 中删除后查看节点标签

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM