我想从CSV数据(两个数据集)中叠加一些图表。我从我的数据集中得到的图表如下所示。
有没有办法把这些数据集绘制在特定的点上?我想通过使用“大落差”的锚来覆盖这些图,以便以更好的方式进行比较。
使用的代码:
import pandas as pd
import matplotlib.pyplot as plt
# Read the data
data1 = pd.read_csv('data1.csv', delimiter=";", decimal=",")
data2 = pd.read_csv('data2.csv', delimiter=";", decimal=",")
data3 = pd.read_csv('data3.csv', delimiter=";", decimal=",")
data4 = pd.read_csv('data4.csv', delimiter=";", decimal=",")
# Plot the data
plt.plot(data1['Zeit'], data1['Kanal A'])
plt.plot(data2['Zeit'], data2['Kanal A'])
plt.plot(data3['Zeit'], data3['Kanal A'])
plt.plot(data4['Zeit'], data4['Kanal A'])
plt.show()
plt.close()
我想在这里与大家分享一些数据:Link to data
1条答案
按热度按时间zpf6vheq1#
第1部分:锚时间
一个简单的方法是找到每个帧中感兴趣的时间(最低点),然后用
x=t - t_peak
而不是x=t
来绘制每个序列。有两种方法可以找到所需的锚点:1.仅使用全局最小值(在图中,这将很好地工作),或
1.使用最显著的局部最小值,或者根据第一原理,或者使用scipy的
find_peaks()
。但首先,让我们尝试建立一个可复制的示例:
在这种情况下,我们通过给每个时间序列自己的、独立的、不均匀分布的时间采样,使问题变得最不方便。
现在,通过全局最小值检索“最大落差”:
第一次
但是想象一下全局最小值不适用的情况。例如,向每个系列添加一个大正弦波:
很明显,有几个局部最小值,而我们想要的那个(“最陡的下降”)不是全局最小值。
找到所需的最陡下降时间的简单方法是查看每个点与其两个相邻点之间的差异:
第一次
在更复杂的情况下,您需要充分利用
find_peaks()
的功能。下面是一个使用最显著最小值的示例,使用一定数量的样本作为邻域:在这种情况下,两种方法找到的峰是相同的。对齐曲线得到:
文件系统
第2部分:对齐数值运算的时间序列
在找到锚时间并通过相应地移动x轴来绘制时间序列之后,假设现在我们想要 * 对齐 * 所有时间序列,例如以某种方式将它们彼此进行比较(例如:差异、相关性等)。在我们所做的这个例子中,时间样本不是等距的,所有序列都有自己的采样。
我们可以使用
resample()
来实现我们的目标。让我们将帧转换为实际的时间序列,将列t
(假设以秒为单位)转换为DateTimeIndex
,然后使用先前找到的t_peak
和任意的“0”日期来移动时间:此时,采样仍然是不均匀的,因此我们使用重采样来获得固定的频率。一种策略是过采样和插值:
文件系统
此时,我们可以比较数列。下面是两两之间的差异和相关系数:
文件系统