igraph: разрешение узких пересекающихся узлов
У меня есть график с несколькими сотнями узлов и ребер. Отключенные подграфы хорошо разделяются и разрешаются, но узлы внутри подграфов перекрываются и плохо разрешаются. Я попробовал несколько алгоритмов компоновки, а также попытался изменить соответствующие параметры в алгоритме компоновки (например: iter, kkconst, start.temp и т. Д.). Но я все еще не в состоянии разогнать узлы с высокой степенью кластеризации. Смотрите рисунок ниже.
Я надеялся найти какой-нибудь параметр для управления притяжением / отталкиванием / гравитацией и т. Д., Но, похоже, их нет. Ответ и цифры из bdemarest
в этом вопросе, кажется, исправить именно эту проблему. Как ни странно, некоторые, казалось бы, полезные параметры устарели в новой версии igraph (coolexp, maxdelta, area, repulserad и т. Д.).
Кто-нибудь знает способ держать подграфы хорошо разделенными, в то же время распределяя близкие узлы достаточно хорошо, чтобы они не перекрывались?
1 ответ
Мне удалось заставить его работать с помощью пакета qgraph
,
Вот рабочий пример:
library(igraph)
library(qgraph)
g <- barabasi.game(355, directed=FALSE)
png("plot1.png", height=6, width=12, units="in", res=250)
par(mfrow=c(1, 3))
plot(g,layout=layout_with_fr,vertex.size=4,vertex.label=NA)
mtext("layout_with_fr", side=1)
e <- get.edgelist(g)
l <- qgraph.layout.fruchtermanreingold(e,vcount=vcount(g))
plot(g,layout=l,vertex.size=4,vertex.label=NA)
mtext("qgraph.layout.fruchtermanreingold default", side=1)
l <- qgraph.layout.fruchtermanreingold(e,vcount=vcount(g),
area=8*(vcount(g)^2),repulse.rad=(vcount(g)^3.1))
plot(g,layout=l,vertex.size=4,vertex.label=NA)
mtext("qgraph.layout.fruchtermanreingold modified", side=1)
dev.off()