Plotly.js: Event data for transformed traces is inconsistent

Created on 22 Jun 2017  路  13Comments  路  Source: plotly/plotly.js

This plot is throws an error whenever I hover in 1.28.2:

https://codepen.io/rsreusser/pen/bRRBjg

Uncaught TypeError: Cannot read property 'length' of undefined
    at Object.exports.appendArrayPointValue (plotly-1.28.2.js:113510)
    at _hover (plotly-1.28.2.js:113987)
    at Object.hover (plotly-1.28.2.js:113608)
    at SVGRectElement.maindrag.onmousemove (plotly-1.28.2.js:138465)

Apologies this isn't a simpler plot type, but I've noticed this while working on groupby and the splinter tests now seem to be failing because of it. I tried and failed to reproduce it with a plain codepen, so this is the first time I've been able to reproduce it in a couple lines.

bug

Most helpful comment

A quick note about this ticket post-https://github.com/plotly/plotly.js/pull/2162 (see also https://github.com/plotly/plotly.js/issues/2128) where all transforms now compute indexToPoints map objects.

Adding indexToPoints to the ohlc and candlestick transform modules could somewhat easily resolve this ticket here.

That said, I think we should instead spend the time (not more than 1-week) rewriting ohlc and candlestick w/o transforms altogether. Making ohlc and candlestick _conventional_ trace types with there own calc step and thoughtfully reusing Scatter.plot and Box.plot in their plot step would make them a lot less painful to work with (especially in the plotly workspace and for fixing https://github.com/plotly/plotly.js/issues/2004).

All 13 comments

I don't know for sure, but it appears trace._arrayAttrs is undefined sometimes. That causes a failure on this line. Is the solution to simply return if there are no arrayAttrs?

Thanks for heads-up.

That codepen you linked is blank. We should add a test before merging your PR

Oh hacky finance charts!

To be clear, I did see it on other trace types but wasn't able to reproduce it despite copying the JSON verbatim from gd.data in the workspace. I was a bit confused, so I jumped on this reproduction, despite the OHLC.

I did see it on other trace types but wasn't able to reproduce it despite copying the JSON verbatim from gd.data in the workspace. I was a bit confused, so I jumped on this reproduction, despite the OHL

Ok. In this case, the adding a fallback for undefined _arrayAttrs would be safest and best.

I'll like to get a fix in today, so I'll try to a few test cases to your https://github.com/plotly/plotly.js/pull/1808 PR. Thanks again for spotting this!

Ok. In this case, the adding a fallback for undefined _arrayAttrs would be safest and best.

That's the simplest solution... but that'll mean transformed traces will lose access to these attributes, exactly when they're most useful, won't it? Would it be better to recalculate _arrayAttrs after running the transforms?

@rreusser 's https://github.com/plotly/plotly.js/pull/1808 brought back hover for finance traces, but this issue isn't completely resolved.

Event data for finance traces and, more generally, all transformed traces isn't currently showing all array attribute values as what PR https://github.com/plotly/plotly.js/pull/1770 put forward for _non-transformed_ traces.

Changing the issue title accordingly.

Yeah, I definitely prefer to fix these issues and not have failsafes in place for internal code.

A quick note about this ticket post-https://github.com/plotly/plotly.js/pull/2162 (see also https://github.com/plotly/plotly.js/issues/2128) where all transforms now compute indexToPoints map objects.

Adding indexToPoints to the ohlc and candlestick transform modules could somewhat easily resolve this ticket here.

That said, I think we should instead spend the time (not more than 1-week) rewriting ohlc and candlestick w/o transforms altogether. Making ohlc and candlestick _conventional_ trace types with there own calc step and thoughtfully reusing Scatter.plot and Box.plot in their plot step would make them a lot less painful to work with (especially in the plotly workspace and for fixing https://github.com/plotly/plotly.js/issues/2004).

I'm facing this issue when I try to use candlestick plot. I'm assigning customdata, to determine which one was clicked on, however the values of customdata on a point in the callback are somewhat in a random order. It seems to be exactly the same issue as was described in #2095. customdata I get corresponds to pointNumer, and both are wrong.

This issue makes it impossible to use such chart as part of the interactive (cross-filtering) workflow in Dash, which is very frustrating.

Is there a usable workaround? This issue has been open for half a year, and I would really like to use this type of chart in Dash...

I can't think of any workaround at the moment.

PR https://github.com/plotly/plotly.js/pull/2126 (and followup https://github.com/plotly/plotly.js/pull/2162) put forward some foundation work that could be used to somewhat easily resolve this issue. Unfortunately, no plotly.js team member will dedicate time to this issue in the next 2-3 weeks. But if someone is interesting in making a PR, we'll gladly guide them through it.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

tim-sauchuk picture tim-sauchuk  路  3Comments

hashimmoosavi picture hashimmoosavi  路  3Comments

bryaan picture bryaan  路  3Comments

pynklu picture pynklu  路  3Comments

chriddyp picture chriddyp  路  3Comments