使用PyQtGraph绘制Datetime对象

时间:2015-04-01 08:12:10

标签: python datetime pyqtgraph

我是PyQtGraph的新手,需要帮助在x轴上绘制日期时间对象,这可以通过matplotlib轻松完成。任何帮助将不胜感激。

作为我喜欢做的简单版本,请参阅下面我要绘制的日期时间对象,显示为x轴上的刻度。

代码抛出错误,因为无法完成。

import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
import datetime

datetimes = ['2014-10-01 00:00:00', '2014-10-02 00:00:00', '2014-10-03 00:00:00']
x = [datetime.datetime.strptime(i, '%Y-%m-%d %H:%M:%S') for i in datetimes]
y = [1,2,3]


win = pg.GraphicsWindow(title = 'plotting')
p1 = win.addPlot(row=1, col=0, title = 'test')
p1.plot(x,y)

if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()

3 个答案:

答案 0 :(得分:2)

在git上使用自定义AxisItem的工作示例:pg_time_axis.py

如果使用PyQt5,请将__main__函数中的导入更改为from PyQt5 import QtGui

datetime axis zoom 1 datetime axis zoom 2

PS:看到Luke提到的PR最终合并真是太好了。

答案 1 :(得分:1)

pyqtgraph现在原生支持DateTime格式:https://pyqtgraph.readthedocs.io/en/latest/graphicsItems/dateaxisitem.html?highlight=DateAxisItem

这非常简单,如果您在x轴上有时间戳记,请执行以下操作:

axis = DateAxisItem()
plot.setAxisItems({'bottom':axis})

答案 2 :(得分:0)

如您所见,pyqtgraph不支持使用datetime对象进行绘图。在绘图之前,您需要将它们转换为数值。

对于静态缩放,您还可以使用AxisItem.setTicks()自定义轴上显示的文本。

如果您希望能够缩放轴,则需要创建一个覆盖AxisItemtickValues的{​​{1}}子类。您可以在此处查看文档字符串:https://github.com/pyqtgraph/pyqtgraph/blob/develop/pyqtgraph/graphicsItems/AxisItem.py#L661

..作为一个例子,有一个开放的公关,尝试你在这里做的事情:https://github.com/pyqtgraph/pyqtgraph/pull/74