Python 在同一图形上绘制各种实验的持续时间-Matplotlib

Python 在同一图形上绘制各种实验的持续时间-Matplotlib,python,datetime,matplotlib,duration,Python,Datetime,Matplotlib,Duration,我在这方面已经有一段时间了(差不多一个星期),我真的非常感谢你在这方面的帮助。我有一个数据库,里面有几个实验的读数。以下是数据示例: id datetime results 0 30 2020-09-29 14:55:21+00 0.0424 1 30 2020-09-29 14:55:23+00 0.0424 2 30 2020-09-29 14:55:24+00

我在这方面已经有一段时间了(差不多一个星期),我真的非常感谢你在这方面的帮助。我有一个数据库,里面有几个实验的读数。以下是数据示例:

    id                datetime            results
0   30  2020-09-29 14:55:21+00             0.0424
1   30  2020-09-29 14:55:23+00             0.0424
2   30  2020-09-29 14:55:24+00             0.0424
3   30  2020-09-29 14:55:25+00             0.0424
4   30  2020-09-29 14:55:26+00             0.0424
5   30  2020-09-29 14:55:27+00             0.0424
当我以datetime作为x轴,以结果作为y轴,将所有图形绘制在一起时,看起来都很棒

现在,能够相互比较不同的实验是非常重要的。我所做的是,我尝试通过使用每个id的最小datetime来获得持续时间,然后从每个datetime中减去它。每个实验的第一个持续时间为00:00:00

现在我们有几个实验,持续一天以上,所以我试着做两件事:

  • 以HH:MM:SS的格式显示持续时间,如果实验持续时间超过24小时,则持续时间为26:58:32。(MM和SS的最大值为60)

  • 如果最短持续时间超过24小时,格式将为DD:HH24:MM:SS。例如2:16:43:22(MM和SS的最大值为60,HH的最大值为24)

  • 第一种方法的绘图如下所示:

    第二种方法的曲线图如下所示:

    现在我真的不知道为什么matplotlib会绘制以下图表。我确保了持续时间是按降序排列的,但我在图表中不断得到这些奇怪的来回线条。连传说都不合适

    我使用此函数绘制图形:

    def plot_graph(df, x_column, y_column):
        fig, ax = plt.subplots()
    
        for exp_id in unique_experiments:
            ax.plot(df[x_column][df["id"] == exp_id], df[y_column][df["id"] == exp_id],
                    label=exp_id)
    
        ax.legend()
    
        ax.xaxis.set_major_locator(plt.MaxNLocator(10))
        plt.xticks(rotation=315)
    
        plt.show()
    

    乍一看,我会说为什么要把它画成一个折线图?散点图更有意义,不是吗?如果您坚持使用该行,我怀疑您将不得不重置df的索引以表示排序顺序(通过timedelta)。