如何在Pandas DataFrame中绘制时间(datetime64)与功率的时序图?
Pandas时序图绘制优化方案
问题分析
现有代码将datetime64类型的time列转为字符串格式的Time列,matplotlib会把字符串视为离散类别,导致X轴刻度拥挤重叠,且无法正确识别时序逻辑,最终绘图效果不佳。
解决步骤
1. 保留原始datetime类型数据
不要将time列转为字符串,直接使用原始的datetime64类型进行绘图,这样matplotlib才能正确解析时序关系。
2. 使用matplotlib日期模块处理X轴
利用matplotlib.dates模块设置X轴的刻度间隔、格式,确保按UTC小时(10:00 UTC至00:00 UTC)显示刻度。
3. 优化绘图细节
调整刻度旋转角度、网格显示,避免刻度重叠。
修改后的完整代码
import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as mdates # 确保time列是datetime64类型(若未转换,执行此行) # df['time'] = pd.to_datetime(df['time'], utc=True) # 绘图 fig, ax = plt.subplots(figsize=(9,4)) ax.plot(df['time'], df['power(dB)'], color='r', linewidth=1.5, linestyle=':') # 设置Y轴范围 ax.set_ylim(0, 70) # 配置X轴:每小时一个刻度,显示格式为HH:00 UTC ax.xaxis.set_major_locator(mdates.HourLocator(interval=1)) ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M UTC')) # 设置轴标签与标题 ax.set_xlabel('Time (UTC)', fontsize=13) ax.set_ylabel('P (dB)', fontsize=13) plt.title('X-Band Power | 2021-12-11', fontsize=14) # 调整刻度角度,避免重叠 plt.xticks(rotation=60) plt.grid() # 自动调整布局,防止标签截断 plt.tight_layout() plt.show()
关键说明
mdates.HourLocator(interval=1):强制X轴每小时生成一个刻度mdates.DateFormatter('%H:%M UTC'):定义刻度显示格式,明确标注UTC时区- 保留原始
datetime64类型,确保matplotlib正确识别时序顺序,避免刻度逻辑混乱
内容的提问来源于stack exchange,提问作者Dubx
相关产品推荐
相关产品推荐

