You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让PyQtGraph图表X轴显示日期格式而非时分单位?

解决PyQtGraph X轴日期格式显示问题

需求:使用PyQtGraph绘制X轴为日期的图表时,X轴当前显示小时和分钟格式,需要强制改为01.01.2024这样的日期格式。

原代码示例:

import sys
import datetime
import pyqtgraph as pg
from PySide6.QtWidgets import QApplication, QMainWindow


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.plotWidget = pg.PlotWidget()
        self.setCentralWidget(self.plotWidget)

        self.scatter = pg.ScatterPlotItem()
        self.plotWidget.addItem(self.scatter)
        self.plotWidget.setBackground('w')
        dateAxis = pg.DateAxisItem()
        self.plotWidget.setAxisItems({'bottom': dateAxis})

        self.add_points()

    def add_points(self):
        x_values = [datetime.date(2024, 1, 1), datetime.date(
            2024, 3, 1), datetime.date(2024, 4, 21)]
        points = [
            {'pos': (x_values[0].toordinal(), 1)},
            {'pos': (x_values[1].toordinal(), 2)},
            {'pos': (x_values[2].toordinal(), 3)}]
        self.scatter.addPoints(points)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

解决思路

PyQtGraph的DateAxisItem默认会根据数据时间范围自动选择刻度格式,当数据间隔较大时仍显示时分是默认逻辑判断导致的。我们可以通过自定义DateAxisItem子类,重写刻度字符串生成方法,强制指定目标日期格式。

修改后的代码

import sys
import datetime
import pyqtgraph as pg
from PySide6.QtWidgets import QApplication, QMainWindow


class CustomDateAxisItem(pg.DateAxisItem):
    def tickStrings(self, values, scale, spacing):
        # 强制将所有刻度格式化为 dd.mm.yyyy
        return [datetime.date.fromordinal(int(v)).strftime('%d.%m.%Y') for v in values]


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.plotWidget = pg.PlotWidget()
        self.setCentralWidget(self.plotWidget)

        self.scatter = pg.ScatterPlotItem()
        self.plotWidget.addItem(self.scatter)
        self.plotWidget.setBackground('w')
        # 使用自定义的日期轴
        dateAxis = CustomDateAxisItem()
        self.plotWidget.setAxisItems({'bottom': dateAxis})

        self.add_points()

    def add_points(self):
        x_values = [datetime.date(2024, 1, 1), datetime.date(
            2024, 3, 1), datetime.date(2024, 4, 21)]
        points = [
            {'pos': (x_values[0].toordinal(), 1)},
            {'pos': (x_values[1].toordinal(), 2)},
            {'pos': (x_values[2].toordinal(), 3)}]
        self.scatter.addPoints(points)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

关键修改说明

  • 新增CustomDateAxisItem类,继承自pg.DateAxisItem,重写tickStrings方法,直接将每个刻度值转换为dd.mm.yyyy格式的字符串
  • 替换原代码中的pg.DateAxisItem为自定义的CustomDateAxisItem,确保X轴始终显示指定格式的日期

内容的提问来源于stack exchange,提问作者Vik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 10:33:35