Графический дизайн сетей с ggraph и visNetwork

library(udpipe)
library(tidyverse)
library(igraph)
library(ggraph)
library(visNetwork)

caesar <- udpipe_read_conllu("https://github.com/locusclassicus/text_analysis_2024/raw/main/files/bg_latinpipe.conllu")

caesar_subset <- caesar |> 
  filter(upos %in% c("NOUN"))

cooc2 <- cooccurrence(caesar_subset, term = "lemma", 
                     group = c("doc_id", "sentence_id")) |>
  as_tibble() |> 
  filter(cooc > 40)

caesar_g <- graph_from_data_frame(cooc2, directed = TRUE)
V(caesar_g)$degree <- as.numeric(degree(caesar_g))
V(caesar_g)$group <- ifelse(V(caesar_g)$degree > 4, "Частые", "Редкие")

my_cols <- c("Частые" = "#D35400", "Редкие" = "#F39C12")

set.seed(21092024)
ggraph(caesar_g, layout = "dh", maxiter = 100) +
  
  geom_edge_arc(strength = 1,
                arrow = arrow(angle = 20, length = unit(0.2, "cm"), ends = "last", type = "closed"),
                end_cap = circle(1.5, "mm")) +
  
  geom_node_point(aes(size = degree, fill = group), 
                  shape = 21) +
  
  geom_node_label(aes(label = name), 
                  nudge_y = 0.7) +

  scale_fill_manual(values = my_cols) +
  scale_size(guide = 'none') +
  
  theme_graph(base_family = "sans") +
  theme(legend.position = "bottom") +
  labs(title = "Слова-соседи в Записках Цезаря")