PyQt AxisItem переменный интервал между тиками

Я пытаюсь реализовать кастом AxisItem в pyqtgraph отображать метки времени Unix в виде удобочитаемой даты / времени.

Я смог отобразить отметки времени в виде отформатированной строки даты на оси, но в настоящее время AxisItem выбор отображения основан на целочисленном значении отметки времени, что приводит к отображению на графиках произвольных тиков.

Это tickSpacing Метод, который я переопределил, чтобы попытаться определить количество секунд в годах, чтобы галочки отображались аккуратно. Однако, кажется, что он принимает только один интервал между тиками для каждого из основных / второстепенных шагов. Поскольку количество секунд в каждом году будет очень, это не синхронизировано.

Есть ли способ для меня, чтобы лучше переопределить AxisItem учесть переменный интервал, составляющий каждый тик?

Вот моя реализация до сих пор:

from datetime import datetime

import PySide
import pyqtgraph as pg

from dateutil.relativedelta import relativedelta
from dateutil.rrule import rrule, YEARLY


class TimeAxisItem(pg.AxisItem):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def tickStrings(self, values, scale, spacing):
        # PySide's QTime() initialiser fails miserably and dismisses args/kwargs
        datetimes = [datetime.fromtimestamp(value) for value in values]
        return ['{:%Y}'.format(dt) for dt in datetimes]

    def tickSpacing(self, minVal, maxVal, size):
        min_, max_ = datetime.fromtimestamp(minVal), datetime.fromtimestamp(maxVal)

        year_ticks = [dt.timestamp() for dt in rrule(YEARLY, dtstart=min_, until=max_)]
        year_spacing = [r-l for l, r in zip(year_ticks, year_ticks[1:])]

        month_ticks = [dt.timestamp() for dt in rrule(MONTHLY, dtstart=min_, until=max_)]
        month_spacing = [r-l for l, r in zip(month_ticks, month_ticks[1:])]

        return [
            (sum(year_spacing)/len(year_spacing), 0),
            (sum(month_spacing)/len(month_spacing), 0)
        ]

Это создает ось как это:

Я бы хотел, чтобы ось была точной с точностью до секунды для увеличения масштаба диаграмм. В настоящее время это все усреднение и поля погрешностей. Любая помощь будет оценена.

0 ответов

Другие вопросы по тегам