【问题标题】:Creating graph with date and time in axis labels with matplotlib使用 matplotlib 在轴标签中创建带有日期和时间的图形
【发布时间】:2011-03-31 10:36:21
【问题描述】:

我的数据位于以下结构的数组中,

[[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 的后续。

【问题讨论】:

  • X 轴应该代表真正的线性时间,还是只需要每个包含数据的刻度下的“DD/MM HH:MM”文本?
  • 我想要绝对日期,它需要垂直显示,因为它不适合水平显示。

标签: python matplotlib datetime-format


【解决方案1】:

我希望这会有所帮助。我一直很难处理 matplotlib 的日期。 Matplotlib 需要一个float format,这是自纪元以来的天数。辅助函数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()

【讨论】:

  • 非常感谢 Paul,我搞定了。但是,我正在尝试创建一个vlines 绘图,yaxis 从底部的-500 开始,而不是 0。如果我做一个plot_date,那么我得到它为 0。你知道我可以如何设置它为 0(文档让我无处可去)。
  • 感谢 Paul 的支持,我做了 .set_ylim(bottom=0),但它仍然显示 -500 作为 y 轴上的最小值。
  • @Shrikant Sharat:它对我有用。如果您使用的是旧版本,您可以尝试升级 matplotlib。您可能必须将您当前的代码作为一个新问题发布,以找出您的限制设置不正确的原因。
  • @Paul,我的代码和你的有一些不同,我想我会用我的代码发布一个新问题。再次感谢。
猜你喜欢
  • 2018-05-20
  • 2021-11-28
  • 1970-01-01
  • 2019-06-28
  • 1970-01-01
  • 1970-01-01
  • 2020-03-24
  • 1970-01-01
  • 2012-02-05
相关资源
最近更新 更多