Dynamically adjust y-range margin in display loop
When zoomed in alot, and thus a quote driven y-range resize takes place, it makes more sense to increase the `range_margin: float` input to `._set_yrange()` to ensure all L1 labels stay in view; generally the more zoomed in, - the smaller the y-range is and thus the larger the needed margin (on that range's dispersion diff) would be, - it's more likely to get a last datum move outside the previous range. Also, always do overlayT style scaling on the slow chart whenever it treads.storage_cli
parent
1e85668bc2
commit
2a4a5588a8
|
@ -264,7 +264,7 @@ async def increment_history_view(
|
|||
if liv:
|
||||
hist_viz.plot.vb.interact_graphics_cycle(
|
||||
do_linked_charts=False,
|
||||
do_overlay_scaling=False,
|
||||
do_overlay_scaling=True, # always overlayT slow chart
|
||||
)
|
||||
profiler('hist chart yrange view')
|
||||
|
||||
|
@ -560,9 +560,10 @@ def graphics_update_cycle(
|
|||
else:
|
||||
lmn = lmx = 0
|
||||
|
||||
mx: float = lmx
|
||||
mn: float = lmn
|
||||
mx: float = lmx
|
||||
mx_vlm_in_view: float | None = None
|
||||
yrange_margin = 0.09
|
||||
|
||||
# update ohlc sampled price bars
|
||||
if (
|
||||
|
@ -630,13 +631,15 @@ def graphics_update_cycle(
|
|||
price < mn
|
||||
):
|
||||
mn = price
|
||||
# print(f'{this_viz.name} new MN from TICK {mn}')
|
||||
yrange_margin = 0.16
|
||||
# # print(f'{this_viz.name} new MN from TICK {mn}')
|
||||
|
||||
if (
|
||||
price > mx
|
||||
):
|
||||
mx = price
|
||||
# print(f'{this_viz.name} new MX from TICK {mx}')
|
||||
yrange_margin = 0.16
|
||||
# # print(f'{this_viz.name} new MX from TICK {mx}')
|
||||
|
||||
# mx = max(price, mx)
|
||||
# mn = min(price, mn)
|
||||
|
@ -740,6 +743,18 @@ def graphics_update_cycle(
|
|||
liv
|
||||
and not chart._static_yrange == 'axis'
|
||||
):
|
||||
# NOTE: this auto-yranging approach is a sort of, hybrid,
|
||||
# between always aligning overlays to the their common ref
|
||||
# sample and not updating at all:
|
||||
# - whenever an interaction happens the overlays are scaled
|
||||
# to one another and thus are ref-point aligned and
|
||||
# scaled.
|
||||
# - on treads and range updates due to new mn/mx from last
|
||||
# datum, we don't scale to the overlayT instead only
|
||||
# adjusting when the latest datum is outside the previous
|
||||
# dispersion range.
|
||||
mn = min(mn, lmn)
|
||||
mx = max(mx, lmx)
|
||||
|
||||
if (
|
||||
main_vb._ic is None
|
||||
|
@ -748,8 +763,16 @@ def graphics_update_cycle(
|
|||
# print(f'SETTING Y-mnmx -> {main_viz.name}: {(mn, mx)}')
|
||||
this_vb.interact_graphics_cycle(
|
||||
do_linked_charts=False,
|
||||
# TODO: we could optionally offer always doing this
|
||||
# on treads thus always keeping fast-chart overlays
|
||||
# aligned by their LHS datum?
|
||||
do_overlay_scaling=False,
|
||||
yranges={this_viz: (mn, mx)},
|
||||
yrange_kwargs={
|
||||
this_viz: {
|
||||
'yrange': (mn, mx),
|
||||
'range_margin': yrange_margin,
|
||||
},
|
||||
}
|
||||
)
|
||||
profiler('main vb y-autorange')
|
||||
|
||||
|
@ -881,7 +904,12 @@ def graphics_update_cycle(
|
|||
main_vlm_viz.plot.vb.interact_graphics_cycle(
|
||||
do_overlay_scaling=True,
|
||||
do_linked_charts=False,
|
||||
yranges={main_vlm_viz: vlm_yrange},
|
||||
yrange_kwargs={
|
||||
main_vlm_viz: {
|
||||
'yrange': vlm_yrange,
|
||||
# 'range_margin': yrange_margin,
|
||||
},
|
||||
},
|
||||
)
|
||||
profiler('`vlm_chart.view.interact_graphics_cycle()`')
|
||||
|
||||
|
|
Loading…
Reference in New Issue