Я хотел бы отрегулировать положение второго набора узлов на основе заданных координат первого набора узлов для двухрежимного графика с помощью igraph.Есть ли удобный способ сделать это?
Вот воспроизводимый пример, который показывает, что я хотел бы сделать.
library(igraph)
set.seed(01)
# get sample matrix
bip <- matrix(sample(0:1,10*20, replace=TRUE),10,20)
# transform to bipartite incidence matrix for plotting
g <- graph_from_incidence_matrix(bip)
# initialise empty matrix for coords of the first nodeset
layout_given <- matrix(0, 10, 2)
# sample some coordinates that represent those which are given
layout_given[,1] <- sample(-2.435651:3.670977,10, replace = T)
layout_given[,2] <- sample(-2.435651:3.670977,10, replace = T)
# these are the standard positions of the nodes the algorithm
# layout.fruchterman.reingold assigns
layout_fr = layout.fruchterman.reingold(g)
# replace the given positions with those generated by the algorithm.
# these are the first 10 in the layout 30x2 layout matrix
# (because there are 10 nodes of the first nodeset) with those that I would like
# to hold fixed
layout_fr[1:10,] <- layout_given
plot(g,
layout = layout_fr,
vertex.shape= c("circle", "square")[V(g)$type+1],
vertex.color= c("red", "orange")[V(g)$type+1])
График показывает, что позиционирование второго набора узлов не оптимизированодля удобства чтения по отношению к первому набору узлов.Это мешает удобочитаемости графика.Как я могу оптимизировать положение второго набора узлов на основе заданного позиционирования в первом наборе узлов layout_given
?
Должен быть способсделать это, но мои знания по кодированию слишком ограничены, чтобы понять, как кодируется layout.fruchterman.reingold()
, чтобы понять, как применять его в зависимости от заданных координат для первого набора узлов.