【问题标题】:Plot missing points for complicated 3D list of points - Python为复杂的 3D 点列表绘制缺失点 - Python
【发布时间】:2013-08-13 21:06:10
【问题描述】:

您好,我有一个 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 轴数据。它的每个子列表都具有以下格式: [标签,值]

所以本质上:

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 列表做这个。

感谢您的帮助!

【问题讨论】:

    标签: python list matplotlib missing-data line-plot


    【解决方案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])
    

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

    【讨论】:

    • 谢谢,这更有意义!但是您能否解释一下为什么我会收到以下错误:ax.plot(x_data[valid],np.asarray(yvals)[valid],label=temp[0][i][0])...AttributeError: 'numpy.ndarray' object has no attribute 'find'
    • 嗯,不确定。我更新了代码以使用稍微不同的方法(重建 y 值列表),这种方法可能会更好。
    • 感谢您的编辑,刚刚试了一下。问题是当我然后使用 ax.plot 绘制这些时,它没有连接缺失值之前和缺失值之后的点之间的线。这是我试图解决的问题。我知道您在这里创建了一个根本不包含“无”坐标的新列表?问题是,在没有坐标可绘制的时间段内,绘图会做什么?从本质上讲,这似乎只是缩短了我的原始列表,因此列表中的记录根本不存在,而不是包含“无”。
    • 嗯,matplotlib 应该在图中的连续点之间画一条直线。通过省略带有None 值的坐标,您告诉matplotlib 只绘制定义的点,并用直线连接它们中的每一个。如果这不是您遇到的情况,您能否发布一张它做错了什么的图片?
    • 啊,你说的是绿线?它在图表中途停止,因为在绿色数据系列中x == 2 没有非None 值,因此右侧没有用于插值的值。 (无论如何,在那里绘制的正确值是多少?)
    猜你喜欢
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多