2012-11-29 17 views
6

NetworkX zawiera functions do rysowania wykresu przy użyciu matplotlib. To jest przykład przy użyciu wielkiego Notebook ipython (rozpoczęte z ipython3 notebook --pylab inline):Jak zmienić atrybuty rysunku sieciowego networkx/matplotlib?

enter image description here

Nicea, na początek. Ale jak mogę wpływać na atrybuty rysunku, takie jak kolorowanie, szerokość linii i etykietowanie? Nie pracowałem wcześniej z matplotlib.

+0

http: // networkx.lanl.gov/reference/drawing.html - potrzebujesz funkcji 'draw_networkx_edges' i' draw_networkx_nodes'. – job

Odpowiedz

11

IPython to doskonałe narzędzie do wyszukiwania funkcji (i obiektów). Jeśli wpiszesz

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

widać

Definicja: nx.draw (G, pos = None, ax = None, przytrzymaj = None, ** kwds)

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

A jeśli zatem wpiszemy

[10]: nx.draw_networkx? 

będziesz zobacz

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) 

Tak, uzbrojony w te informacje, i trochę eksperymentów, to nie jest trudne do osiągnięcia:

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() 

co daje

enter image description here

+1

Dzięki. Będę musiał z tym eksperymentować. Szczególnie interesuje mnie odwzorowywanie grubości krawędzi do szerokości linii. – clstaudt

+3

Aby mieć zmienną szerokość linii, myślę, że musisz wywołać 'nx.draw_networkx_edges' raz dla każdej szerokości. Zobacz przykład [tutaj] (http://networkx.lanl.gov/examples/drawing/weighted_graph.html). Tam zmieniają styl linii, ale pokazuje ona, gdzie można również zmienić szerokość. – unutbu

+0

Wspaniale, że nie tylko odpowiedziałeś na pytanie, ale wyjaśniłeś, jak uzyskać odpowiedź. – Lukas