Python NetworkX图形布局不工作?

Python NetworkX图形布局不工作?,python,graphviz,networkx,pygraphviz,Python,Graphviz,Networkx,Pygraphviz,我在尝试使用NetworkX和graphviz_布局绘制具有多个节点的图形时遇到了一个问题。更具体地说,传递到nx.graphviz_布局中的参数根本没有帮助。附件是我使用的代码: 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",

我在尝试使用NetworkX和graphviz_布局绘制具有多个节点的图形时遇到了一个问题。更具体地说,传递到nx.graphviz_布局中的参数根本没有帮助。附件是我使用的代码:

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_布局中的“args”,输出图像都是相同的,并且所有节点彼此重叠。有人能帮我吗?谢谢

我对for pygraphviz的阅读表明,
重叠
不适用于

对于
nodesep

以点为单位,指定同一列中两个相邻节点之间的最小间距(以英寸为单位)

不清楚您观察到的重叠是在同一列中的节点之间还是在列之间。如果只是在列组之间,您可能需要修改
ranksep

我确实看到您正在设置位置,然后设置了节点大小,并且使
node\u size
比默认值(600 vs 300)大很多。由于它不知道在找到
pos
时要使用的
节点大小,因此使用足够大的
节点大小将导致重叠

因此,我建议将
node\u size
设置为默认值,如果重叠仍然存在,则将
node\u size
设置为更小。如果您遇到职级间或职级内分离比例失调的问题,请使用
ranksep
nodesep

  • 关于“重叠”,您的意思是在当前输出中有上次绘制的节点吗?如果是,请在“plt.savefig(****)
  • ”之后添加“
    plt.clf()”
    
  • 关于节点大小,默认值为300,但文档中未给出单位。我最近也在使用networkx,如果你知道的话,你能告诉我单位吗

  • 对我来说,为了给
    prog
    提供args,您需要使用格式'-G'+'argsname=x'。我注意到在这个例子中,他们给出了argε作为
    G.draw('test.ps',prog='twopi',args='-Gepsilon=1')
    。因此,我尝试了如下所示的模式。我只是在参数前面加了G。现在,这些参数根据您使用的程序有很大的不同,所以您肯定希望使用“点”来完成您想要完成的任务。您可以看到所有可能的参数以及它们如何与每个
    prog
    一起工作。对于我的海豚,我需要nodesep=0.01

    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")
    
    下面是有参数和没有参数以及代码的图形的比较。首先没有ARG

    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' )     
    

    用args

    A = nx.nx_agraph.to_agraph(G)        # convert to a graphviz graph
    A.layout(prog='dot')            # neato layout
    #A.draw('test3.pdf')
    
    A.draw('test3.png',args='-Gnodesep=0.01 -Gfont_size=1', prog='dot' )  
    

    因此,在我让args工作后,您可以看到图像是不同的。

    G=some_graph()
    不足以让我们重现您的问题。你能给出一个有这个问题的图表,或者至少告诉我们你的
    G
    的属性吗?