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.
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.
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)
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()
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-')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With