【问题标题】:ggraph - increase node size based on frequencyggraph - 根据频率增加节点大小
【发布时间】:2018-11-09 03:08:51
【问题描述】:

一直在阅读 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()

...并收到此错误...

 Error: Column `size` must be a 1d atomic vector or a list
 Call `rlang::last_error()` to see a backtrace

任何想法或想法将不胜感激。

【问题讨论】:

    标签: r ggplot2 ggraph


    【解决方案1】:

    问题是这个频率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()
    

    这里subt和之前一样,那么vert包含两列:顶点(单词)和它们在subt中的频率作为总和或相关的边缘频率。最后,我添加了vertices = vert 来传递这个顶点属性。

    【讨论】:

    • 感谢帮助。我能够将逻辑重新用于我目前正在开发的项目。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 2013-03-25
    • 2016-06-17
    • 1970-01-01
    • 2015-02-15
    • 2020-04-13
    相关资源
    最近更新 更多