使用python和networkx进行大图形可视化

Cod*_*lus 30 python visualization data-visualization networkx

我在python和networkx中遇到大图形可视化问题.图形希望可视化是有向的,并且边缘和顶点集大小为215,000.从文档(在首页链接)可以清楚地看出,networkx支持使用matplotlib和GraphViz进行绘图.在matplotlib和networkx中,绘图完成如下:

import 
networkx as nx
import matplotlib.pyplot as plt
#Let g be a graph that I created
nx.draw(g)
Run Code Online (Sandbox Code Playgroud)

之后我会收到一个内存错误nx.draw(g),之后您通常会执行plt.show()或尝试[some_function]以高效等格式保存文件.

接下来我尝试了GraphViz.从维基百科页面,dot格式用于有向图,我创建了一个点文件:

nx.write_dot(g, "g.dot")
Run Code Online (Sandbox Code Playgroud)

这很好用,我在当前目录中有一个12兆字节的点文件.接下来我运行dot程序(graphviz的一部分来创建postscript文件):

dot -Tps g.dot -o g.ps
Run Code Online (Sandbox Code Playgroud)

这会减慢我的电脑速度,运行几分钟然后显示Killed在终端中.因此它永远无法执行......在阅读graphviz的文档时,似乎只有无向图才能支持大图形可视化.

问题:有了这两个不成功的尝试,任何人都可以告诉我如何使用python和networkx可视化我的大图,大约215,000个顶点和215,000个边缘?我怀疑与Graphviz一样,我必须输出一个中间格式(虽然这不应该那么难,它不会像内置函数那么容易)然后使用另一个工具来读取中间格式然后输出一个可视化.

所以,我正在寻找以下内容:

  1. 从networkx输出图形为中间格式
  2. 使用新的软件包/软件/工具(理想情况下是python-interactive)读取中间格式并可视化大图

如果您需要更多信息,请告诉我们!

Vik*_*ram 20

 from matplotlib import pylab
 import networkx as nx

 def save_graph(graph,file_name):
    #initialze Figure
    plt.figure(num=None, figsize=(20, 20), dpi=80)
    plt.axis('off')
    fig = plt.figure(1)
    pos = nx.spring_layout(graph)
    nx.draw_networkx_nodes(graph,pos)
    nx.draw_networkx_edges(graph,pos)
    nx.draw_networkx_labels(graph,pos)

    cut = 1.00
    xmax = cut * max(xx for xx, yy in pos.values())
    ymax = cut * max(yy for xx, yy in pos.values())
    plt.xlim(0, xmax)
    plt.ylim(0, ymax)

    plt.savefig(file_name,bbox_inches="tight")
    pylab.close()
    del fig

#Assuming that the graph g has nodes and edges entered
save_graph(g,"my_graph.pdf")

#it can also be saved in .svg, .png. or .ps formats
Run Code Online (Sandbox Code Playgroud)

这回答了你的第一个问题.Networkx无法放大节点.使用Gephi实现此功能.Gephi接受CSV格式的边缘列表并生成可视化,其中缩放可以交互方式完成.