使用 PyQtGraph 绘制 Datetime 对象

Posted

技术标签:

【中文标题】使用 PyQtGraph 绘制 Datetime 对象【英文标题】:Plotting Datetime objects with PyQtGraph 【发布时间】:2015-06-05 19:25:35 【问题描述】:

我是 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_()

【问题讨论】:

【参考方案1】:

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

这很简单,如果您在 x 轴上有时间戳,只需:

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

【讨论】:

【参考方案2】:

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

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

PS:很高兴看到Luke提到的PR最终被合并。

【讨论】:

【参考方案3】:

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

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

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

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

【讨论】:

嗨,卢克。你可能有这方面的例子吗?我已经能够根据日期时间重命名浮动,但我需要它根据用户的缩放级别自动调整

以上是关于使用 PyQtGraph 绘制 Datetime 对象的主要内容,如果未能解决你的问题,请参考以下文章

使用外部数据绘制 pyqtgraph

pyqtgraph 用于绘制多个数据列表

pyqtgraph,绘制时间序列

如何在pyqtgraph中绘制十字准线并绘制鼠标位置?

如何使用 PyQtGraph 绘制图像上两点之间的水平距离

Python 3.3 pyqtgraph 无法绘制点