Graphviz does a great job of drawing arrows and self loops. (Non-trivial to implement in Matplotlib). Here is an example:
import networkx as nx
import matplotlib.pyplot as plt
G = nx.DiGraph()
G.add_edges_from(\[(0,1), (0,2), (1,1), (1,2)\])
nx.write_dot(G,'graph.dot')
# then run dot -Tpng graph.dot > graph.png