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

У меня есть двудольный граф, подобный этому, где я хочу один атрибут на внешнем круге и другой атрибут на внутреннем круге или просто внутри внешнего круга.

enter image description here

Согласно этому вопросу Биокондуктор может сделать что-то подобное, но я не знаю, насколько настраиваемы шрифты и т. Д.. Любые другие методы для создания концентрического макета для двудольного графа?

1 Ответ

0 голосов
/ 20 ноября 2018

igraph имеет двудольный макет , который пытается минимизировать пересечения краев.Вы можете запустить этот макет, извлечь координаты, а затем обернуть их вокруг круга.

Я недостаточно опытен с R, чтобы иметь возможность показать вам, как это делается с помощью интерфейса R.Но я могу показать вам, как это будет выглядеть, когда вы закончите, используя интерфейс Mathematica igraph.

<< IGraphM`

IGraph/M 0.3.103 (November 13, 2018)

Evaluate IGDocumentation[] to get started.

Создайте разреженный случайный двудольный граф, возьмите его самый большой связанный компоненти запустите макет.Если график не является разреженным, невозможно избежать ребер, проходящих через середину круга.

IGSeedRandom[4];
bg = IGGiantComponent@IGBipartiteGameGNM[100, 100, 220];
bg = IGLayoutBipartite[bg, "BipartitePartitions" -> IGBipartitePartitions[bg]]

enter image description here

Извлекитекоординаты и оберните их вокруг двух окружностей.

pts = GraphEmbedding[bg]; (* get vertex coordinates *)

{m1, m2} = Max /@ Values@GroupBy[pts, First -> Last]; (* find max coordinate for both vertex groups *)

newPts = If[#1 == -1,
     2 {Cos[#2/m1 2 Pi], Sin[#2/m1 2 Pi]},
     3 {Cos[#2/m2 2 Pi], Sin[#2/m2 2 Pi]}
   ] & @@@ pts; (* wrap both groups around a circle *)

Graph[VertexList[bg], EdgeList[bg], VertexCoordinates -> newPts]

enter image description here

Приведенное выше соотношение радиусов окружности составляет 3: 2.Чем больше отношение радиусов, тем меньше ребер пересекают внутренний круг.Вот график с соотношением 3: 1.

enter image description here

...