NetworkX graphviz_layout无效?

时间:2015-05-05 01:00:25

标签: python graphviz networkx pygraphviz

尝试使用NetworkX和graphviz_layout绘制包含许多节点的图表时遇到问题。更具体地说,传递给nx.graphviz_layout的参数根本没有帮助。附件是我使用的代码:

SELECT * FROM config_modi_ord WHERE Start_date < End_date

无论我如何改变&#34; args&#34;在nx.graphviz_layout中,输出图像将是相同的,并且所有节点彼此重叠。有人可以帮帮我吗?谢谢!

3 个答案:

答案 0 :(得分:1)

对我来说,为了给b+1使用args,您需要使用格式'-G'+'argsname = x'。我在示例中注意到,它们给docs的arg epsilon为prog。所以我尝试了如下所示的模式。我只是在参数前面添加了G。现在,这些参数根据您使用的编程序而有很大不同,因此,您一定要对要完成的操作使用“点”。您可以查看所有可能的参数以及它们如何与每个G.draw(‘test.ps’,prog=’twopi’,args=’-Gepsilon=1’) here一起使用。对于我的海豚,我需要将nodeep = 0.01。

prog

这里是带有代码和不带有args的代码的比较。首先没有参数。

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='-Gsplines=true -Gnodesep=0.6 -Goverlap=scalexy'
                       )

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

plt.savefig("imagenet_layout.png")

No args figure

带有参数

A = nx.nx_agraph.to_agraph(G)        # convert to a graphviz graph
A.layout(prog='neato')            # neato layout
#A.draw('test3.pdf')

A.draw('test3.png' )     

Figure using dot with args

因此,一旦我使参数工作,您就可以看到图像有所不同。

答案 1 :(得分:0)

我对pygraphviz的documentation的阅读表明overlap不适用于dot

nodesep

  

在dot中,它指定相同等级中两个相邻节点之间的最小间距(以英寸为单位)。

目前尚不清楚您正在观察的重叠是在相同等级的节点之间还是在等级之间。如果它只是在排名之间,您可能想要修改ranksep

我确实看到你正在设置位置,然后你设置了nodesize,你使node_size比默认值大得多(600 vs 300)。由于它在找到node_size时不知道您要使用的pos,因此使用足够大的node_size会导致重叠。

因此,我建议将node_size设置为默认值,如果仍有重叠,则将node_size设置为较小。如果您在排名之间或排名之间的问题不成比例,那么请使用ranksepnodesep

答案 2 :(得分:-1)

  1. 关于“重叠”,您的意思是上次在当前输出中绘制了节点吗?如果是,请添加&#34; plt.clf()"after"plt.savefig(****)&#34;!
  2. 关于node_size,默认值为300,但文档中未给出该单位。我这些天也在使用networkx,如果你知道的话,你能告诉我这个单位吗?