2013-06-29 3 views
19

파이썬에서 큰 그래프 시각화 및 networkx에 문제가 있습니다. 그래프가 시각화되고 215,000의 가장자리와 정점 집합 크기를 가짐 문서 (최상위 페이지에 링크되어 있음)에서 networkx가 matplotlib 및 GraphViz로 플로팅을 지원한다는 것은 분명합니다. 파이썬과 네트워크 x로 큰 그래프 시각화

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] 등 효율적이고의 형식으로 파일을 저장하려면 다음과 같이 matplotlib 및 networkx 도면에서 이루어집니다. .

다음으로 GraphViz를 시도했습니다. wikipedia page부터 dot 형식은 유향 그래프에 사용 나는 점 파일이 생성됩니다

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

이 잘 작동을하고 난 12 메가 바이트 내 현재의 디렉토리에 도트 파일을했다. 이것은 내 컴퓨터 속도가 느려집니다

dot -Tps g.dot -o g.ps 

, 몇 분 동안 실행 한 후 터미널에서 Killed을 표시 : 다음 나는 dot 프로그램 (포스트 스크립트 파일을 만들은 GraphVIZ의 일부)를 달렸다. 그래서 결코 실행할 수 없었습니다 ... graphviz에 대한 문서를 읽는 동안 큰 그래프 시각화를 위해 무향 그래프 만 지원되었습니다.

질문 :이 두 실패한 시도와 사람이 방법에 대한 215000 정점과 215,000 가장자리 파이썬과 networkx를 사용하여 내 큰 그래프를 시각화하는 저를 보일 수 있는가? Graphviz에서 중간 형식으로 출력해야한다고 생각합니다. (그렇게 어렵지는 않지만 내장 함수만큼 쉽지는 않을 것입니다.) 다른 도구를 사용하여 중간 형식을 읽은 다음 시각화를 출력하십시오. .

그래서, 나는 다음을 찾고 : 새로운 패키지/소프트웨어/도구와 중간 형식

  • 에 networkx에서

    1. 출력 그래프 (이상적으로 파이썬 대화 형) 중간 형식을 읽고 큰 시각화 그래프

    자세한 정보가 필요하면 알려주십시오.

  • +1

    이 큰 그래프의 포스트 스크립트 이미지를 만드는 데 성공했다고 상상해보십시오. 너는 그걸로 무엇을 할 것인가? 10 초 동안 각 노드를 보았다고 가정 해보십시오. 전체 그래프를 검사하는 데 약 25 일이 소요됩니다. 관심있는 하위 그래프를 "확대"할 수있는 방법이 필요합니다. – unutbu

    +0

    내 그래프가 어떻게 생겼는지 생각해보고 싶습니다. 아이디어가 나온 후에 하위 그래프, 클릭, 커뮤니티에 집중할 것입니다. – CodeKingPlusPlus

    답변

    14
    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 
    

    이것은 첫 번째 문제에 대한 답변입니다. Networkx에는 노드를 확대 할 수있는 기능이 없습니다. 이 기능을 사용하려면 Gephi를 사용하십시오. Gephi는 CSV 형식의 가장자리 목록을 허용하고 대화 형으로 확대/축소를 수행 할 수있는 시각화 기능을 제공합니다.

    +0

    방금 ​​edgelist 형식으로 그래프를 저장하기 위해 networkx 함수를 사용하여 Gephi로 읽을 수있었습니다! – CodeKingPlusPlus