To create line segments between two points in matplotlib, we can take the following steps
- Set the figure size and adjust the padding between and around the subplots.
- To make two points, create two lists.
- Extract x and y values from point1 and point2.
- Plot x and y values using plot[] method.
- Place text for both the points.
- To display the figure, use show[] method.
Example
import matplotlib.pyplot as plt plt.rcParams["figure.figsize"] = [7.50, 3.50] plt.rcParams["figure.autolayout"] = True point1 = [1, 2] point2 = [3, 4] x_values = [point1[0], point2[0]] y_values = [point1[1], point2[1]] plt.plot[x_values, y_values, 'bo', linestyle="--"] plt.text[point1[0]-0.015, point1[1]+0.25, "Point1"] plt.text[point2[0]-0.050, point2[1]-0.25, "Point2"] plt.show[]
Output
Updated on 02-Jun-2021 08:39:05
- Related Questions & Answers
- How do I find the intersection of two line segments in Matplotlib?
- Check if two line segments intersect
- Shading an area between two points in a Matplotlib plot
- How do you create a legend for a contour plot in Matplotlib?
- Draw a curve connecting two points instead of a straight line in matplotlib
- How do you improve Matplotlib image quality?
- How do you add two lists in Java?
- Number of Integral Points between Two Points in C++
- How do you create nested dict in Python?
- How do you create a list in Java?
- How to create a line chart using Matplotlib?
- How do you OR two MySQL LIKE statements?
- How do you pass a command line argument in Java program?
- How do you create a clickable Tkinter Label?
- How do you create an empty list in Java?
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.
8-Bit Borges
9,17925 gold badges85 silver badges168 bronze badges
asked Feb 12, 2016 at 13:08
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]
answered Feb 12, 2016 at 13:23
xnxxnx
23.5k9 gold badges65 silver badges104 bronze badges
2
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-']
answered Feb 12, 2016 at 13:21
tmdavisontmdavison
59.8k12 gold badges167 silver badges150 bronze badges
1
I realize this question was asked and answered a long time ago, but the answers don't give what I feel is the simplest solution. It's almost always a good idea to avoid loops whenever possible, and matplotlib's plot
is capable of plotting multiple lines with one command. If x
and y
are arrays, then plot
draws one line for every column.
In your case, you can do the following:
x=np.array[[-1 ,0.5 ,1,-0.5]]
xx = np.vstack[[x[[0,2]],x[[1,3]]]]
y=np.array[[ 0.5, 1, -0.5, -1]]
yy = np.vstack[[y[[0,2]],y[[1,3]]]]
plt.plot[xx,yy, '-o']
Have a long list of x's and y's, and want to connect adjacent pairs?
xx = np.vstack[[x[0::2],x[1::2]]]
yy = np.vstack[[y[0::2],y[1::2]]]
Want a specified [different] color for the dots and the lines?
plt.plot[xx,yy, '-ok', mfc='C1', mec='C1']
answered May 28, 2020 at 20:49
JinjerJohnJinjerJohn
3432 silver badges5 bronze badges
1
Use the matplotlib.arrow[] function and set the parameters head_length and head_width to zero to don't get an "arrow-end". The connections between the different points can be simply calculated using vector addition with: A = [1,2], B=[3,4] --> Connection between A and B is B-A = [2,2]. Drawing this vector starting at the tip of A ends at the tip of B.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import style
style.use['fivethirtyeight']
A = np.array[[[10,8],[1,2],[7,5],[3,5],[7,6],[8,7],[9,9],[4,5],[6,5],[6,8]]]
fig = plt.figure[figsize=[10,10]]
ax0 = fig.add_subplot[212]
ax0.scatter[A[:,0],A[:,1]]
ax0.arrow[A[0][0],A[0][1],A[1][0]-A[0][0],A[1][1]-A[0][1],width=0.02,color='red',head_length=0.0,head_width=0.0]
ax0.arrow[A[2][0],A[2][1],A[9][0]-A[2][0],A[9][1]-A[2][1],width=0.02,color='red',head_length=0.0,head_width=0.0]
ax0.arrow[A[4][0],A[4][1],A[6][0]-A[4][0],A[6][1]-A[4][1],width=0.02,color='red',head_length=0.0,head_width=0.0]
plt.show[]
answered May 24, 2018 at 12:55
2Obe2Obe
3,3025 gold badges27 silver badges52 bronze badges
With the code below you can create multiple lines by connecting points thanks to their coordinates :
import matplotlib.pyplot as plt
# 1st line
point_1 = [1,3]
point_2 = [2,6]
# 2nd line
point_3 = [4,6]
point_4 = [1,2]
x_values = [[point_1[0], point_3[0]],[point_2[0], point_4[0]]]
y_values = [[point_1[1], point_3[1]],[point_2[1], point_4[1]]]
plt.plot[x_values, y_values, 'red']
plt.show[]
Result
answered Jan 30 at 0:02
Julien JmJulien Jm
1,9802 gold badges19 silver badges26 bronze badges
I would prefer LineCollection
in matplotlib. See following minimum code:
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
x = np.arange[100]
# Here are many sets of y to plot vs. x
ys = x[:50, np.newaxis] + x[np.newaxis, :]
segs = np.zeros[[50, 100, 2]]
segs[:, :, 1] = ys
segs[:, :, 0] = x
# We need to set the plot limits.
fig, ax = plt.subplots[1, 1, figsize=[7.2, 7.2]]
ax.set_xlim[x.min[], x.max[]]
ax.set_ylim[ys.min[], ys.max[]]
line_segments = LineCollection[segs]
ax.add_collection[line_segments]
A more detailed example can be found here.
answered Sep 11, 2021 at 1:48
JiadongJiadong
1,46413 silver badges32 bronze badges