如何将两个不同起始点的时间序列对齐起点后合并绘图
不同起始时间时间序列对齐起点同坐标系绘制实现
现有方案问题说明
方案1:双子图分开绘制
代码如下:
import numpy as np import pandas as pd import matplotlib.pyplot as plt fig = plt.figure() ax1 = fig.add_subplot(2, 1, 1) ax2 = fig.add_subplot(2, 1, 2) #data1 y1 = np.random.randint(0, 100, 150) x1 = pd.date_range('2020-01-01 00:00:00', periods=150, freq='d') #data2 y2 = np.random.randint(5, 40, 150) x2 = pd.date_range('2019-05-01 12:00:00', periods=150, freq='H') #plot ax1.plot(x1, y1) ax2.plot(x2, y2) plt.show()
该方案问题:两个时间序列x轴虽然各自从起点开始、视觉上对齐,但分别绘制在两个子图中,没有合并在同一坐标系。
方案2:同坐标系直接绘制
代码如下:
import numpy as np import pandas as pd import matplotlib.pyplot as plt fig = plt.figure() ax1 = fig.add_subplot(1, 1, 1) #data1 y1 = np.random.randint(0, 100, 150) x1 = pd.date_range('2020-01-01 00:00:00',periods=150,freq='d') #data2 y2 = np.random.randint(5, 40, 150) x2 = pd.date_range('2019-05-01 12:00:00',periods=150,freq='H') #plot ax1.plot(x1, y1) ax1.plot(x2, y2) plt.show()
该方案问题:两个序列合并绘制在同一坐标系,但x轴按实际绝对时间展示,两个序列起点没有对齐。
最终实现方案
核心逻辑是将两个时间序列的x轴转换为相对起始点的时间偏移量,再绘制到同一坐标系中。如果需要按采样序号对齐(即第1个采样点、第2个采样点...一一对应),也可以直接用采样索引作为x轴。
下面是按实际时间跨度对齐的完整实现代码:
import numpy as np import pandas as pd import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(1, 1, 1) # 生成测试数据 y1 = np.random.randint(0, 100, 150) x1 = pd.date_range('2020-01-01 00:00:00', periods=150, freq='d') y2 = np.random.randint(5, 40, 150) x2 = pd.date_range('2019-05-01 12:00:00', periods=150, freq='H') # 计算相对起始点的天数作为统一x轴 x1_rel = (x1 - x1[0]).days x2_rel = (x2 - x2[0]).total_seconds() / (3600 * 24) # 转换为天单位 # 同坐标系绘制 ax.plot(x1_rel, y1, label='日频序列') ax.plot(x2_rel, y2, label='小时频序列') # 自定义x轴标签说明 ax.set_xlabel('距离序列起始点的天数') ax.set_ylabel('数值') ax.legend() plt.show()
如果需要按采样序号对齐,只需要把x轴替换为索引即可:
# 按采样序号对齐的x轴 x_rel = np.arange(len(y1)) ax.plot(x_rel, y1, label='日频序列') ax.plot(x_rel, y2, label='小时频序列') ax.set_xlabel('采样序号')
内容的提问来源于stack exchange,提问作者drango
相关产品推荐
相关产品推荐

