0

嗨,我有一个 3D 列表(我意识到这可能不是我数据的最佳表示,所以这里的任何建议都值得赞赏)如下:

y_data = [ 
         [[a,0],[b,1],[c,None],[d,6],[e,7]],
         [[a,5],[b,2],[c,1],[d,None],[e,1]],
         [[a,3],[b,None],[c,4],[d,9],[e,None]],
         ]

y 轴数据使得每个子列表都是一小时的值列表。小时是 x 轴数据。它的每个子列表都具有以下格式:[label,value]

所以本质上:

line a is [0,5,3] on the y-axis
line b is [1,2,None] on the y-axis etc.

我的 x 数据是:

x_data = [0,1,2,3,4]

现在当我直接绘制这个列表时,即

for i in range(0,5):
    ax.plot(x_data, [row[i][1] for row in y_data], label=y_data[0][i][0])

我得到一个折线图,但是当值为 None 时,未绘制点且未连接线。

我想做的是有一个图表,它将以当前格式绘制我的数据,但忽略缺失点并在缺失数据之前的点和之后的点之间画一条线(即插值缺失点)。

我尝试这样做https://stackoverflow.com/a/14399830/1800665但我无法弄清楚如何为 3D 列表执行此操作。

谢谢你的帮助!

4

1 回答 1

1

您链接到的一般方法在这里可以正常工作;看起来您要问的问题是如何将该方法应用于您的数据。我想建议,通过分解你正在绘制的数据,你会更清楚地看到如何做到这一点。

import numpy as np

y_data = [ 
     [[a,0],[b,1],[c,None],[d,6],[e,7]],
     [[a,5],[b,2],[c,1],[d,None],[e,1]],
     [[a,3],[b,None],[c,4],[d,9],[e,None]],
     ]

x_data = [0, 1, 2, 3, 4]

for i in range(5):
    xv = []
    yv = []
    for j, v in enumerate(row[i][1] for row in y_data):
        if v is not None:
            xv.append(j)
            yv.append(v)
    ax.plot(xv, yv, label=y_data[0][i][0])

在这里,我没有像在链接的问题/答案中那样使用掩码,而是明确地建立了要绘制的有效数据点的列表。

于 2013-08-13T21:47:48.317 回答