2017-09-20 3 views
2

Ich möchte ein ähnliches Co-Occupancy-Netzwerkdiagramm verwenden, das auf section 8.2.2 David Robinsons und Julia Silges Tidy Text-Mining-Buch angezeigt wird. in den Daten wie diese Tabelle, mit der Ausnahme, dass ich je ändern auf möchte die Größe der Knoten haben, wie oft der Begriff auftaucht: enter image description hereHinzufügen von Wortzählgröße als Layer zur Knotengröße in einem Cooccurrence-Netzwerkdiagramm unter Verwendung von tidtext

die obige Tabelle mit dem folgenden Code festgelegt wurde:

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() 

Ich habe mit geom_node_point(aes(size = ??)) herum gespielt, aber ich kann nicht herausfinden, wie Konfigurieren Sie den Code dafür. Teil des Problems ist für mich, dass die Funktion graph_from_data_frame() den Datenrahmen zu einem ziemlich komplex aussehenden Objekt macht.

Antwort

2

ich die Größe der Knoten haben möchten ändern sich, je nachdem, wie oft der Begriff zeigt sich in den Daten bis

Sie

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() 

etwas Das gibt man tun könnte wie folgt:

enter image description here

  • vertices = nasa_keyword %>% count(keyword) %>% filter(n >= 50) fügt Knoteninformationen auf das Graphen, genauer gesagt: die Knoten-ID (erste Spalt) und die Anzahl der Vorkommen n (zweite Spalte).
  • aes(size = n) bildet diese Informationen auf die Knotengröße ab.
  • scale_size(range = c(1,10)) Lassen Sie die Mindestgröße und maximale Punktgrößen definieren.
Verwandte Themen