Порядок узлов в двудольном играфе - PullRequest
0 голосов
/ 17 октября 2018

У меня следующая матрица смежности "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

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

1 Ответ

0 голосов
/ 17 октября 2018

Итак, многие функции макета в 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

enter image description here

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