Группировка узлов одного цвета рядом друг с другом в graphviz

Я создал график с помощью networkx и записал представление графика в точечный файл для отображения с помощью graphviz. Теперь у узлов есть атрибуты цвета, и я хотел бы, чтобы graphviz располагал узлы одного цвета ближе друг к другу.

Например, если узел «футбол» и узел «футбол» имеют синий цвет, то они должны быть близко друг к другу, тогда как узел «бейсбол» с зеленым цветом не будет рядом с узлами «футбол» и «футбол».

  1. Как я могу сблизить узлы одного цвета в Graphviz; следовательно, образуя кластеры цветов?

Спасибо за всю помощь и дайте мне знать, если вам нужна дополнительная информация :)


person CodeKingPlusPlus    schedule 30.10.2013    source источник


Ответы (1)


Вы можете использовать PyGraphviz для создания макета, используя точку с «кластерами». например

import networkx as nx

G = nx.Graph()
G.add_node(1, color='blue', style='filled')
G.add_node(2, color='red', style='filled')
G.add_edge(1,2)
G.add_node(3, color='blue',style='filled')
G.add_node(4, color='red',style='filled')
G.add_edge(3,4)
G.add_edge(4,10)
G.add_path([10,20,30,40,50])

A = nx.to_agraph(G) # uses pygraphviz
red_nodes = [n for n,d in G.node.items() if d.get('color')=='red']
blue_nodes = [n for n,d in G.node.items() if d.get('color')=='blue']
A.add_subgraph(red_nodes, name = 'cluster1', color='red')
A.add_subgraph(blue_nodes, name = 'cluster2', color='blue')
A.write('colors.dot')
A.layout('dot')
A.draw('colors.png')

введите здесь описание изображения

person Aric    schedule 30.10.2013