wizualizacja dużych Wykresów za pomocą Pythona i networkx

Mam problem z wizualizacją dużych Wykresów w Pythonie i networkx. Wykres jest skierowany do wizualizacji i ma ustawiony rozmiar krawędzi i wierzchołków 215.000 od dokumentu (który jest połączony na górnej stronie) jest jasne, że networkx obsługuje plotowanie za pomocą matplotlib i GraphViz. W matplotlib i networkx rysowanie odbywa się w następujący sposób:

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

Dostaję błąd pamięci po nx.draw(g), potem normalnie byś zrobił plt.show() lub plt.[some_function] aby zapisać plik w formacie umożliwiającym sprawne i tak dalej.

Następnie próbowałem GraphViz. Ze strony Wikipedii format dot jest używany dla Wykresów kierowanych i utworzyłem plik dot:

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

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

dot -Tps g.dot -o g.ps

To Spowalnia mój komputer, uruchamia się przez kilka minut, a następnie wyświetla Killed w terminalu. Więc nigdy nie mogło wykonać... Podczas czytania dokumentacji dla graphviz wydaje się, że tylko nieskierowane wykresy były obsługiwane dla dużych wizualizacji Wykresów.

Pytanie : Czy przy tych dwóch nieudanych próbach ktoś może mi pokazać, jak wizualizować mój duży Wykres za pomocą Pythona i networkx z około 215 000 wierzchołków i 215 000 krawędzi? Podejrzewam, że podobnie jak w przypadku Graphviz będę musiał wyjść do formatu pośredniego (choć nie powinno to być takie trudne, nie będzie to takie proste jak wbudowana funkcja) i następnie użyj innego narzędzia, aby odczytać format pośredni, a następnie wydrukować wizualizację.

Więc szukam:

  1. Wykres wyjściowy z networkx do formatu pośredniego
  2. z nowym pakietem / oprogramowaniem / narzędziem (najlepiej python-interactive) odczytaj pośredni format i wizualizuj duży Wykres

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

Author: Jason Sundram, 2013-06-29

1 answers

 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 odpowiedź na twój pierwszy numer. Networkx nie ma możliwości powiększania węzłów. Użyj Gephi do tej funkcji. Gephi akceptuje listę krawędzi w formacie CSV i tworzy wizualizację, w której można interaktywnie powiększać.

 15
Author: Vikram,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-30 08:44:32