繁体   English   中英

如何在Python中将不同的时间序列图合并为2D

[英]How to merge different time-series plot into a 2D in Python

我有以下格式的三种不同的时间序列数据,其中第一列是时间戳,第二列是值。

0.086206438,10
0.086425551,12
0.089227066,20
0.089262508,24
0.089744425,30
0.090036815,40
0.090054172,28
0.090377569,28
0.090514071,28
0.090762872,28
0.090912691,27

为了重现性,我已经分享了我在这里使用的三个时间序列数据。

从第2列开始,我想读取当前行并将其与前一行的值进行比较。 如果它更大,我会继续比较。 如果当前值小于前一行的值继续,我会采取差异。 让我说清楚。 例如,在我提供的上述样本记录中,第七行(28)小于第六行(40)中的值 - 因此它将是(40-28 = 12)。

这是我的示例代码。

import numpy as np
import pandas as pd
import csv
import numpy as np
import scipy.stats
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import norm
from statsmodels.graphics.tsaplots import plot_acf, acf


protocols = {}


types = {"data1": "data1.csv", "data2": "data2.csv", "data3": "data3.csv"}

for protname, fname in types.items():
    arr = []  
    arr1 = []  
    with open(fname, mode='r', encoding='utf-8-sig') as f:
        reader = csv.reader(f, delimiter=",")
        for i in reader:
            arr.append(int(i[1])) 
            arr1.append(float(i[0])) 

    arr, arr1 = np.array(arr), np.array(arr1)
    diffs = np.diff(arr)
    diffs1 = np.diff(arr1)
    diffs1 = diffs1[diffs > 0] 
    diffs = diffs[diffs > 0] # To keep only the increased values
    protocols[protname] = {
        "rtime": np.array(arr1),
        "rdata": np.array(arr),
        "data": diffs,
        "timediff": diffs,
    }

## change in time 
for protname, values in protocols.items():
    d = values["rdata"]
    t = values["rtime"]
    d = np.diff(d, 1) #/ d[:-1]
    t = np.diff(t, 1)
    plt.plot(t, d, ".", label=protname, alpha=0.5)
    plt.xlabel("Changes in time")
    plt.ylabel("differences")
    plt.legend()
    plt.show()

这给了我以下图表

在此输入图像描述 在此输入图像描述 在此输入图像描述

我们如何在单独包含的三个数据的二维(2D)图中绘制差异与时间变化(列onw)?

所有三个情节plt.show()plt.show()

仅绘制数组的负值:

plt.plot(t[d<0], d[d<0], ...) 

如果你改变循环

for protname, values in protocols.items():
    d = values["rdata"]
    t = values["rtime"]
    d = np.diff(d, 1) #/ d[:-1]
    t = np.diff(t, 1)
    plt.plot(t, d, ".", label=protname, alpha=0.5)
    plt.xlabel("Changes in time")
    plt.ylabel("differences")
    plt.legend()
    plt.show()

for protname, values in protocols.items():
    d = values["rdata"]
    t = values["rtime"]
    d = np.diff(d, 1) #/ d[:-1]
    t = np.diff(t, 1)
    plt.plot(t[d < 0], d[d < 0], ".", label=protname, alpha=0.5)
    plt.xlabel("Changes in time")
    plt.ylabel("differences")
    plt.legend()

plt.show()

你会得到一个看起来像的情节 过滤的情节

我相信这就是你要找的 - 如果我理解你的话。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM