如何使用 R 中的 tidygraph 对象绘制单个节点?

How to plot a single node using tidygraph objects in R?

我想知道是否可以用单个节点绘制 tidygraph 对象?例如,如果我创建一些数据和一个具有 2 个节点的 tidygraph 对象,它将如下所示:

library(tidygraph)
library(graph)
nodes <- data.frame(name = c('var1', 'var2'), value = c(3, 10))
edges <- data.frame(from = c(1),
                    to = c(2))

tg <- tbl_graph(nodes = nodes, edges = edges)

ggraph(tg, "partition") +
  geom_node_tile(aes(fill = name)) +
  scale_y_reverse() +
  theme_void()

但是,我想知道是否可以绘制一个仅包含 1 个节点的 tidygraph 对象。例如,如果我的数据没有与之关联的边缘数据,如下所示:

nodes <- data.frame(name = c('var1'), value = c(3))
tg <- tbl_graph(nodes = nodes)

当我尝试绘制上面的图时,出现错误:

Error in layout[, 1] : incorrect number of dimensions

这是有道理的,因为没有边缘数据。我天真地尝试将边缘数据设置为:

edges <- data.frame(from = c(1),
                    to = c(1))

但这也会返回一个错误。

我想知道是否有办法实现我想要做的事情?

您可以创建一个 two-row 节点数据框,其中同一行重复两次,边缘数据框也是如此。创建绘图对象并删除其数据组件的第二行。

library(tidygraph)
#> Attaching package: 'tidygraph'
#> The following object is masked from 'package:stats':
#> 
#>     filter
library(ggraph)
#> Loading required package: ggplot2

nodes <- data.frame(name = c('var1'), value = c(3, 3))
edges <- data.frame(from = c(1, 1),
                    to = c(1, 1))

tg <- tbl_graph(nodes = nodes, edges = edges)

p <- ggraph(tg, "partition") +
  geom_node_tile(aes(fill = name)) +
  scale_y_reverse() +
  theme_void()

#Remove second node
p$data <- p$data[-2, ]

p

reprex package (v2.0.1)

创建于 2022-03-28