相同数据绘制时间-温度曲线出现两种差异结果的原因及小时级刻度设置方法
两种绘图结果形态不同的原因
核心差异是x轴数据类型不同,导致绘图库的轴解析逻辑完全不一致:
- 第一种方法中你调用了
.dt.time取时间部分,返回的是Python原生datetime.time类型,该类型没有连续时间序列的上下文属性,pandas的plot方法会将其识别为离散分类变量。x轴每个刻度的位置仅和数据行顺序对应,和两个时间点的实际间隔完全无关,最终曲线是按行顺序拼接的,和实际的时间-温度对应关系不符。 - 第二种方法直接传入时间字符串,matplotlib原生plot方法会自动将符合格式的时间字符串解析为连续的
datetime64类型,x轴位置按照实际时间间隔计算,所以曲线形态符合预期。
1小时间隔x轴刻度的设置方法
你需要先将时间列转为完整的datetime类型(不要仅提取time部分),再用matplotlib的日期定位器设置刻度间隔,完整修改后的代码如下:
import pandas as pd import numpy as np import matplotlib.pyplot as plt from matplotlib.dates import HourLocator, DateFormatter # 首先将时间列转为完整datetime类型,不要调用.dt.time data['time'] = pd.to_datetime(data['time'], format='%H:%M:%S.%f') fig, ax = plt.subplots() ax.plot(data['time'], data['temp']) ax.plot(data['time'], data['temp_mean'], color='red') # 设置x轴1小时间隔 ax.xaxis.set_major_locator(HourLocator(interval=1)) # 自定义x轴刻度显示格式,只显示时分避免冗余 ax.xaxis.set_major_formatter(DateFormatter('%H:%M')) # 自动旋转x轴刻度避免重叠 fig.autofmt_xdate(rotation=45) # 修正原y轴刻度设置的参数错误,步长放到arange内部 y1, y2 = float(data.temp.min()), float(data.temp.max()) ax.yaxis.set_ticks(np.arange(y1, y2, 10)) ax.set_xlabel('Time') ax.set_ylabel('Temp') plt.show()
内容的提问来源于stack exchange,提问作者vgb_backup
相关产品推荐
相关产品推荐

