2

给定以下示例代码,

library(tidyverse)
library(tidygraph)
library(ggraph)

reprex <- tibble(to = 1:10,
                  from = c(2:10, 1),
                  facet = rep(1:2, each = 5)) %>%
    as_tbl_graph()

reprex_plot <- reprex %>%
    ggraph() +
    geom_node_point() +
    geom_edge_link()

reprex_plot + facet_edges(~ facet)

如何隐藏没有边缘进入或离开节点的节点?

4

1 回答 1

0
library(tidyverse)
library(tidygraph)
library(ggraph)

reprex2 <- tibble(to = 1:10,
                 from = c(2:10, 1)) %>%
    as_tbl_graph() %>%
    activate(nodes) %>%
    mutate(facet = rep(1:2, each = 5))

reprex_plot <- reprex2 %>%
    ggraph() +
    geom_node_point() +
    geom_edge_link()  +
    geom_node_label(aes(label = name)) +
    theme_graph() + 
    facet_nodes(~ facet)

reprex_plot

我可以理解你的做法,但困难在于tidygraph's的聪明才智as_tbl_graph()。您实际上是在传递一个边缘列表,其中 facet 是一个仅适用于边缘的变量。您可以通过reprex %>% activate(nodes) %>% as_tibble()查看构面列与节点没有关联来验证这一点。

我的解决方案是在节点上显式构造构面列,然后使用facet_nodes()facet_edges()

如果它们的终端节点都存在于面板中,则绘制边。

于 2018-10-04T16:15:11.240 回答