问题描述
这个问题是关于 R 中的 ggraph 库。这是工作示例
set.seed(3)
widths <- sample(seq(0.1,1,0.1),10)
test.df <- data.frame("from" = seq(1,10),"to" = rep(c(2,6),5),"col" = rgb(seq(0,length.out=10),0),"width" = factor(widths,levels=sort(widths)))
arc_test <- graph_from_data_frame(test.df)
ggraph(arc_test,layout = 'linear',circular = TRUE) +
geom_edge_arc0(aes(edge_width=width,edge_color=col)) +
scale_color_identity() +
coord_fixed() +
geom_node_text(label=test.df$from)
> test.df
from to col width
1 1 2 #000000 0.5
2 2 6 #1C0000 0.7
3 3 2 #390000 0.4
4 4 6 #550000 0.2
5 5 2 #710000 0.3
6 6 6 #8E0000 0.8
7 7 2 #AA0000 0.9
8 8 6 #C60000 0.6
9 9 2 #E30000 1
10 10 6 #FF0000 0.1
您可以看到数据框中的颜色没有被解释。我期待 scale_color_identity()
能够按照 SO here 和函数帮助中的指示实现这一点。如果我把 edge_color
放在美学之外
geom_edge_arc0(aes(edge_width=width),edge_color=test.df$col)
我收到一个错误,要求我提供长度为 36 的数据。如果我测试这 36 个值的作用
geom_edge_arc0(aes(edge_width=width),edge_color = rep(test.df$col,each=4)[-1:-4])
我看到 df 的颜色被解释,但分配错误(颜色顺序与线条的顺序匹配)。 这让我倍感困惑,所以这让我想到了以下三个问题:
a) 我如何实现我想要的?
b) 为什么 aes()
之外的颜色需要 36 个值?它甚至不是 10 行的倍数,而是 4*行 -4。 geom_edge_arc
和 geom_edge_arc2
甚至请求 900 个值。我在哪里可以找到所有这些值的要求?
c) 如果我在 aes()
之外定义颜色,为什么颜色顺序与数据框不匹配?
解决方法
我找到了解决问题 a)
我必须明确使用 scale_edge_color_identity()
而不是 scale_color_identity()
来解释数据框颜色!