Move axis-tick-values lru caching into our existing `Axis`
parent
be24473fb4
commit
e71bd2cb1e
|
@ -39,12 +39,17 @@ class Axis(pg.AxisItem):
|
|||
'''
|
||||
A better axis that sizes tick contents considering font size.
|
||||
|
||||
Also includes tick values lru caching originally proposed in but never
|
||||
accepted upstream:
|
||||
https://github.com/pyqtgraph/pyqtgraph/pull/2160
|
||||
|
||||
'''
|
||||
def __init__(
|
||||
self,
|
||||
linkedsplits,
|
||||
typical_max_str: str = '100 000.000',
|
||||
text_color: str = 'bracket',
|
||||
lru_cache_tick_strings: bool = True,
|
||||
**kwargs
|
||||
|
||||
) -> None:
|
||||
|
@ -91,6 +96,34 @@ class Axis(pg.AxisItem):
|
|||
# size the pertinent axis dimension to a "typical value"
|
||||
self.size_to_values()
|
||||
|
||||
# NOTE: requires override ``.tickValues()`` method seen below.
|
||||
if lru_cache_tick_strings:
|
||||
self.tickStrings = lru_cache(
|
||||
maxsize=2**20
|
||||
)(self.tickStrings)
|
||||
|
||||
# NOTE: only overriden to cast tick values entries into tuples
|
||||
# for use with the lru caching.
|
||||
def tickValues(
|
||||
self,
|
||||
minVal: float,
|
||||
maxVal: float,
|
||||
size: int,
|
||||
|
||||
) -> list[tuple[float, tuple[str]]]:
|
||||
'''
|
||||
Repack tick values into tuples for lru caching.
|
||||
|
||||
'''
|
||||
ticks = []
|
||||
for scalar, values in super().tickValues(minVal, maxVal, size):
|
||||
ticks.append((
|
||||
scalar,
|
||||
tuple(values), # this
|
||||
))
|
||||
|
||||
return ticks
|
||||
|
||||
@property
|
||||
def text_color(self) -> str:
|
||||
return self._text_color
|
||||
|
|
|
@ -22,7 +22,6 @@ Generally, our does not require "scentific precision" for pixel perfect
|
|||
view transforms.
|
||||
|
||||
"""
|
||||
import functools
|
||||
from typing import Optional
|
||||
|
||||
import pyqtgraph as pg
|
||||
|
@ -52,7 +51,6 @@ def _do_overrides() -> None:
|
|||
# we don't care about potential fp issues inside Qt
|
||||
pg.functions.invertQTransform = invertQTransform
|
||||
pg.PlotItem = PlotItem
|
||||
pg.AxisItem = AxisItem
|
||||
|
||||
|
||||
# NOTE: the below customized type contains all our changes on a method
|
||||
|
@ -211,7 +209,7 @@ class PlotItem(pg.PlotItem):
|
|||
# adding this is without it there's some weird
|
||||
# ``ViewBox`` geometry bug.. where a gap for the
|
||||
# 'bottom' axis is somehow left in?
|
||||
axis = AxisItem(orientation=name, parent=self)
|
||||
axis = pg.AxisItem(orientation=name, parent=self)
|
||||
|
||||
axis.linkToView(self.vb)
|
||||
|
||||
|
@ -260,59 +258,3 @@ class PlotItem(pg.PlotItem):
|
|||
# self.getAxis('bottom').setGrid(x)
|
||||
# self.getAxis('left').setGrid(y)
|
||||
# self.getAxis('right').setGrid(y)
|
||||
|
||||
|
||||
# NOTE: overrides to lru_cache the ``.tickStrings()`` output.
|
||||
class AxisItem(pg.AxisItem):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
orientation,
|
||||
pen=None,
|
||||
textPen=None,
|
||||
linkView=None,
|
||||
parent=None,
|
||||
maxTickLength=-5,
|
||||
showValues=True,
|
||||
text='',
|
||||
units='',
|
||||
unitPrefix='',
|
||||
lru_cache_tick_strings: bool = True,
|
||||
**args,
|
||||
):
|
||||
super().__init__(
|
||||
orientation=orientation,
|
||||
pen=pen,
|
||||
textPen=textPen,
|
||||
linkView=linkView,
|
||||
maxTickLength=maxTickLength,
|
||||
showValues=showValues,
|
||||
text=text,
|
||||
units=units,
|
||||
unitPrefix=unitPrefix,
|
||||
parent=parent,
|
||||
)
|
||||
if lru_cache_tick_strings:
|
||||
self.tickStrings = functools.lru_cache(
|
||||
maxsize=2**20
|
||||
)(self.tickStrings)
|
||||
|
||||
def tickValues(
|
||||
self,
|
||||
minVal: float,
|
||||
maxVal: float,
|
||||
size: int,
|
||||
|
||||
) -> list[tuple[float, tuple[str]]]:
|
||||
'''
|
||||
Repack tick values into tuples for lru caching.
|
||||
|
||||
'''
|
||||
ticks = []
|
||||
for scalar, values in super().tickValues(minVal, maxVal, size):
|
||||
ticks.append((
|
||||
scalar,
|
||||
tuple(values), # this
|
||||
))
|
||||
|
||||
return ticks
|
||||
|
|
Loading…
Reference in New Issue