R语言 如何在边上的特定位置绘制箭头?

jm81lzqq  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(180)

我有一个图,其中每条边是其节点之间的所有权分布。例如,在“A”和“B”之间的边中,“A”拥有90%,而“B”只拥有10%。我想通过在边上相对于该所有权的位置放置一条弧来可视化这一点。我该如何做到这一点?我更喜欢使用ggraph和使用箭头来可视化相对所有权,但我愿意接受其他建议。
默认情况下,弧被放置在一条边的末端。例如,下面创建了下图。

library(ggraph)
library(ggplot2)

# make edges
edges = data.frame(from = c("A", "B", "C"),
                   to = c("C","A", "B"),
                   relative_position = c(.6,.1, .4))

# create graph
graph <- as_tbl_graph(edges)

# plot using ggraph
ggraph(graph) + 
  geom_edge_link(
    arrow = arrow()
  ) + 
  geom_node_label(aes(label = name))

我想要的是类似下面的东西,我发现this讨论将箭头移动到边的中心,但据我所知,这种方法不适用于设置相对位置。

cyvaqqii

cyvaqqii1#

我建议覆盖两个geom_link_edges --第一个是节点之间的完整链接,第二个是末端有箭头的部分链接。我可以用你的例子来实现这一点,如下所示:

library(ggraph)
library(ggplot2)

# make edges
edges = data.frame(from = c("A", "B", "C"),
                   to = c("C","A", "B"),
                   relative_position = c(.6,.1, .4))

# create graph
graph <- as_tbl_graph(edges)

# plot using ggraph
ggraph(graph) + 
  geom_edge_link() +
  #this the partial link with the arrow - calculate new end coordinates
  geom_edge_link(aes(xend=((xend-x)*relative_position)+x,
                     yend=((yend-y)*relative_position)+y)
                  arrow = arrow()) + 
  geom_node_label(aes(label = name))

相关问题