上下文
我使用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)的摘录可以提供一个关于我如何看待连接的示例:
用于绘制边缘的几个ggraph
几何体,包括geom_conn_bundle
和geom_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)