Этот вопрос является продолжением моего предыдущего вопроса, с которым я некоторое время боролся.
Я пытаюсь визуализировать сети в R с помощью пакета iGraph, однако я хотите визуализировать разные подмножества одной и той же сети в одной и той же компоновке. Таким образом, будут вершины, которые отличаются между подмножествами, но я хочу, чтобы каждая вершина и ребро были в одном и том же месте на каждом графике.
Сначала я попытался сделать это, создав координаты общего графа, а затем построение подграфов с одинаковыми координатами. Однако это привело к нескольким проблемам:
- iGraph основывает позиции вершин на их числе, поэтому, как только вы удаляете одну вершину из графа для подграфа, номера всех последующих вершин изменяются и, следовательно, их позиции будут неправильными.
- Давая координаты вершин, которых больше не существует, iGraph (я думаю) все еще пытается построить их так, чтобы вы могли получить узлы, не связанные с подграфом.
Итак, вместо этого я попробовал другую тактику c. Теперь я строю график в целом, но стараюсь просто раскрасить те части графика, которые мне не нужны. Итак, в следующем примере:
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 l oop с чем-то вроде: ifelse(starting_node$colour == "red", edge_colour = "black", edge_colour = "white"
, чтобы цвет ребра основывался на узлах, к которым он подключен (и становился невидимым, как узлы). Но я не могу придумать, как это сделать.
Любой совет приветствуется.
PS. Конечно, я рассмотрю ответы, основанные на полном удалении краев, но я подозреваю, что это изменит макет и поэтому скорее будет «скрывать» их.