как группировать вершины в igraph или ggraph, отражая веса как ширину - PullRequest
0 голосов
/ 20 февраля 2020

Как мы можем создать сгруппированный циркулирующий сетевой график, используя igraph? Используя qgraph, мы можем это сделать, но я бы хотел сделать это, используя igraph. Я нашел предыдущее сообщение, но получил странный результат. Группировка вершин iGraph во взвешенной сети по цвету / подгруппе в R

# library
library(igraph)
set.seed(1)
# create data:
links <- data.frame(
  source=c("A","A", "A", "A", "A","J", "B", "B", "C", "C", "D","I"),
  target=c("B","B", "C", "D", "J","A","E", "F", "G", "H", "I","I"),
  weight=(sample(1:20, 12, replace=T))

)
links$weight
nodes <- data.frame(
  name=LETTERS[1:10],
  carac=c( 1,2,3,1,2,3,1,2,3,3)
)

# Turn it into igraph object
network <- graph_from_data_frame(d=links, vertices=nodes, directed=F) 

# Make a palette of 3 colors
library(RColorBrewer)
coul  <- brewer.pal(3, "Set1") 

# Create a vector of color
my_color <- coul[as.numeric(as.factor(V(network)$carac))]

library(ggraph)
library(tidygraph)

GroupByVertex02 = function(Groups) {
  numGroups = length(unique(Groups))
  GAngle    = (1:numGroups) * 2 * pi / numGroups
  Centers   = matrix(c(cos(GAngle), sin(GAngle)), ncol=2)
  x = y = c()
  for(i in 1:numGroups) {
    curGroup = which(Groups == unique(Groups)[i])
    VAngle = (1:length(curGroup)) * 2 * pi / length(curGroup)
    x = c(x, Centers[i,1] + cos(VAngle) / numGroups )
    y = c(y, Centers[i,2] + sin(VAngle) / numGroups)
  }
  matrix(c(x, y), ncol=2)
}
nodes$carac
GBV2 = GroupByVertex02(nodes$carac)
plot(network, vertex.color=rainbow(3)[nodes$carac], layout=GBV2)

Группировка не работает, и как я могу отобразить вес как ширину? enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...