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

如何为时序温度数据设置固定时间区间的x_lims进行绘图?

解决Matplotlib设置固定时间区间x轴范围导致空白图的问题

问题根源

你遇到的空白图问题,核心原因是时间戳的日期不匹配:
当你用pd.Timestamp('9:00')时,Pandas会默认使用当前系统日期生成时间戳,但你的数据日期是2018-05-10,这就导致你设置的x轴范围(今天的9:00-21:00)和实际数据的时间区间完全没有重叠,自然看不到任何曲线。

解决方案

根据你的需求(单天绘图、多天统一x轴范围),这里提供两种针对性的解决方法:


方法1:针对单天数据,拼接数据日期与目标时间

直接提取当前数据文件的日期,和你想要的9:00、21:00拼接成完整的时间戳,确保x轴范围和数据日期一致:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter

# 读取并预处理数据
dayX = pd.read_csv('path/to/file/dayX.csv')
dayX['timeStamp'] = pd.to_datetime(dayX['timeStamp'], format='%Y-%m-%d %H:%M:%S')  # 匹配CSV中的时间格式
dayX = dayX.dropna(subset=['meanT'])  # 丢弃无效的NaN数据

# 获取当前数据的日期信息
data_date = dayX['timeStamp'].dt.date.iloc[0]

# 构造和数据日期一致的目标时间区间
start_time = pd.Timestamp(f"{data_date} 09:00:00")
end_time = pd.Timestamp(f"{data_date} 21:00:00")

# 绘图
fig, ax1 = plt.subplots(1,1)
ax1.plot(dayX['timeStamp'], dayX['meanT'])
ax1.xaxis.set_major_formatter(DateFormatter('%H:%M'))
ax1.set_xlim(start_time, end_time)  # 现在范围和数据完全匹配
fig.autofmt_xdate()
plt.show()

方法2:多天统一x轴(忽略日期,仅保留时间)

如果后续要批量处理多天数据,且希望所有图的x轴都固定为9:00-21:00(无需关心具体日期),可以把时间戳转换为一天中的小时数值,这样x轴就变成纯时间范围,不再受日期影响:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 读取并预处理数据
dayX = pd.read_csv('path/to/file/dayX.csv')
dayX['timeStamp'] = pd.to_datetime(dayX['timeStamp'], format='%Y-%m-%d %H:%M:%S')
dayX = dayX.dropna(subset=['meanT'])

# 新增列:将时间转换为一天中的小时数(比如9:30就是9.5)
dayX['hour_of_day'] = dayX['timeStamp'].dt.hour + dayX['timeStamp'].dt.minute/60 + dayX['timeStamp'].dt.second/3600

# 绘图
fig, ax1 = plt.subplots(1,1)
ax1.plot(dayX['hour_of_day'], dayX['meanT'])
# 固定x轴范围为9到21,自定义刻度显示为时间格式
ax1.set_xlim(9, 21)
ax1.set_xticks(np.arange(9, 22, 2))  # 每2小时设置一个刻度
ax1.set_xticklabels([f"{h}:00" for h in np.arange(9, 22, 2)])
plt.xlabel('Time')
plt.ylabel('Mean Temperature')
plt.show()

这种方法的好处是,不管你处理哪一天的数据,x轴都固定在9-21的时间区间,完全不用考虑日期,非常适合批量绘图。

额外提示

  • 注意时间格式匹配:原代码中用了format='%Y %m %d %H:%M:%S.%f',但你的示例数据时间是2018-05-10 08:55:00,格式应该对应为%Y-%m-%d %H:%M:%S,格式不匹配会导致时间转换失败,一定要核对好。
  • 提前清理NaN值:绘图时NaN会导致曲线中断,用dropna可以让曲线更连贯。

内容的提问来源于stack exchange,提问作者user3168953

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:29:08