使用tidytext在同时网络图表上将字数大小作为图层添加到节点大小

时间:2017-09-20 22:36:01

标签: r tidytext ggraph

我有兴趣使用类似的共现网络图表,如section 8.2.2 David Robinson和Julia Silge的Tidy Text采矿书(如此图表)所示,除了我想要的尺寸节点的变化取决于术语在数据中显示的次数:enter image description here

上面的图表是使用以下代码建立的:

library(tidytext)
library(tidyverse)
library(widyr)
library(igraph)
library(ggraph)
library(jsonlite)

metadata <- fromJSON("https://data.nasa.gov/data.json")
nasa_keyword <- data_frame(id = metadata$dataset$`_id`$`$oid`, 
                           keyword = metadata$dataset$keyword) %>%
  unnest(keyword)

keyword_cors <- nasa_keyword %>% 
  group_by(keyword) %>%
  filter(n() >= 50) %>%
  pairwise_cor(keyword, id, sort = TRUE, upper = FALSE)

set.seed(1234)
keyword_cors %>%
  filter(correlation > .6) %>%
  graph_from_data_frame() %>%
  ggraph(layout = "fr") +
  geom_edge_link(aes(edge_alpha = correlation, edge_width = correlation), edge_colour = "royalblue") +
  geom_node_point(size = 5) +
  geom_node_text(aes(label = name), repel = TRUE,
                 point.padding = unit(0.2, "lines")) +
  theme_void()

我一直在玩geom_node_point(aes(size = ??)),但我无法弄清楚如何配置代码来执行此操作。我的部分问题是函数graph_from_data_frame()将数据框转换为相当复杂的对象。

1 个答案:

答案 0 :(得分:2)

  

我希望节点的大小根据方式而变化   很多时候,这个词出现在数据中

你可以做到

set.seed(1234)
keyword_cors %>%
  filter(correlation > .6) %>% 
  graph_from_data_frame(vertices = nasa_keyword %>% count(keyword) %>% filter(n >= 50)) %>% 
  ggraph(layout = "fr") +
  geom_edge_link(aes(edge_alpha = correlation, edge_width = correlation), 
                 edge_colour = "royalblue") +
  geom_node_point(aes(size = n)) + scale_size(range = c(1,10)) + 
  geom_node_text(aes(label = name), repel = TRUE,
                 point.padding = unit(0.2, "lines")) +
  theme_void()

这给你这样的东西:

enter image description here

  • vertices = nasa_keyword %>% count(keyword) %>% filter(n >= 50)补充道 节点信息到图表,更具体地说:节点id(第一个 列)和出现次数n(第二列)。
  • aes(size = n)将此信息映射到节点大小。
  • scale_size(range = c(1,10))让你定义最小值和 最大点数。