visualisation de grands graphiques avec python et networkx

j'ai des problèmes avec la visualisation des grands graphes en python et networkx. Le graphe est souhaité visualiser est dirigé, et a un bord et la taille de vertex réglée de 215 000 à partir de la documenation (qui est liée à la page supérieure) il est clair que networkx soutient le pointage avec matplotlib et GraphViz. matplotlib et networkx le dessin est fait comme suit:

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

j'obtiens une erreur de mémoire après nx.draw(g), ensuite vous le feriez normalement plt.show() ou plt.[une_fonction] pour enregistrer le fichier dans un format efficace et ainsi de suite.

ensuite j'ai essayé GraphViz. À partir de la page de wikipédiadot format est utilisé pour les graphes orientés et j'ai créé un point de fichier:

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

cela a bien fonctionné et j'avais un fichier de points dans mon répertoire courant qui est de 12 mégaoctets. Ensuite j'ai couru le dot programme (partie de graphviz pour créer un fichier postscript):

dot -Tps g.dot -o g.ps

cela ralentit mon ordinateur, court pour un quelques minutes et ensuite afficher Killed dans le terminal. Donc, il n'a jamais pu s'exécuter... Lors de la lecture de la documentation pour graphviz, il semble que seuls les graphiques non dirigés ont été pris en charge pour la visualisation de grands graphiques.

Question: Avec ces deux tentatives infructueuses, quelqu'un peut-il me montrer comment visualiser mon grand graphique en utilisant python et networkx avec environ 215 000 sommets et 215 000 arêtes? Je soupçonne que comme avec Graphviz je vais devoir sortir dans un format intermédiaire (bien que cela ne devrait pas être si difficile que ça, ce ne sera pas aussi simple qu'une fonction intégrée) et ensuite utiliser un autre outil pour lire le format intermédiaire et ensuite afficher une visualisation.

donc, je cherche ce qui suit:

  1. graphique de sortie de networkx dans un format intermédiaire
  2. avec un nouveau paquet / logiciel / outil (idéalement python-interactive) lire le format intermédiaire et visualiser le grand graphique

Si vous avez besoin de plus d'informations laissez-moi savoir!

23
demandé sur Jason Sundram 2013-06-29 18:04:07

1 réponses

 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

ceci répond à votre premier numéro. Networkx n'a pas la possibilité de zoomer sur les nœuds. Utilisez Gephi pour cette fonctionnalité. Gephi accepte une liste de bord au format CSV et produit une visualisation, où le zoom peut être fait de manière interactive.

15
répondu Vikram 2013-06-30 08:44:32