pandas为每一行绘制线段

时间:2017-12-06 14:33:49

标签: python pandas matplotlib

我的数据框的列包含多个点的x,y坐标。一行可以包含几个点。 我试图找到一种简单的方法,能够在每个点之间绘制线条,为每行数据生成一条曲线。

这是一个简化的例子,其中两行分别由两个点表示。

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'])

当试图绘制它们时,我希望第1行从x = 1开始,第2行从x = 2开始。 相反,x轴包含两个值对(1,2)和(2,3),并且两条线在x轴上具有相同的起点和终点。

如何解决这个问题?

编辑: 如果使用matplotlib,以下硬编码值将生成我感兴趣的图     plt.plot([[1,2],[2,3]],[[10,9],[11,12]])

2 个答案:

答案 0 :(得分:1)

虽然我确信使用纯大熊猫应该有更简洁的方法,但这是使用matplotlib和原始df的一些衍生物的简单方法。(我希望我能正确理解这个问题) )

假设:在df中,您将x值放在偶数列中,将y值放在奇数列中

获取x

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

    p1_x    p2_x
0   1   2
1   2   3

获取y

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

    p1_y    p2_y
0   10  11
1   9   12

然后使用for循环绘制

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

enter image description here

答案 1 :(得分:0)

我通常不使用pandas绘图,因为我觉得它相当有限,如果使用matplotlib不是问题,下面的代码可以工作:

from matplotlib import pyplot as plt
plt.plot(df.p1_x,df.p1_y)
plt.plot(df.p2_x,df.p2_y)
plt.plot()

如果有很多线要绘制,你可以使用for循环。