pyqtgraph : how to plot time series (date and time on the x axis)?

13,430

Take a look at this gist. You could modify tickStrings() to change format string according to scale

Share:
13,430
dplamp
Author by

dplamp

Updated on June 28, 2022

Comments

  • dplamp
    dplamp almost 2 years

    I want to plot time series with pyqtgraph, and display the date and/or time on the x axis scale, but I couldn't find how to do it.

    Edit 1 : It seems like I should subclass AxisItem and reimplement tickStrings(). I'll look into this.

    Edit 2 : Here is how I subclassed AxisItem. The documentation shows how to use the class.

    from __future__ import print_function
    from PySide.QtCore import *
    from PySide.QtUiTools import *
    from PySide.QtGui import *
    import pyqtgraph as pg
    import time
    
    ## Reimplements \c pyqtgraph.AxisItem to display time series.
    # \code
    # from caxistime import CAxisTime
    # \# class definition here...
    # self.__axisTime=CAxisTime(orientation='bottom')
    # self.__plot=self.__glyPlot.addPlot(axisItems={'bottom': self.__axisTime}) # __plot : PlotItem
    # \endcode
    class CAxisTime(pg.AxisItem):
        ## Formats axis label to human readable time.
        # @param[in] values List of \c time_t.
        # @param[in] scale Not used.
        # @param[in] spacing Not used.
        def tickStrings(self, values, scale, spacing):
            strns = []
            for x in values:
                try:
                    strns.append(time.strftime("%H:%M:%S", time.gmtime(x)))    # time_t --> time.struct_time
                except ValueError:  # Windows can't handle dates before 1970
                    strns.append('')
            return strns