Eu tenho os dataframes nodes
e edges
abaixo e crio um gráfico circular a partir deles. O que eu gostaria de alcançar é usar x
e y
coordenar de forma que sempre o a
nó esteja no topo do gráfico, independentemente do número total de nós, como o Roger Rabit
nó abaixo. As posições x
e y
que dei são aleatórias agora, mas o ideal seria criar o gráfico de anéis apenas com as coordenadas do a
conjunto.
library('igraph')
nodes <- c('a','b','c','d')
x <- c(0,1,2,3)
y <- c(0,1,2,3)
from <- c('a','b','c','d')
to <- c('b','c','d','a')
NodeList <- data.frame(nodes, x ,y)
EdgeList <- data.frame(from, to)
a<- graph_from_data_frame(vertices = NodeList, d= EdgeList, directed = TRUE)
plot(a)
Supondo que o nó que está no topo seja o primeiro nó em nodes
uso layout_in_circle para obter um layout e, em seguida, gire suas linhas até que o máximo y esteja no topo usando-o como o layout final.
# rotate rows of matrix mat so that row number mx is at top
# where mx defaults to row having largest value in 2nd column
rot <- function(mat, mx = which.max(mat[, 2])) {
if (mx == 1) mat else mat[c(mx:nrow(mat), 1:(mx-1)), ]
}
plot(a, layout = rot(layout_in_circle(a)))
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras