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)
]
Это создает ось как это:
Я бы хотел, чтобы ось была точной с точностью до секунды для увеличения масштаба диаграмм. В настоящее время это все усреднение и поля погрешностей. Любая помощь будет оценена.