Je rencontre des problèmes avec la visualisation de grands graphes dans python et networkx . Le graphique que vous souhaitez visualiser est dirigé et a une taille d'ensemble de bord et de vertex de 215 000. documentation (qui est liée en haut de page), il est clair que networkx prend en charge le traçage avec matplotlib
et GraphViz. Dans matplotlib
et networkx, le dessin se 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 feriez normalement plt.show()
ou plt. [Some_function] pour enregistrer le fichier dans un format efficace et ainsi de suite.
Ensuite, j'ai essayé GraphViz. Depuis la page wikipedia le format dot
est utilisé pour les graphiques dirigés et j'ai créé un fichier de points:
nx.write_dot(g, "g.dot")
Cela a bien fonctionné et j'avais un fichier dot dans mon répertoire actuel qui est de 12 mégaoctets. Ensuite, j'ai exécuté le programme dot
(partie de graphviz pour créer un fichier postscript):
dot -Tps g.dot -o g.ps
Cela ralentit mon ordinateur, fonctionne pendant quelques minutes, puis affiche Killed
dans le terminal. Il n'a donc jamais pu s'exécuter ... Lors de la lecture de la documentation de graphviz, il semble que seuls les graphiques non orienté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 qu'avec Graphviz, je devrai produire dans un format intermédiaire (bien que cela ne devrait pas être si difficile que ce ne sera pas aussi facile qu'une fonction intégrée), puis utiliser un autre outil pour lire l'intermédiaire formater, puis produire une visualisation.
Je recherche donc les éléments suivants:
Si vous avez besoin de plus d'informations, faites-le moi savoir!
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
Cela répond à votre premier problème. Networkx n'a pas la possibilité de zoomer sur les nœuds. Utilisez Gephi pour cette fonctionnalité. Gephi accepte une liste Edge au format CSV et produit une visualisation, où le zoom peut être fait de manière interactive.