You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

相同数据绘制时间-温度曲线出现两种差异结果的原因及小时级刻度设置方法

两种绘图结果形态不同的原因

核心差异是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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 16:18:00