2013-06-29 21 views
19

Mam problem z dużą wizualizacją wykresów w pythonie i networkx. Wykres ma być wizualizowany i ma ustawiony rozmiar krawędzi i wierzchołków 215 000. Z dokumentacji (która jest połączona na górze strony) jasno wynika, że ​​networkx obsługuje wykreślanie z matplotlib i GraphViz. W matplotlib i NetworkX rysunku odbywa się w następujący sposób:wizualizacja dużego wykresu z pythonem i networkxem

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

pojawia się błąd pamięci po nx.draw(g), potem normalnie można zrobić plt.show() lub PLT [some_function], aby zapisać plik w formacie do sprawnego i tak dalej. .

Następnie próbowałem GraphViz. Z wikipedia page Formatowanie dot służy do graf skierowany i stworzyłem plik DOT:

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

To działało dobrze i miałem plik kropka w moim bieżącym katalogu, który wynosi 12 megabajtów. Następny wpadłem program dot (część graphviz do tworzenia pliku PostScript):

dot -Tps g.dot -o g.ps 

To spowalnia mój komputer działa przez kilka minut, a następnie wyświetlić Killed w terminalu. Tak więc nigdy nie można było wykonać ... Podczas czytania dokumentacji dla graphviz wydaje się, że obsługiwane były tylko niesądzone wykresy dla dużej wizualizacji grafów.

Pytanie: Z tych dwóch nieudanych próbach ktoś może mi pokazać jak wizualizować mój duży wykres używając Python i NetworkX z około 215.000 i 215.000 wierzchołków krawędzi? Podejrzewam, że tak jak w Graphviz, będę musiał wypisać wyjściowy format pośredni (chociaż nie powinno to być takie trudne, nie będzie tak łatwe jak wbudowana funkcja), a następnie użyć innego narzędzia do odczytu formatu pośredniego, a następnie wyprowadzić wizualizację .

Więc szukam następującym:

  1. wykresie Wyjście z NetworkX do formatu pośredniego
  2. z nowymi pakiet/Oprogramowanie/narzędzia (najlepiej python-interactive) odczytać formatu pośredniego i wizualizację duża wykres

Jeśli potrzebujesz więcej informacji, daj mi znać!

+1

Wyobraź sobie, że udało Ci się stworzyć obraz PostScript tego dużego wykresu. Co chcesz z tym zrobić? Załóżmy, że spędziłeś 10 sekund na każdym węźle. zajmie ci to prawie 25 dni na sprawdzenie całego wykresu. Wydaje mi się, że zamiast wyświetlać całą całość (jako jeden obraz PostScript), potrzebujesz sposobu na "powiększenie" subgraphs of interest. – unutbu

+0

Chciałbym dowiedzieć się, jak wygląda mój wykres. Po tym, jak wpadnę na pomysł, skupię się na podgrafach, klikach, społecznościach ... – CodeKingPlusPlus

Odpowiedz

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 

To odpowiada na twój pierwszy numer. Networkx nie ma możliwości powiększania do węzłów. Użyj Gephi dla tej funkcji. Gephi akceptuje listę krawędzi w formacie CSV i tworzy wizualizację, w której powiększanie można wykonać interaktywnie.

+0

Po prostu użyłem funkcji networkx do zapisania wykresu w formacie edgelistycznym i mogłem go odczytać w Gephi! – CodeKingPlusPlus