2012-11-29 2 views
6

NetworkX inclut functions pour dessiner un graphique en utilisant matplotlib. Ceci est un exemple en utilisant le grand Notebook IPython (en commençant avec ipython3 notebook --pylab inline):Comment changer les attributs d'un dessin graphique networkx/matplotlib?

enter image description here

Nice, pour commencer. Mais comment puis-je influencer les attributs du dessin, comme la coloration, la largeur de ligne et l'étiquetage? Je n'ai pas travaillé avec matplotlib avant.

+0

http: // networkx.lanl.gov/reference/drawing.html - vous voulez les fonctions 'draw_networkx_edges' et' draw_networkx_nodes' – job

Répondre

11

IPython est un excellent outil pour découvrir ce que les fonctions (et les objets) peuvent faire. Si vous tapez

[1]: import networkx as nx 
[2]: nx.draw? 

vous voyez

Définition: nx.draw (G, pos = Aucun, ax = Aucun, maintenez = Aucun, ** kwds)

**kwds: optional keywords 
    See networkx.draw_networkx() for a description of optional keywords. 

Et si vous tapez donc

vous allez voir

node_color: color string, or array of floats 
edge_color: color string, or array of floats 
width: float 
    Line width of edges (default =1.0) 
labels: dictionary 
    Node labels in a dictionary keyed by node of text labels (default=None) 

Armé de ces informations, et un peu d'expérimentation, il est difficile de ne pas arriver à:

import matplotlib.pyplot as plt 
import numpy as np 
import networkx as nx 
import string 

G = nx.generators.erdos_renyi_graph(18, 0.2) 
nx.draw(G, 
     node_color = np.linspace(0,1,len(G.nodes())), 
     edge_color = np.linspace(0,1,len(G.edges())), 
     width = 3.0, 
     labels = {n:l for n,l in zip(G.nodes(),string.ascii_uppercase)} 
     ) 
plt.show() 

qui donne

enter image description here

+1

Merci. Je vais devoir expérimenter avec ça. Je suis particulièrement intéressé par la mise en correspondance des poids de bord et des largeurs de ligne. – clstaudt

+3

Pour avoir des largeurs de ligne variables, je pense que vous devriez appeler 'nx.draw_networkx_edges' une fois pour chaque largeur. Voir [ici] (http://networkx.lanl.gov/examples/drawing/weighted_graph.html) pour un exemple. Là, ils changent le style de ligne, mais il montre où vous pouvez également changer la largeur. – unutbu

+0

Super, que vous n'avez pas seulement répondu à la question, mais expliqué comment obtenir la réponse. – Lukas