ggraph - увеличить размер узла в зависимости от частоты - PullRequest
0 голосов
/ 09 ноября 2018

Я читал 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

Любые мысли или идеи будут оценены.

1 Ответ

0 голосов
/ 09 ноября 2018

Проблема в том, что эта частота 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, чтобы передать этот атрибут вершины.

...