From 5c2d3125b477a236a64b368e80db7dcb43a8c47e Mon Sep 17 00:00:00 2001 From: Tyler Goodlet Date: Mon, 17 Jan 2022 18:56:58 -0500 Subject: [PATCH] Add vlm axis titles and humanized $vlm y-range --- piker/ui/_fsp.py | 139 ++++++++++++++++++++++++++++------------------- 1 file changed, 83 insertions(+), 56 deletions(-) diff --git a/piker/ui/_fsp.py b/piker/ui/_fsp.py index 12fe9a69..ea4b46cb 100644 --- a/piker/ui/_fsp.py +++ b/piker/ui/_fsp.py @@ -33,7 +33,9 @@ import pyqtgraph as pg import trio from trio_typing import TaskStatus +from ._axes import PriceAxis from .._cacheables import maybe_open_context +from ..calc import humanize from ..data._sharedmem import ( ShmArray, maybe_open_shm_array, @@ -661,73 +663,98 @@ async def open_vlm_displays( # size view to data once at outset chart.view._set_yrange() - if not dvlm: - return + # add axis title + axis = chart.getAxis('right') + axis.set_title(' vlm') - # spawn and overlay $ vlm on the same subchart - shm, started = await admin.start_engine_task( - 'dolla_vlm', - # linked.symbol.front_feed(), # data-feed symbol key - { # fsp engine conf - 'func_name': 'dolla_vlm', - 'zero_on_step': True, - 'params': { - 'price_func': { - 'default_value': 'chl3', + if dvlm: + + # spawn and overlay $ vlm on the same subchart + shm, started = await admin.start_engine_task( + 'dolla_vlm', + # linked.symbol.front_feed(), # data-feed symbol key + { # fsp engine conf + 'func_name': 'dolla_vlm', + 'zero_on_step': True, + 'params': { + 'price_func': { + 'default_value': 'chl3', + }, }, }, - }, - # loglevel, - ) - # profiler(f'created shm for fsp actor: {display_name}') + # loglevel, + ) + # profiler(f'created shm for fsp actor: {display_name}') - await started.wait() + await started.wait() - pi = chart.overlay_plotitem( - 'dolla_vlm', - ) - # add custom auto range handler - pi.vb._maxmin = partial(maxmin, name='dolla_vlm') + pi = chart.overlay_plotitem( + 'dolla_vlm', + axis_kwargs={ + # 'humanize': True, + # 'text': 'dvlm', + 'typical_max_str': ' 99.9 M ', + 'formatter': partial( + humanize, + digits=2, + ), + }, - curve, _ = chart.draw_curve( + ) - name='dolla_vlm', - data=shm.array, + # add axis title + raxis = pi.getAxis('right') + raxis.set_title(' $vlm', view=pi.getViewBox()) - array_key='dolla_vlm', - overlay=pi, - color='charcoal', - step_mode=True, - # **conf.get('chart_kwargs', {}) - ) - # TODO: is there a way to "sync" the dual axes such that only - # one curve is needed? - # curve.hide() + # add custom auto range handler + pi.vb._maxmin = partial(maxmin, name='dolla_vlm') - # TODO: we need a better API to do this.. - # specially store ref to shm for lookup in display loop - # since only a placeholder of `None` is entered in - # ``.draw_curve()``. - chart._overlays['dolla_vlm'] = shm + curve, _ = chart.draw_curve( - # XXX: old dict-style config before it was moved into the helper task - # 'dolla_vlm': { - # 'func_name': 'dolla_vlm', - # 'zero_on_step': True, - # 'overlay': 'volume', - # 'separate_axes': True, - # 'params': { - # 'price_func': { - # 'default_value': 'chl3', - # # tell target ``Edit`` widget to not allow - # # edits for now. - # 'widget_kwargs': {'readonly': True}, - # }, - # }, - # 'chart_kwargs': {'step_mode': True} - # }, + name='dolla_vlm', + data=shm.array, - # } + array_key='dolla_vlm', + overlay=pi, + color='charcoal', + step_mode=True, + # **conf.get('chart_kwargs', {}) + ) + # TODO: is there a way to "sync" the dual axes such that only + # one curve is needed? + # curve.hide() + + # TODO: we need a better API to do this.. + # specially store ref to shm for lookup in display loop + # since only a placeholder of `None` is entered in + # ``.draw_curve()``. + chart._overlays['dolla_vlm'] = shm + + # XXX: old dict-style config before it was moved into the + # helper task + # 'dolla_vlm': { + # 'func_name': 'dolla_vlm', + # 'zero_on_step': True, + # 'overlay': 'volume', + # 'separate_axes': True, + # 'params': { + # 'price_func': { + # 'default_value': 'chl3', + # # tell target ``Edit`` widget to not allow + # # edits for now. + # 'widget_kwargs': {'readonly': True}, + # }, + # }, + # 'chart_kwargs': {'step_mode': True} + # }, + + # } + + for name, axis_info in pi.axes.items(): + # lol this sux XD + axis = axis_info['item'] + if isinstance(axis, PriceAxis): + axis.size_to_values() # built-in vlm fsps for display_name, conf in {