如何使用PyQtGraph的DateAxisItem?

2024-05-16 14:13:35 发布

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

我在python3.6.2(32位)和windows10上使用PyQtGraph'0.9.8+gd627e39。在

我的目标是用显示日期时间的X轴绘制实时数据。在

Time                                                Value
datetime.datetime(2018, 3, 1, 9, 36, 50, 136415)    10
datetime.datetime(2018, 3, 1, 9, 36, 51, 330912)    9
datetime.datetime(2018, 3, 1, 9, 36, 51, 382815)    12
datetime.datetime(2018, 3, 1, 9, 36, 52, 928818)    11
...

我查了相关的问题,比如 https://gist.github.com/friendzis/4e98ebe2cf29c0c2c232pyqtgraph, plotting time series,但我仍然很难掌握如何使用DateAxisItem

我试着用这个模块做一个简单的代码

^{pr2}$

但它显示一条错误消息,根本不显示它的X轴。在

Traceback (most recent call last):
File "<tmp 10>", line 19, in <module>
    graph.plot(x=list_x, y=list_y, pen=None, symbol='o')
File "d:\python36-32\lib\site-packages\pyqtgraph\graphicsItems\PlotItem\PlotItem.py", line 636, in plot
    item = PlotDataItem(*args, **kargs)
File "d:\python36-32\lib\site-packages\pyqtgraph\graphicsItems\PlotDataItem.py", line 177, in __init__
    self.setData(*args, **kargs)
File "d:\python36-32\lib\site-packages\pyqtgraph\graphicsItems\PlotDataItem.py", line 461, in setData
    self.updateItems()
File "d:\python36-32\lib\site-packages\pyqtgraph\graphicsItems\PlotDataItem.py", line 493, in updateItems
    self.scatter.setData(x=x, y=y, **scatterArgs)
File "d:\python36-32\lib\site-packages\pyqtgraph\graphicsItems\ScatterPlotItem.py", line 308, in setData
    self.addPoints(*args, **kargs)
File "d:\python36-32\lib\site-packages\pyqtgraph\graphicsItems\ScatterPlotItem.py", line 388, in addPoints
    newData['x'] = kargs['x']
TypeError: float() argument must be a string or a number, not 'datetime.datetime'

是因为DateAxisItem不支持日期时间吗?如果我能通过查看模块的代码来理解它,那就太好了,但是不幸的是,我的技能并不好。在

如果有人能告诉我如何使用这个模块和一些简单的数据,我将不胜感激。在


Tags: inpyselfdatetimelibpackageslinesite
1条回答
网友
1楼 · 发布于 2024-05-16 14:13:35

基于前面的answer,pyqtgraph中的绘图只接受数值类型的数据,因此必须转换它,在本例中,我们使用timestamp(),然后在自定义的AxisItem中,我们将其转换为字符串,并借助fromtimestamp来显示它。在

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


class TimeAxisItem(pg.AxisItem):
    def tickStrings(self, values, scale, spacing):
        return [datetime.fromtimestamp(value) for value in values]

list_x = [datetime(2018, 3, 1, 9, 36, 50, 136415), 
        datetime(2018, 3, 1, 9, 36, 51, 330912),
        datetime(2018, 3, 1, 9, 36, 51, 382815),
        datetime(2018, 3, 1, 9, 36, 52, 928818)]

list_y = [10, 9, 12, 11]

app = QtGui.QApplication([])

date_axis = TimeAxisItem(orientation='bottom')
graph = pg.PlotWidget(axisItems = {'bottom': date_axis})

graph.plot(x=[x.timestamp() for x in list_x], y=list_y, pen=None, symbol='o')
graph.show()

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

enter image description here

相关问题 更多 >