Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to change attributes of a networkx / matplotlib graph drawing?

NetworkX includes functions for drawing a graph using matplotlib. This is an example using the great IPython Notebook (started with ipython3 notebook --pylab inline):

enter image description here

Nice, for a start. But how can I influence attributes of the drawing, like coloring, line width and labelling? I have not worked with matplotlib before.

like image 456
clstaudt Avatar asked Nov 29 '12 17:11

clstaudt


1 Answers

IPython is a great tool for finding out what functions (and objects) can do. If you type

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

you see

Definition: nx.draw(G, pos=None, ax=None, hold=None, **kwds)

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

And if you therefore type

[10]: nx.draw_networkx?

you will see

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)

So, armed with this information, and a bit of experimentation, it is not hard to arrive at:

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

which yields

enter image description here

like image 60
unutbu Avatar answered Sep 20 '22 23:09

unutbu