1

我正在尝试在自定义一些样式的同时可视化网络。到目前为止,我还没有成功完成任务。

要求:

  • 只有权重为 2 的边应该有一个指向链接方向的箭头。
  • 一条边应该与它离开的节点颜色相同。

代码:

library(ggraph)
library(igraph)
library(graphlayouts)
library(tibble)
library(dplyr)

nodes <- data.frame(name = c('a','b','c','d','e')) 

links <- data.frame(
  from = c('a', 'b', 'd', 'a', 'd', 'a', 'c'),
  to = c('b', 'd', 'e', 'c', 'a', 'e', 'e'),
  weight = c(1, 1, 2, 2, 2, 1, 2),
  linetype = c('dashed', 'dashed', 'solid', 'solid', 'solid', 'dashed', 'solid')
)


tbl_graph_net <- as.igraph(tidygraph::tbl_graph(nodes = nodes, edges = links))

layout <- create_layout(tbl_graph_net, 
                        layout = 'igraph', 
                        algorithm = "nicely")

colfunc <- colorRampPalette(c("blue", "red"))
cols <- colfunc(5)

ggraph(tbl_graph_net, layout = "stress") +
  # Edges
  geom_edge_fan(aes(colour = from, 
                    edge_width = weight, 
                    linetype = linetype)) +
  scale_edge_linetype_manual(limits = as.factor(links$linetype), 
                             values = links$linetype) +
  scale_edge_colour_gradient(low = "blue", high = "red") +
  # Nodes
  geom_node_point(colour = cols, size = 10) +
  # Labels
  geom_node_text(aes(label = name), 
                 size = 7, 
                 colour = "#FFFFFF") +
  # Theme
  theme_graph() +
  theme(legend.position = "none")

我知道存在scale_edge_color_manual但不知道如何正确使用它。同样,我不知道我是否正确缩放节点的颜色scale_color_manual

匹配边缘和节点颜色绝对是可能的,但我不知道如何仅在某些边缘上绘制箭头。如果ggraph不允许,我很乐意接受其他解决方案igraph或类似的解决方案。

编辑:

我设法显然匹配边缘和节点颜色。代码已更新。只缺少箭头

4

1 回答 1

0

您可以使用geom_edge_link2()ggraph 中的变体使边缘与它们来自的节点颜色相同。

至于箭头,我最近问了一个类似的问题。我在这里获得了使用 base/igraph 的解决方案

于 2020-08-28T15:42:11.833 回答