[英]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.