使用Python和networkx进行大图可视化

问题描述 投票:0回答:1

我在使用 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)

我在

nx.draw(g)
之后出现内存错误,之后您通常会执行
plt.show()
或 plt.[some_function] 以高效的格式保存文件,等等。

接下来我尝试了 GraphViz。从 wikipedia 页面

dot
格式用于有向图,我创建了一个点文件:

nx.write_dot(g, "g.dot")

效果很好,我当前目录中有一个 12 MB 的点文件。接下来我运行

dot
程序(graphviz 的一部分,用于创建 postscript 文件):

dot -Tps g.dot -o g.ps

这会减慢我的计算机速度,运行几分钟,然后在终端中显示

Killed
。所以它永远无法执行...在阅读 graphviz 的文档时,大型图形可视化似乎只支持无向图。

问题: 通过这两次不成功的尝试,任何人都可以向我展示如何使用 python 和 networkx 可视化包含大约 215,000 个顶点和 215,000 个边的大图吗?我怀疑与 Graphviz 一样,我必须输出为中间格式(尽管这不应该那么难,但不会像内置函数那么容易),然后使用另一个工具读取中间格式,然后输出可视化.

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

  1. 将网络x的输出图转换为中间格式
  2. 使用新的软件包/软件/工具(最好是Python交互式)读取中间格式并可视化大图

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

python visualization data-visualization networkx
1个回答
30
投票
from matplotlib import pylab
import matplotlib.pyplot as plt
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

这回答了您的第一个问题。 Networkx 没有放大节点的功能。 使用 Gephi 来实现此功能。 Gephi 接受 CSV 格式的边缘列表并生成可视化,其中可以交互地进行缩放。

© www.soinside.com 2019 - 2024. All rights reserved.