R GGally цвет ребер по принадлежности к вершине - PullRequest
0 голосов
/ 21 сентября 2018

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

mnet = rgraph(10, mode = "graph", tprob = 0.5)
rownames(mnet)<-letters[1:10]
colnames(mnet)<-letters[1:10]
net = network(mnet, directed = FALSE, ignore.eval = FALSE, names.eval = "strength")
phono<-data.frame(letters=letters[1:10],phono=c("vowel", "consonant","consonant","consonant","vowel","consonant","consonant","consonant","vowel", "consonant"))
table(phono)
net %v% "phono" <- as.character(phono$phono)
nnet<-matrix(0, 10, 10)
for (i in 1:10){
  for (j in 1:10){
    nnet[i,j] = ifelse(phono$phono[phono$letters %in% rownames(mnet)[i]]==phono$phono[phono$letters %in% colnames(mnet)[j]],
                       as.character(phono$phono[phono$letters %in% rownames(mnet)[i]]),
                       "grey50")
  }
}
ggnet2(net, color = "phono", palette = "Set2", label = "phono", edge.color = unlist(nnet[upper.tri(nnet)])[unlist(mnet[upper.tri(mnet)])>0])

Я недоволен этим двойным циклом в середине моего кода R.Есть ли лучший способ сделать то, что я пытаюсь сделать?Это совмещает мой самый предыдущий вопрос, который больше пытался понять, почему «внешний» не работал.

Кроме того, код вообще не работает, но давайте делать одну проблему за раз.хотя length(unlist(nnet[upper.tri(nnet)])[unlist(mnet[upper.tri(mnet)])>0])==length(net %e% "strength")

Спасибо.

1 Ответ

0 голосов
/ 27 июня 2019

Это то, что вы ищете?

enter image description here

Код:

# build graph
net <- sna::rgraph(10, mode = "graph", tprob = 0.5)
net <- network::network(net, directed = FALSE)

# vowels and consonants
phono <- c("v", "c", "c", "c", "v", "c", "c", "c", "v", "c")
names(phono) <- letters[1:10]

# extract edgelist, identify same-letter-type ties
edges <- as.edgelist(net)
k <- ifelse(phono[ edges[, 1] ] == phono[ edges[, 2] ], phono[ edges[, 1] ], NA)

# color ties using `Set2` colors
k[ is.na(k) ] <- "x"
k <- c("c" = "#66C2A5", "v" = "#FC8D62", "x" = "grey50")[ k ]

set.edge.attribute(net, "tie.type", k)
GGally::ggnet2(
  net,
  color = phono[ network.vertex.names(net) ],
  palette = "Set2",
  label = phono[ network.vertex.names(net) ],
  edge.color = "tie.type",
  edge.size = 1
)
...