我有两个不同的时间序列数据,如下所示。
我希望将这两组不同的时间序列值放在一个图表中。代码如下,不幸的是,这并不是我想要的效果。第二张图片就是我想要的效果
plt.figure
fig,ax = plt.subplots(1,1)
ax.plot(df['TIME1'][1:100],df['DATA1'][1:100])
ax.plot(df['TIME2'][1:100],df['DATA2'][1:100])
ax.xaxis.set_major_locator(ticker.MultipleLocator(ticker_spacing1))
plt.show()
我了解你想将两个时间序列数据按时间顺序绘制在一个图表中,但是你的代码没有达到预期的效果。问题在于,你分别绘制了两个时间序列,而没有将它们的时间轴对齐。
为了实现你想要的效果,你需要:
- 合并两个数据框的时间列: 创建一个新的时间轴,它包含两个数据框中所有的唯一时间点。
- 将两个数据框的数据与新时间轴对齐: 使用合并后的时间轴作为索引,将两个数据框的数据与之对齐,缺失值可以用NaN填充。
- 绘制合并后的数据: 使用 matplotlib 绘制合并后的数据,新时间轴作为 X 轴。
以下是代码示例:
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
# 假设你的数据框名为 df
# 1. 合并时间列
combined_time = pd.concat([df['TIME1'], df['TIME2']]).unique()
combined_time.sort()
# 2. 创建新的数据框,使用合并后的时间轴作为索引
df1 = df.set_index('TIME1')[['DATA1']].reindex(combined_time)
df2 = df.set_index('TIME2')[['DATA2']].reindex(combined_time)
# 3. 绘制合并后的数据
fig, ax = plt.subplots(1, 1)
ax.plot(df1.index, df1['DATA1'], label='DATA1')
ax.plot(df2.index, df2['DATA2'], label='DATA2')
ax.xaxis.set_major_locator(ticker.MultipleLocator(ticker_spacing1))
plt.legend()
plt.show()
这段代码首先合并了两个时间列,然后使用
reindex
函数将两个数据框的数据与新的时间轴对齐。最后,代码使用 matplotlib 绘制了合并后的数据。
希望这段代码可以帮助你实现你想要的效果! 如果你的数据框结构不同,请告诉我,我会尽力调整代码。
标签:python,matplotlib From: 78570546