Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

pandas plot line segments for each row

I have dataframes with columns containing x,y coordinates for multiple points. One row can consist of several points. I'm trying to find out an easy way to be able to plot lines between each point generating a curve for each row of data.

Here is a simplified example where two lines are represented by two points each.

line1 = {'p1_x':1, 'p1_y':10, 'p2_x':2, 'p2_y':11 }
line2 = {'p1_x':2, 'p1_y':9, 'p2_x':3, 'p2_y':12 }
df = pd.DataFrame([line1,line2])

df.plot(y=['p1_y','p2_y'], x=['p1_x','p2_x'])

when trying to plot them I expect line 1 to start where x=1 and line 2 to start where x=2. Instead, the x axis contains two value-pairs (1,2) and (2,3) and both lines have the same start and end-point in x-axis.

How do I get around this problem?

Edit: If using matplotlib, the following hardcoded values generates the plot i'm interested in plt.plot([[1,2],[2,3]],[[10,9],[11,12]])

like image 478
Dangraf Avatar asked Aug 31 '25 03:08

Dangraf


1 Answers

While I'm sure that there should be a more succinct way using pure pandas, here's a simple approach using matplotlib and some derivatives from the original df.(I hope I understood the question correctly)

Assumption: In df, you place x values in even columns and y values in odd columns

Obtain x values

x = df.loc[:, df.columns[::2]]
x

    p1_x    p2_x
0   1   2
1   2   3

Obtain y values

y = df.loc[:, df.columns[1::2]]
y

    p1_y    p2_y
0   10  11
1   9   12

Then plot using a for loop

for i in range(len(df)):
    plt.plot(x.iloc[i,:], y.iloc[i,:])

enter image description here

like image 187
akilat90 Avatar answered Sep 02 '25 17:09

akilat90