首页 > 解决方案 > 循环遍历数据框中的数组并按组绘制

问题描述

我有一个包含 X 和 Y 位置数据的数据框,并且有 3 个分组变量:

  1. obsScenario(0、1 或 2)
  2. startPos (1 或 2)
  3. 目标位置(1、2 或 3)。

因此,这些分组变量有 18 种组合:3 x 2 x 3

每个参与者的 X 和 Y 数据长度约为 300-500 个数据点(它会有所不同)。

数据框如下所示:

              X         Y  participantNum  obsScenario  startPos  targetPos
0    -16.000000  5.000000         6432024            0         1          1
1    -16.000000  5.000000         6432024            0         1          1
2    -15.833450  5.000000         6432024            0         1          1
3    -15.667200  5.000000         6432024            0         1          1
4    -15.500100  5.000000         6432024            0         1          1
        ...       ...             ...          ...       ...        ...
2185  -1.572058 -3.982638         7830381            2         2          2
2186  -1.406996 -3.958967         7830381            2         2          2
2187  -1.242231 -3.935339         7830381            2         2          2
2188  -1.077516 -3.911718         7830381            2         2          2
2189  -0.912604 -3.888069         7830381            2         2          2

我需要为这 18 种组合中的每一种分别绘制 X、Y 数据。

我试图使用这样的东西,但这只是在同一个图上绘制所有 XY 轨迹:

for aid, grp in df.groupby(['obsScenario', 'startPos', 'targetPos']):
    plt.plot(grp[0].values, grp[1].values) 
plt.show() 

并且使用这样的东西不会考虑分组变量的不同组合:

fig, axs = plt.subplots(nrows=3, ncols=6)

for ax in axs.flat:
    plotxy(ax,x,y)

标签: pythonpandasdataframenumpymatplotlib

解决方案


这就是我想要的:

fig, axs = plt.subplots(6,3)
grp = df.groupby(['obsScenario', 'startPos', 'targetPos'])
for (name, df), ax in zip(grp, axs.flat):
    df.plot(x='X',y='Y', ax=ax)

推荐阅读