Форматирование графиков в R

Nov 22 2020

Я пытаюсь понять, как легко получить доступ к графам, созданным в R.

Если я начну со следующих данных. Я создаю график, запускаю кластеризацию графиков и затем рисую первый кластер:

#libraries
 library(igraph)
 library(igraphdata)
 data(karate)

#cluster
 cfg <- cluster_fast_greedy(karate)
 plot(cfg, karate)
cfg

IGRAPH clustering fast greedy, groups: 3, mod: 0.43
+ groups:
  $`1` [1] "Actor 9" "Actor 10" "Actor 15" "Actor 16" "Actor 19" "Actor 21" "Actor 23" "Actor 24" "Actor 25" "Actor 26" "Actor 27" [12] "Actor 28" "Actor 29" "Actor 30" "Actor 31" "Actor 32" "Actor 33" "John A" $`2`
   [1] "Mr Hi"    "Actor 2"  "Actor 3"  "Actor 4"  "Actor 8"  "Actor 12" "Actor 13" "Actor 14" "Actor 18" "Actor 20" "Actor 22"
  
  $`3`
  [1] "Actor 5"  "Actor 6"  "Actor 7"  "Actor 11" "Actor 17"
  
#make a plot of the first community
 a = induced_subgraph(karate, cfg[[1]])
 plot(a)

#biggest graph https://stackoverflow.com/questions/15103744/r-igraph-how-to-find-the-largest-community
 x <- which.max(sizes(cfg))
 subg <- induced.subgraph(karate, which(membership(cfg) == x))

Пользователь G5W показал, как составить таблицу, содержащую размер каждого кластера:

 my_table =  table(cfg$membership)

Я также придумал, как «сжать» (сжать, сжать) все наблюдения в соответствующие сообщества, а затем построить график.

contracted <- simplify(contract(karate,membership(cfg)))
plot(contracted)

Кажется, есть две «линии», соединяющие три кластера вместе:

Кто-нибудь знает, действительно ли эта строчка «что-нибудь значит»? Эта линия встречается в природе? На каком основании эта линия соединяет эти 3 кластера?

Я смоделировал свои собственные сетевые данные, запустил кластеризацию графиков, сжал результаты по кластерам, а затем создал график

library(igraph)
library(dplyr)
library(visNetwork)

set.seed(1234)

#create file from which to sample from
x5 <- sample(1:10000, 10000, replace=T)
#convert to data frame
x5 = as.data.frame(x5)

#create first file (take a random sample from the created file)
a = sample_n(x5, 9000)
#create second file (take a random sample from the created file)
b = sample_n(x5, 9000)

#combine
c = cbind(a,b)
#create dataframe
c = data.frame(c)
#rename column names
colnames(c) <- c("a","b")

#create graph
graph <- graph.data.frame(c, directed=F)
graph <- simplify(graph)
cfg <- cluster_fast_greedy(graph)

#contract clusters
contracted <- simplify(contract(graph, membership(cfg), vertex.attr.comb=toString))

#visnetwork plot
visIgraph(contracted) %>% visOptions (highlightNearest = TRUE) %>% visIgraphLayout(layout = "layout_with_fr") %>%
    visOptions(highlightNearest = TRUE, nodesIdSelection = TRUE) %>% 
    visInteraction(navigationButtons = TRUE)

#without visnetwork
plot(contracted)

Некоторые кластеры все еще связаны друг с другом, некоторые изолированы. Кто-нибудь знает, почему это?

благодаря

Ответы

2 G5W Nov 23 2020 at 01:41

Чтобы получить таблицу, содержащую размер каждого кластера, используйте:

table(cfg$membership)
 1  2  3 
18 11  5 

Линии означают, что некоторые люди в группе 1 разговаривают с некоторыми из группы 2, а некоторые люди в группе 3 разговаривают с людьми из группы 2, но никто из группы 1 не разговаривает ни с кем из группы 3. Например, г-н Хи (группа 2) разговаривает с Актером 5 (группа 1) и Актером 32 (группа 3).

Другой ваш пример не связан. Есть несколько связанных компонентов.

table(COMP$membership)
   1    2    3    4    5    6    7    8    9   10   11
6196    4    7    5    2    2    2    8    2    1    3

   13   14   15   16  17   18 
    2    2    2    2   2    2

Конечно, в сжатом графе по-прежнему не будет ссылок между этими компонентами.