一直在阅读 Julia Silge 和 David Robinson 所著的 Tidytext Mining with R - https://www.tidytextmining.com/nasa.html - 并且对如何根据频率 (n) 调整节点大小感到困惑。尝试了以下代码...
library(widyr)
set.seed(1234)
title_word_pairs %>%
filter(n >= 250) %>%
graph_from_data_frame() %>%
ggraph(layout = "fr") +
geom_edge_link(aes(edge_alpha = n, edge_width = n), edge_colour =
"royalblue") +
geom_node_point(aes(size = n)) + scale_size(range = c(2,10)) +
geom_node_text(aes(label = name), repel = TRUE,
point.padding = unit(0.2, "lines")) +
theme_void()
Run Code Online (Sandbox Code Playgroud)
...并收到此错误...
Error: Column `size` must be a 1d atomic vector or a list
Call `rlang::last_error()` to see a backtrace
Run Code Online (Sandbox Code Playgroud)
任何想法或想法将不胜感激。
问题是这个频率n是针对边的,而不是针对顶点的。所以geom_edge_link找到是n因为n是边属性,而geom_node_point没有找到n是因为它不在顶点属性中。
那么我们希望构造另一个变量,它实际上是顶点频率。
subt <- title_word_pairs %>%
filter(n >= 250)
vert <- subt %>% gather(item, word, item1, item2) %>%
group_by(word) %>% summarise(n = sum(n))
subt %>%
graph_from_data_frame(vertices = vert) %>%
ggraph(layout = "fr") +
geom_edge_link(aes(edge_alpha = n, edge_width = n), edge_colour = "royalblue") +
geom_node_point(aes(size = n)) + scale_size(range = c(2,10)) +
geom_node_text(aes(label = name), repel = TRUE, point.padding = unit(0.2, "lines")) +
theme_void()
Run Code Online (Sandbox Code Playgroud)
这里subt与之前相同,然后vert包含两列:顶点(单词)及其频率总和subt或相关边缘频率。最后,我添加了vertices = vertas 来传递这个顶点属性。