This project is archived. Current development moved to GitLab:
https://gitlab.com/rgarcia-herrera/pyveplot
A nice way of visualizing complex networks are Hiveplots.
This library uses svgwrite to programmatically create images like this one:
Create a plot from a network, randomly selecting whichever axis to place 50 nodes.:
from pyveplot import *
import networkx, random
# a network
g = networkx.barabasi_albert_graph(50, 2)
# our hiveplot object
h = Hiveplot( 'short_example.svg')
# start end
axis0 = Axis( (200,200), (200,100), stroke="grey")
axis1 = Axis( (200,200), (300,300), stroke="blue")
axis2 = Axis( (200,200), (10,310), stroke="black")
h.axes = [ axis0, axis1, axis2 ]
# randomly distribute nodes in axes
for n in g.nodes():
node = Node(n)
random.choice( h.axes ).add_node( node, random.random() )
for e in g.edges():
if (e[0] in axis0.nodes) and (e[1] in axis1.nodes): # edges from axis0 to axis1
h.connect(axis0, e[0], 45,
axis1, e[1], -45,
stroke_width='0.34', stroke_opacity='0.4',
stroke='purple')
elif (e[0] in axis0.nodes) and (e[1] in axis2.nodes): # edges from axis0 to axis2
h.connect(axis0, e[0], -45,
axis2, e[1], 45,
stroke_width='0.34', stroke_opacity='0.4',
stroke='red')
elif (e[0] in axis1.nodes) and (e[1] in axis2.nodes): # edges from axis1 to axis2
h.connect(axis1, e[0], 15,
axis2, e[1], -15,
stroke_width='0.34', stroke_opacity='0.4',
stroke='magenta')
h.save()
The more elaborate example.py shows how to use shapes for nodes, placement of the control points and attributes of edges, and the attributes of axes.
Install library, perhaps within a virtualenv:
$ pip install pyveplot