我正在尝试在自定义一些样式的同时可视化网络。到目前为止,我还没有成功完成任务。
要求:
- 只有权重为 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
或类似的解决方案。
编辑:
我设法显然匹配边缘和节点颜色。代码已更新。只缺少箭头