 <p>Just plot each segment separately. This also allows for more flexibility as you can independently change the colors, add direction arrows, etc, for each connection.</p> <p>Here, I used a Python dictionary to hold your connectivity info.</p> <pre><code>import matplotlib.pyplot as plt coords = [(0.0, 0.0), (1.0, 1.0), (1.0, 0.0), (2.0, 1.0), (2.0, 0.0), (3.0, 1.0)] connectivity = {0: (1,2), #coords[0] &lt;--&gt; coords[1], coords[2] 1: (0, 2, 3), #coords[1] &lt;--&gt; coords[0], coords[2], coords[3] 2: (0, 1, 4), #coords[2] &lt;--&gt; coords[0], coords[1], coords[4] 3: (1, 3, 5), #coords[3] &lt;--&gt; coords[1], coords[3], coords[5] 4: (2, 3, 5), #coords[4] &lt;--&gt; coords[2], coords[3], coords[5] 5: (3, 4) #coords[5] &lt;--&gt; coords[3], coords[4] } x, y = zip(*coords) plt.plot(x, y, 'o') # plot the points alone for k, v in connectivity.iteritems(): for i in v: # plot each connections x, y = zip(coords[k], coords[i]) plt.plot(x, y, 'r') plt.show() </code></pre> <p><a href="https://i.stack.imgur.com/EUIBv.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/EUIBv.png" alt="enter image description here"></a></p> <p>There are duplicate lines here based on how you presented the connectivity, for example, <code>(0,1)</code> and <code>(1,0)</code>. I'm assuming that you'll eventually want to put in the direction, so I left them in.</p>