Отрегулируйте положение второго набора узлов на основе заданных координат первого набора узлов в двухрежимном графике - PullRequest
1 голос
/ 14 мая 2019

Я хотел бы отрегулировать положение второго набора узлов на основе заданных координат первого набора узлов для двухрежимного графика с помощью 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?

enter image description here

Должен быть способсделать это, но мои знания по кодированию слишком ограничены, чтобы понять, как кодируется layout.fruchterman.reingold(), чтобы понять, как применять его в зависимости от заданных координат для первого набора узлов.

...