我将数据放在以下结构的数组中,
[[1293606162197, 0, 0],
[1293605477994, 63, 0],
[1293605478057, 0, 0],
[1293605478072, 2735, 1249],
[1293606162213, 0, 0],
[1293606162229, 0, 0]]
第一列是纪元时间(ms
),第二列是y1
,第三列是y2
。我需要一个在x轴上有时间的图,在左右y轴上有y1
和y2
。
我一直在浏览文档,但找不到任何方法让我的x轴刻度显示日期和时间,如“28/12 16:48”,即“日期/月份小时:分钟”。所有文档对我的帮助就是单独显示日期,但这不是我想要的。任何帮助都将在此得到赞赏。
而且,如果看起来像,这不是家庭作业。这实际上是我上一个问题Reading and graphing data read from huge files的后续跟进。
答案 0 :(得分:43)
我希望这会有所帮助。我总是在使用matplotlib的日期时遇到困难。 Matplotlib需要float format,这是自纪元以来的几天。辅助函数num2date
和date2num
以及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()