For example edge labels can be added using matplotlib "text" objects like this: import networkx as nx import pylab as plot K=nx.XGraph(name="Konigsberg", multiedges=True, selfloops=False) K.add_edges_from([("A","B","Honey Bridge"), ("A","B","Blacksmith's Bridge"), ("A","C","Green Bridge"), ("A","C","Connecting Bridge"), ("A","D","Merchant's Bridge"), ("C","D","High Bridge"), ("B","D","Wooden Bridge")]) pos=nx.spring_layout(K) nx.draw_nx(K,pos) xa,ya=pos['A'] xb,yb=pos['B'] plot.text((xa+xb)/2,(ya+yb)/2,"Blacksmith's Bridge") plot.show() With a little work you can get the label rotated and exactly how you want it positioned. You can also set the node positions directly in the "pos" dictionary above.