2015-05-05 4 views
2

У меня возникла проблема при попытке построить график со многими узлами с помощью NetworkX и graphviz_layout. Более конкретно, аргументы, которые передаются в nx.graphviz_layout, вообще не помогают. К нему прилагается код я использую:NetworkX graphviz_layout не работает?

G=some_graph() 

import matplotlib.pyplot as plt 
plt.figure(figsize=(32,32)) 

# use graphviz to find radial layout 
pos=nx.graphviz_layout(G,prog="dot", 
         root=1000, 
         args='-splines=true -nodesep=0.6 -overlap=scalexy' 
         ) 

nx.draw(G,pos, 
     with_labels=True, 
     alpha=0.5, 
     node_size=600, 
     font_size=10 
     ) 

plt.savefig("imagenet_layout.png") 

Независимо от того, как я изменить «арг» в nx.graphviz_layout, выходное изображение не будет таким же, и все узлы, перекрываются друг с другом. Может ли кто-нибудь помочь мне в этом? Благодаря!

+0

'G = some_graph()' недостаточно, чтобы мы могли воспроизвести вашу проблему. Можете ли вы дать график, который имеет эту проблему, или, по крайней мере, рассказать нам о свойствах вашего 'G'? – Joel

ответ

0

Мое чтение documentation для pygraphviz предполагает, что overlap не работает с dot.

Для nodesep:

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

Непонятно, существуют ли перекрытия, которые вы наблюдаете, между узлами в одном ранге или между рядами. Если это только между рангами, вы можете изменить ranksep.

Я вижу, что вы устанавливаете позиции, а затем вы устанавливаете nodeize, и вы делаете node_size немного больше, чем значение по умолчанию (600 против 300). Так как он не знает, что node_size вы собираетесь использовать, когда найдет pos, использование достаточно большого количества node_size приведет к перекрытию.

Поэтому я бы рекомендовал установить node_size по умолчанию, и если перекрытие остается, установка node_size будет меньше. Если у вас возникли проблемы с интервалом между или внутри ранга, то играйте с ranksep и nodesep.

-1
  1. О «перекрытии», вы имеете в виду, что есть узлы, выведенные в последний раз в текущем выходе? Если да, добавьте «plt.clf()"after"plt.savefig(****)»!
  2. О node_size, по умолчанию 300, но блок не указан в документе. Я тоже использую networkx в эти дни, вы можете сказать мне блок, если вы это знаете?
Смежные вопросы