Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Plotting lines connecting points

Tags:

matplotlib

I know there is another very similar question, but I could not extract the information I need from it.

plotting lines in pairs

I have 4 points in the (x,y) plane: x=[x1,x2,x3,x4] and y=[y1,y2,y3,y4]

x=[-1 ,0.5 ,1,-0.5] y=[ 0.5,  1, -0.5, -1] 

Now, I can plot the four points by doing:

import matplotlib.pyplot as plt  plt.plot(x,y, 'ro') plt.axis('equal') plt.show() 

But, apart from the four points, I would like to have 2 lines:

1) one connecting (x1,y1) with (x2,y2) and 2) the second one connecting (x3,y3) with (x4,y4).

This is a simple toy example. In the real case I have 2N points in the plane.

How can I get the desired output: for points with two connecting lines ?

Thank you.

like image 486
Mencia Avatar asked Feb 12 '16 13:02

Mencia


People also ask

How do you connect points on a scatter plot?

We can connect scatter plot points with a line by calling show() after we have called both scatter() and plot() , calling plot() with the line and point attributes, and using the keyword zorder to assign the drawing order.


2 Answers

I think you're going to need separate lines for each segment:

import numpy as np import matplotlib.pyplot as plt  x, y = np.random.random(size=(2,10))  for i in range(0, len(x), 2):     plt.plot(x[i:i+2], y[i:i+2], 'ro-')  plt.show() 

(The numpy import is just to set up some random 2x10 sample data)

enter image description here

like image 73
xnx Avatar answered Sep 26 '22 10:09

xnx


You can just pass a list of the two points you want to connect to plt.plot. To make this easily expandable to as many points as you want, you could define a function like so.

import matplotlib.pyplot as plt  x=[-1 ,0.5 ,1,-0.5] y=[ 0.5,  1, -0.5, -1]  plt.plot(x,y, 'ro')  def connectpoints(x,y,p1,p2):     x1, x2 = x[p1], x[p2]     y1, y2 = y[p1], y[p2]     plt.plot([x1,x2],[y1,y2],'k-')  connectpoints(x,y,0,1) connectpoints(x,y,2,3)  plt.axis('equal') plt.show() 

enter image description here

Note, that function is a general function that can connect any two points in your list together.

To expand this to 2N points, assuming you always connect point i to point i+1, we can just put it in a for loop:

import numpy as np for i in np.arange(0,len(x),2):     connectpoints(x,y,i,i+1) 

In that case of always connecting point i to point i+1, you could simply do:

for i in np.arange(0,len(x),2):     plt.plot(x[i:i+2],y[i:i+2],'k-') 
like image 32
tmdavison Avatar answered Sep 22 '22 10:09

tmdavison