Порядок узлов в двудольном igraph

У меня есть следующая матрица смежности "dat":

dat <- read.table(text = '     TZ1   TZ2   TZ3   TZ4
  RSP1 0.456 0.232 0.234 0.000
  RSN1 0.248 0.613 0.754 0.413
  RSP2 0.206 0.000 0.493 0.000
  RSN2 0.000 0.000 0.000 0.000
  RSP3 0.000 0.000 0.218 0.000
  RSN3 0.000 0.000 0.000 0.000
  RSP4 0.000 0.000 0.000 0.851
  RSN4 0.000 0.000 0.000 0.000' ) %>%
    as.matrix()

и использовал приведенный ниже код, чтобы сделать двудольный

g<-graph_from_incidence_matrix(dat, directed = TRUE, mode = "out", multiple = FALSE, weighted = T, add.names = NULL)
V(g)$color <- ifelse(V(g)$type, "lightblue", "salmon")
V(g)$shape <- ifelse(V(g)$type, "square","circle")
V(g)$frame.color <-  "gray" 
V(g)$size <- 18
E(g)$color <- "blue"
plot.igraph(g, edge.width=E(g)$weight*5, layout=layout.bipartite,edge.arrow.size=0.5,
 vertex.label.cex = 0.8, vertex.label.color = "black", vertex.shape=V(g)$shape, vertex.size=degree(g)*5)

Однако порядок узлов не соответствует приведенному ниже.

RSP1    RSN1    RSP2    RSN2    RSP3    RSN3    RSP4    RSN4

а также

TZ1   TZ2   TZ3   TZ4

Как мы можем построить граф с вышеуказанным порядком узлов?


person Jawad    schedule 17.10.2018    source источник


Ответы (1)


Таким образом, многие функции макета в igraph, layout.bipartite, включая минимизацию пересечений границ:

Компоновка создается путем размещения вершин в два ряда в соответствии с их типами. Затем позиции в строках оптимизируются, чтобы свести к минимуму пересечения ребер,

Если вы хотите контролировать расположение узлов, вам придется создать собственный макет, создав матрицу с позициями x и y в столбцах и строках в одном и том же порядок как V(g). purrr может помочь вам здесь:

Rs <- V(g)$name[grepl('^R', V(g)$name)] %>%
  purrr::imap(function(x, i){
    c(i, 2)
  }) %>%
  do.call(rbind, .)

Ts <- V(g)$name[grepl('^T', V(g)$name)] %>%
  purrr::map2(3:6, function(x, i){
    c(i, 1)
  }) %>%
  do.call(rbind, .)

l <- rbind(Rs, Ts)

который даст вам матрицу:

      [,1] [,2]
 [1,]    1    2
 [2,]    2    2
 [3,]    3    2
 [4,]    4    2
 [5,]    5    2
 [6,]    6    2
 [7,]    7    2
 [8,]    8    2
 [9,]    3    1
[10,]    4    1
[11,]    5    1
[12,]    6    1

введите здесь описание изображения

person struggles    schedule 17.10.2018