R ggraph/igraph geom_edge_link2 如何为因子边属性自定义颜色
ggraph网络图修改边配色的方法
问题现状
当前绘制的网络图效果如下:
现有代码中边已经按照边属性Polarität(极性)映射了颜色,但始终显示ggplot默认红蓝配色,无法替换。
当前使用的绘图代码:
ggraph <- ggraph(cog_tidy, layout = 'nicely',) + theme_graph()+ scale_colour_brewer(palette = "Dark2") + geom_edge_link2( aes(end_cap = circle(6, "pt"), edge_color = Polarität ,width=Gewichtung), arrow = arrow( angle = 10, length = unit(0.1, "inches"), ends = "last", type = "closed" ) )+ geom_node_point( aes(size = Gradzentralität ,color = Kategorie), show.legend = TRUE) + geom_node_text(aes(label = label), repel=TRUE, position = "identity", size=2) + scale_edge_width(range = c(0.1, 1))
问题原因
代码里添加的scale_colour_brewer(palette = "Dark2")属于普通ggplot2标度,仅对节点的color映射生效,不会作用于边的edge_color映射。ggraph对边属性单独做了一套标度体系,没有指定边专属标度时就会加载默认的红蓝配色。
解决方法
根据Polarität变量类型,添加对应的scale_edge_colour_*系列标度即可,这类函数的用法和ggplot2原生颜色标度完全一致:
- 如果
Polarität是离散分类变量(比如正/负/中性三类):可以选择brewer调色板、viridis调色板,或者手动指定颜色值 - 如果
Polarität是连续数值变量:可以选择双色渐变、三色渐变、连续viridis调色板
修改后示例代码
ggraph(cog_tidy, layout = 'nicely') + theme_graph() + # 节点颜色标度:对应geom_node_point里的color = Kategorie映射 scale_colour_brewer(palette = "Dark2") + geom_edge_link2( aes(end_cap = circle(6, "pt"), edge_color = Polarität, width = Gewichtung), arrow = arrow( angle = 10, length = unit(0.1, "inches"), ends = "last", type = "closed" ) )+ # 边颜色标度:对应geom_edge_link2里的edge_color = Polarität映射 # 方案1:用brewer调色板,替换palette参数值即可切换配色 scale_edge_colour_brewer(palette = "Set2") + # 方案2:手动自定义颜色,取消注释即可使用,值对应Polarität的分类名和色值 # scale_edge_colour_manual(values = c("positiv" = "#27AE60", "negativ" = "#C0392B", "neutral" = "#7F8C8D")) + # 方案3:如果是连续极性数值,用渐变色标,取消注释即可 # scale_edge_colour_gradient2(low = "#C0392B", mid = "#F1C40F", high = "#27AE60", midpoint = 0) + geom_node_point(aes(size = Gradzentralität, color = Kategorie), show.legend = TRUE) + geom_node_text(aes(label = label), repel=TRUE, position = "identity", size=2) + scale_edge_width(range = c(0.1, 1))
常用边颜色标度参考
- 离散分类边色:
scale_edge_colour_brewer()、scale_edge_colour_manual()、scale_edge_colour_viridis_d() - 连续数值边色:
scale_edge_colour_gradient()、scale_edge_colour_gradient2()、scale_edge_colour_viridis_c()
内容的提问来源于stack exchange,提问作者mlt
相关产品推荐
相关产品推荐

