使用matplotlib在轴标签中创建带有日期和时间的图形

2024-05-21 01:08:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数据在下面的结构数组中

[[1293606162197, 0, 0],
 [1293605477994, 63, 0],
 [1293605478057, 0, 0],
 [1293605478072, 2735, 1249],
 [1293606162213, 0, 0],
 [1293606162229, 0, 0]]

第一列是历元时间(在ms),第二列是y1,第三列是y2。我需要一个x轴上有时间的图,左右y轴上有y1y2

我一直在浏览文档,但找不到任何方法让x轴刻度同时显示日期和时间,如“28/12 16:48”,即“日期/月时:分”。所有的文档帮助我只显示日期,但这不是我想要的。在此方面如有任何帮助,将不胜感激。

而且,如果看起来像,这不是家庭作业。这实际上是我上一个问题Reading and graphing data read from huge files的后续。


Tags: and数据方法文档时间数组结构ms
1条回答
网友
1楼 · 发布于 2024-05-21 01:08:57

我希望这能有帮助。我一直对matplotlib的约会很不满意。Matplotlib需要一个float format,这是自epoch以来的天数。helper函数num2datedate2num以及python内置的datetime可用于转换到/从。格式化业务是从this示例中解除的。可以使用set_major_formatter将任何绘图上的轴更改为日期轴。

import numpy as np
from matplotlib import pyplot as plt
from matplotlib import dates
import datetime

a = np.array([
    [1293605162197, 0, 0],
    [1293605477994, 63, 0],
    [1293605478057, 0, 0],
    [1293605478072, 2735, 1249],
    [1293606162213, 0, 0],
    [1293606162229, 0, 0]])

d = a[:,0]
y1 = a[:,1]
y2 = a[:,2]

# convert epoch to matplotlib float format
s = d/1000
ms = d-1000*s  # not needed?
dts = map(datetime.datetime.fromtimestamp, s)
fds = dates.date2num(dts) # converted

# matplotlib date format object
hfmt = dates.DateFormatter('%m/%d %H:%M')

fig = plt.figure()
ax = fig.add_subplot(111)
ax.vlines(fds, y2, y1)

ax.xaxis.set_major_locator(dates.MinuteLocator())
ax.xaxis.set_major_formatter(hfmt)
ax.set_ylim(bottom = 0)
plt.xticks(rotation='vertical')
plt.subplots_adjust(bottom=.3)
plt.show()

result

相关问题 更多 >