将颜色渐变应用于ggraph的`geom_conn_bundle`

问题描述 投票:2回答:1

上下文

我使用ggraph在圆形树形图中排列节点(树的叶子),然后在一些节点之间添加连接(使用geom_conn_bundle使用分层捆绑):

library(ggraph)
library(igraph)

# Example data
edges <- data.frame(from="root", to=paste("leaf", seq(1,100), sep=""))
vertices <- data.frame(name = unique(c(as.character(edges$from), as.character(edges$to))) ) 
tree <- graph_from_data_frame( edges, vertices=vertices )

# Drawing nodes
pr <- ggraph(tree, layout = "dendrogram", circular = TRUE) + 
    geom_edge_diagonal(alpha = 0.2)

# Example connection
pr <- pr + geom_conn_bundle(
    data = get_con(from = 23, to = 42),
    alpha=0.8, 
    width=3, 
    colour="skyblue", 
    tension = 0.9
)
print(pr)

这很好地显示了几乎透明的树状图和skyblue中的一些(在本例中为一个)连接。

问题/期望的输出

我想要的是,连接的方向由颜色渐变指示(即以绿色开始,慢慢变为红色),而不是仅用一种颜色(天蓝色)显示连接。如何使用R和ggraph的geom_conn_bundle实现这样的颜色渐变?

以下来自Holten (2006)的摘录可以提供一个关于我如何看待连接的示例:

enter image description here

r ggplot2 gradient linear-gradients ggraph
1个回答
2
投票

用于绘制边缘的几个ggraph几何体,包括geom_conn_bundlegeom_edge_diagonal,具有计算的指数统计。它是一个从0到1的数字,沿着边缘有多远。请注意,这些geoms的简化版本(geom_*0)不计算它。有人提到它是由this blog post作者在ggraph

在这种情况下,将索引stat(index)映射到你的包的aes中的颜色,然后设置一个渐变比例(scale_edge_color_gradient,而不是我最初尝试过的scale_color_gradient)。

在示例图片中,我无法判断宽度是否也被缩放,但是同样可以工作,例如edge_width = stat(index)

library(ggraph)
library(igraph)

ggraph(tree, layout = "dendrogram", circular = TRUE) + 
  geom_edge_diagonal(alpha = 0.2) + 
  geom_conn_bundle(aes(color = stat(index)),
    data = get_con(from = 23, to = 42),
    alpha=0.8, 
    width=3,
    # colour="skyblue", 
    tension = 0.9
  ) +
  scale_edge_color_gradient(low = "green", high = "red")

reprex package创建于2019-03-09(v0.2.1)

© www.soinside.com 2019 - 2024. All rights reserved.