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

如何使用matplotlib绘制'%d.%m.%Y %H:%M:%S'格式的时间戳数据

问题描述

我一直搞不懂怎么把数据里的时间戳用到matplotlib绘图里。
我的数据格式如下:

Label   Power   Cold_junction   Prof100 Prof200 Prof300 Prof400 Prof600 Prof1000    Temp05      Temp10  Temp20  Temp30  Temp50  Temp100
Units   V   deg C   %   %   %   %   %   %   °C  °C  °C  °C  °C  °C
29.09.2020 11:20:00 10,9    25,4    1,8 4,6 3,5 0,2 #-INF   #-INF   22,9    23,1    23,0    23,2    23,0    23,1
29.09.2020 11:30:00 10,9    25,5    1,8 4,5 3,5 0,1 #-INF   #-INF   23,0    23,2    23,1    23,3    23,2    23,3
29.09.2020 11:40:00 10,9    25,7    1,8 4,5 3,4 0,0 #-INF   #-INF   23,1    23,3    23,2    23,3    23,3    23,4
29.09.2020 11:50:00 10,9    25,8    1,7 4,4 3,4 0,0 #-INF   #-INF   23,2    23,4    23,3    23,5    23,4    23,5

我现在已经可以用下面的代码把数据导入为numpy.ndarray类型:

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.dates as mdates
a = np.genfromtxt(r'shortglienig.txt', delimiter=None, skip_header=2, dtype=str, comments=None)
a = np.char.replace(a, ',','.')
a = np.char.replace(a,'\t',' ')
date = a[0:len(a),0]
time = a[0:len(a),1]
prof100 = a[0:len(a), 4]

现在date、time和prof100都是numpy.ndarray类型的变量。我想要实现X轴为日期时间、Y轴为prof100数据的绘图,推测下一步要把时间数据转成matplotlib可识别的格式,想知道mdates.date2num或mdates.datestr2num函数能不能用,求对应的解决方案。


解决方案

你提到的mdates.datestr2num完全可以直接使用,操作逻辑非常简单:先把分开的日期、时间字符串拼接成完整的时间串,再转成matplotlib支持的格式即可,同时记得把prof100从字符串转成数值类型,否则无法正常绘图。

完整可运行代码如下:

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.dates as mdates

# 原有数据读取逻辑
a = np.genfromtxt(r'shortglienig.txt', delimiter=None, skip_header=2, dtype=str, comments=None)
a = np.char.replace(a, ',','.')
a = np.char.replace(a,'\t',' ')
date = a[:,0] # 可简化numpy切片写法,和原逻辑效果一致
time = a[:,1]
prof100 = a[:,4]

# 新增时间、数据转换逻辑
datetime_str = np.char.add(np.char.add(date, ' '), time) # 拼接日期+时间字符串
x_time = mdates.datestr2num(datetime_str) # 转换为matplotlib可识别的时间格式
y_prof = prof100.astype(float) # 把prof100从字符串转成浮点数

# 绘图逻辑
fig, ax = plt.subplots(figsize=(10,4))
ax.plot(x_time, y_prof, marker='o', linestyle='-', color='#2c7fb8')

# 自定义X轴显示格式,避免标签重叠
ax.xaxis.set_major_formatter(mdates.DateFormatter('%m-%d %H:%M')) # 需要显示年份可改成'%Y-%m-%d %H:%M'
fig.autofmt_xdate() # 自动旋转X轴标签

ax.set_xlabel('时间')
ax.set_ylabel('Prof100 (%)')
plt.grid(alpha=0.3)
plt.show()

如果你更习惯先通过datetime模块解析时间,也可以用mdates.date2num实现同样的效果,转换部分代码示例:

from datetime import datetime
datetime_list = [datetime.strptime(dt, '%d.%m.%Y %H:%M:%S') for dt in datetime_str]
x_time = mdates.date2num(datetime_list)

两种方法的最终绘图效果完全一致,可根据自己的使用习惯选择。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:54:07