Как мы можем создать сгруппированный циркулирующий сетевой график, используя 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](https://i.stack.imgur.com/nQxGX.png)