У меня есть данные, состоящие из пар взаимодействий, и я хотел бы представить их как сеть.Хотя большинство взаимодействий являются однонаправленными, некоторые являются двунаправленными, и я хотел бы представить это.
Я могу сделать это по цвету, но для однонаправленных взаимодействий важно направление, поэтому я подумал, что могу использовать стрелки, но я не знаю, как убрать стрелки с двунаправленных краев (или добавить стрелки к другимконец).Я использую пакеты 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()