piker icon indicating copy to clipboard operation
piker copied to clipboard

Try `m4` algo for OHLC flattened line tracer?

Open goodboy opened this issue 3 years ago • 1 comments

Currently our OHLC sampling (bars) graphics convert to a line curve when the user zooms out enough that you can't visually distinguish a bar's shape (uppx is way too high to represent them per horizonal pixel).

To convert to this line we currently use a structured array flattener routine which uses np.recfunctions.structure_to_unstructured(): ohlc_to_line().

In theory we can actually just use our m4 implementation to post-process either this flattened output or write an OHLC aware version which iterates the ['high', 'low'] fields of the input array when computing max/min values. In other words the y input could be pre-processed from another (numba) routine which flattens only the high/low values from the OHLC struct array and then feeds them into this same function. The caveat will be making sure the x input is sized to match 🤔

This is definitely not a high priority task but may be interesting to tinker with especially in the context of overloading ds_m4() for other types of aggregation schemes (eg. as we still need with vlm in #326).

goodboy avatar Jun 04 '22 17:06 goodboy

As follow up after the huge rework in #420 and it's derivative child PRs (ending in https://github.com/pikers/piker/pull/455), the 2 main spots that pertain to this are:

  • piker.data._pathops.ohlc_flatten() which is currently unused
  • and .path_arrays_from_ohlc() which is used in the rendering subsys for OHLC graphics downsampling

goodboy avatar Apr 27 '23 18:04 goodboy