Сеть с однонаправленными и двунаправленными ребрами - PullRequest
0 голосов
/ 24 августа 2018

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

Я могу сделать это по цвету, но для однонаправленных взаимодействий важно направление, поэтому я подумал, что могу использовать стрелки, но я не знаю, как убрать стрелки с двунаправленных краев (или добавить стрелки к другимконец).Я использую пакеты tidygraph и ggraph и изо всех сил пытаюсь реализовать это, поскольку я не знаю, что передать вызову эстетики в geom_edge_link.Я также попытался настроить объект tbl_graph и указать его как данные для разделения geom_edge_link слоев, но это не сработало.

Вот MWE того, что у меня есть:

nodes <- structure(list(node = structure(c(1L, 2L, 5L, 6L, 8L, 7L, 4L, 
3L), .Label = c("A", "B", "D", "E", "F", "Q", "S", "T"), class = "factor")), .Names = "node", row.names = c(NA, 
-8L), class = "data.frame")

df <- structure(list(from = c("A", "B", "F", "Q", "T", "S", "A", "T", 
"F"), to = c("E", "D", "Q", "S", "F", "T", "D", "A", "E"), status = c("Bi", 
"Bi", "Uni", "Uni", "Uni", "Uni", "Uni", "Uni", "Uni"), weight = c(2, 
2, 1, 1, 1, 1, 1, 1, 1)), .Names = c("from", "to", "status", 
"weight"), row.names = c(NA, -9L), class = c("tbl_df", "tbl", 
"data.frame"))

library(tidygraph)
library(ggraph)

tbl_graph(nodes = nodes, edges = df, directed = T) %>% 
  ggraph(layout = 'linear', circular = TRUE) + 
  geom_edge_link(aes(colour = status),
                 arrow = arrow(length = unit(4, 'mm')),
                 start_cap = circle(3, 'mm'),
                 end_cap = circle(3, 'mm')) + 
  geom_node_point(size = 5) + 
  coord_fixed() +
  geom_node_text(aes(label = node), repel = T) +
  scale_edge_width(range = c(0.5, 1)) + 
  theme_graph()

enter image description here

...