如何在ggraph中手动自定义边缘颜色和箭头?

问题描述

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

要求:

  • 只有权重为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','a','c'),to = c('b','e','e'),weight = c(1,1,2,2),linetype = c('dashed','dashed','solid','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或类似方法的另一种解决方案。

编辑:

我设法匹配了边缘和节点的颜色。代码已更新。仅缺少箭头

解决方法

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

关于箭头,我最近问了一个类似的问题。使用base / igraph here

为我提供了一个解决方案

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...