簡體   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