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

如何以带完整时分秒的日期时间序列为X轴绘制对应通量数值

问题解决步骤

报错原因

你将x轴处理为二维嵌套列表的格式不符合matplotlib绘图接口的输入要求,plot函数要求x轴传入一维可哈希的序列,二维嵌套结构会触发TypeError: unhashable type: 'numpy.ndarray'报错,且完全没有必要拆分日期和时间为两个独立字段。

正确处理方案

直接将时间列转换为Python原生支持的datetime类型,matplotlib可直接识别该类型作为时间轴坐标,同时支持自定义刻度显示规则。

步骤1:读取数据时直接解析时间列

修改pd.read_csv参数,直接将time_tag列解析为datetime类型:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

col_list = ['time_tag', 'ZPGT10E']
# 新增parse_dates参数直接解析时间列
df = pd.read_csv('sep2017.csv', usecols=col_list, skiprows=717, parse_dates=['time_tag'])

如果已经完成数据读取,也可以手动转换格式:

df['time_tag'] = pd.to_datetime(df['time_tag'], format='%Y-%m-%d %H:%M:%S.%f')

步骤2:直接使用datetime列绘图

直接将time_tag列作为x轴输入,不需要额外拆分处理:

# 替换为你实际的avg计算逻辑,保证avg和x的长度完全一致
x = df['time_tag']
avg = df['ZPGT10E']

plt.plot(x, avg, color='red', label='average')

# 优化x轴显示,同时展示日期和时刻,避免标签重叠
ax = plt.gca()
# 设置主刻度为天,显示日期
ax.xaxis.set_major_locator(mdates.DayLocator(interval=1))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
# 设置次刻度为6小时间隔,显示时刻
ax.xaxis.set_minor_locator(mdates.HourLocator(interval=6))
ax.xaxis.set_minor_formatter(mdates.DateFormatter('%H:%M'))

# 旋转标签避免重叠
plt.xticks(rotation=45, ha='right')
plt.legend()
plt.tight_layout()
plt.show()

效果说明

该方案可以完整展示从2017-09-01到2017-09-30的所有5分钟间隔时间点,不会按日期聚合数据,同时x轴标签可通过调整mdates的刻度规则灵活修改显示密度,避免标签重叠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 15:45:03