如何在Python中按时间顺序绘制两组不同的时间序列数据
解决方法
1. 先把时间列转成可识别的时间格式
你的代码没达到预期,大概率是因为TIME1和TIME2是字符串格式,matplotlib没法正确识别时间顺序。先把它们转成pandas的datetime类型:
import pandas as pd import matplotlib.pyplot as plt import matplotlib.ticker as ticker # 转换时间列为datetime格式 df['TIME1'] = pd.to_datetime(df['TIME1']) df['TIME2'] = pd.to_datetime(df['TIME2'])
2. 对每组数据按时间排序后再绘制
即使时间转对了,如果原数据的时间不是按顺序排列的,画出来的折线还是会乱。所以绘制前要单独对每组数据按时间排序:
fig, ax = plt.subplots(1,1) # 提取第一组数据并按时间排序 df1_slice = df[['TIME1', 'DATA1']][1:100].sort_values('TIME1') ax.plot(df1_slice['TIME1'], df1_slice['DATA1'], label='DATA1') # 提取第二组数据并按时间排序 df2_slice = df[['TIME2', 'DATA2']][1:100].sort_values('TIME2') ax.plot(df2_slice['TIME2'], df2_slice['DATA2'], label='DATA2') # 保持你原来的x轴刻度设置 ax.xaxis.set_major_locator(ticker.MultipleLocator(ticker_spacing1)) # 加个旋转避免x轴标签挤在一起 plt.xticks(rotation=45) # 加图例区分两组数据 ax.legend() plt.show()
额外优化:合并数据统一处理(可选)
如果想更清晰地管理两组数据,可以把它们合并成一个带时间索引的数据集,再按时间排序后绘制:
# 整理第一组数据 data1 = pd.DataFrame({ '时间': df['TIME1'][1:100], '数值': df['DATA1'][1:100], '组别': 'DATA1' }) # 整理第二组数据 data2 = pd.DataFrame({ '时间': df['TIME2'][1:100], '数值': df['DATA2'][1:100], '组别': 'DATA2' }) # 合并并按时间排序 combined = pd.concat([data1, data2]).sort_values('时间') # 绘图 fig, ax = plt.subplots(1,1) for group, data in combined.groupby('组别'): ax.plot(data['时间'], data['数值'], label=group) ax.xaxis.set_major_locator(ticker.MultipleLocator(ticker_spacing1)) plt.xticks(rotation=45) ax.legend() plt.show()
内容的提问来源于stack exchange,提问作者white
相关产品推荐
相关产品推荐

