Igraph сохраняют край с наибольшим весом, когда узлы имеют круглое соединение - PullRequest
0 голосов
/ 25 октября 2018

У меня есть намного больший график, такой как в ссылках ниже, где некоторые узлы имеют входящий и исходящий фронт, которые имеют разные веса.Боюсь, я изо всех сил пытаюсь найти способ определить края, которые нужно удалить.

Любая помощь будет принята с благодарностью

library(igraph)
set.seed(100)

g <- graph_from_data_frame(data.frame(v_1 = c(1,2,1,3, 1, 3), v_2 = c(2,1,3,1, 4, 4)), directed = TRUE)

E(g)$weights <- c(1, 3, 3, 1, 1, 3)

plot.igraph(g, edge.width=E(g)$weights, edge.curved = 0.3)

График, который у меня есть

График, который я хочу получить

1 Ответ

0 голосов
/ 25 октября 2018

Это немного нахальный ответ на ваш собственный вопрос, но большое спасибо комментарию ANG за то, что мой мозг заработал.

Некоторое время боролся с этим, но вот решение, которое работает в моем сценарии.Надеюсь, это поможет кому-то с подобной проблемой.

library(igraph)
set.seed(100)

df <- data.frame(v_1 = c(1,2,1,3, 1, 3), v_2 = c(2,1,3,1, 4, 4))
df$weights <- c(1, 3, 3, 1, 1, 3)

#Order the vertex IDs so that an edge between 1-2 and 2-1 both become 1-2, then collapse them together so they're in 1 column that can be used to identify the duplicate.
df$ordered_verticies <- apply(df[1:2], 1, FUN = function(x) paste0(sort(x), collapse = ""))

#order by vertice, then negative weight for a decending order
df <- df[order(df$ordered_verticies, -df$weights),]

#removing duplications now gets rid of the the second (and lower weighted) instance of an edge
df <- df[!duplicated(df$ordered_verticies),]

#new graph
g <- graph_from_data_frame(df[1:2], directed = TRUE)
E(g)$weights <- df[,3]
plot.igraph(g, edge.width=E(g)$weights, edge.curved = 0.3)
...