如何绘制两个数据点序列之间的点对点对齐?

时间:2015-07-23 23:13:40

标签: python numpy matplotlib

我正致力于动态时间扭曲的时间序列。我需要绘制两个序列的数据点之间的对齐:

t=[t1,t2,t3,...,tx]
s=[s1,s2,s3,...,sy]

两个序列的长度可能不同。我也有哪些点匹配,说:

[(1,1),(1,2), (2,2), (3,3), (4,3), (4,4)]

读作:

t[1] matches s[1]   
t[1] matches s[2]   
t[2] matches s[2]   
...   
t[4] matches s[4]   

我想要实现的是这样的:

enter image description here

甚至更好,就像这样(即只有两个序列及其对齐): enter image description here

我知道dtw pacakge的存在虽然它似乎没有包含绘制路线的方法。我使用Python进行绘图是相当新的,所以当谈到matplotlib和numpy时,我仍然处于黑暗中,或者至少我不确定使用它们的最佳方法。

总结一下,我只需要知道如何绘制两个序列,一个在另一个上面(子图可能会有所帮助,我相信?)并使用Python在每个数据点之间画一条线。

1 个答案:

答案 0 :(得分:4)

你应该能够用plt.plot绘制s和t。在它们之间做界线有点棘手。我假设x轴对应于s和t的第x个元素。在这种情况下,如果s的第i个元素和t的第j个元素配对,您可以使用plt.plot((i, j), (s[i], t[j]), color = 'black')

绘制它们之间的线。
import matplotlib.pyplot as plt
#plot signals
plt.plot(y1, label = 'Signal 1')
plt.plot(y2, label = 'Signal 2')
#plot alignment
for i, j in matches:
    plt.plot((i, j), (y1[i], y2[j]), color = 'black')
plt.show()