-
-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Ensure axis autorange is computed after transform operations #1260
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 2 commits
0003e22
30a7960
775dbb5
47356cd
c9044fa
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -1921,8 +1921,9 @@ plots.transition = function(gd, data, layout, traces, frameOpts, transitionOpts) | |
plots.doCalcdata = function(gd, traces) { | ||
var axList = Plotly.Axes.list(gd), | ||
fullData = gd._fullData, | ||
fullLayout = gd._fullLayout, | ||
i, j; | ||
fullLayout = gd._fullLayout; | ||
|
||
var trace, _module, i, j; | ||
|
||
// XXX: Is this correct? Needs a closer look so that *some* traces can be recomputed without | ||
// *all* needing doCalcdata: | ||
|
@@ -1951,46 +1952,51 @@ plots.doCalcdata = function(gd, traces) { | |
axList[i]._categories = axList[i]._initialCategories.slice(); | ||
} | ||
|
||
// If traces were specified and this trace was not included, | ||
// then transfer it over from the old calcdata: | ||
for(i = 0; i < fullData.length; i++) { | ||
// If traces were specified and this trace was not included, then transfer it over from | ||
// the old calcdata: | ||
if(Array.isArray(traces) && traces.indexOf(i) === -1) { | ||
calcdata[i] = oldCalcdata[i]; | ||
continue; | ||
} | ||
|
||
var trace = fullData[i], | ||
cd = []; | ||
|
||
// If traces were specified and this trace was not included, then transfer it over from | ||
// the old calcdata: | ||
if(Array.isArray(traces) && traces.indexOf(i) === -1) { | ||
calcdata[i] = oldCalcdata[i]; | ||
continue; | ||
} | ||
} | ||
|
||
var _module; | ||
if(trace.visible === true) { | ||
// transform loop | ||
for(i = 0; i < fullData.length; i++) { | ||
trace = fullData[i]; | ||
|
||
// call calcTransform method if any | ||
if(trace.transforms) { | ||
if(trace.visible === true && trace.transforms) { | ||
_module = trace._module; | ||
|
||
// we need one round of trace module calc before | ||
// the calc transform to 'fill in' the categories list | ||
// used for example in the data-to-coordinate method | ||
_module = trace._module; | ||
if(_module && _module.calc) _module.calc(gd, trace); | ||
// we need one round of trace module calc before | ||
// the calc transform to 'fill in' the categories list | ||
// used for example in the data-to-coordinate method | ||
if(_module && _module.calc) _module.calc(gd, trace); | ||
|
||
for(j = 0; j < trace.transforms.length; j++) { | ||
var transform = trace.transforms[j]; | ||
for(j = 0; j < trace.transforms.length; j++) { | ||
var transform = trace.transforms[j]; | ||
|
||
_module = transformsRegistry[transform.type]; | ||
if(_module && _module.calcTransform) { | ||
_module.calcTransform(gd, trace, transform); | ||
} | ||
_module = transformsRegistry[transform.type]; | ||
if(_module && _module.calcTransform) { | ||
_module.calcTransform(gd, trace, transform); | ||
} | ||
} | ||
} | ||
} | ||
|
||
// clear stuff ... | ||
for(i = 0; i < axList.length; i++) { | ||
axList[i]._min = []; | ||
axList[i]._max = []; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. note to self: maybe we should clear There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. done in 775dbb5 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Cool - note though that this only fixes the first part of 1181, not the variant of it mentioned in #1181 (comment) |
||
} | ||
|
||
// 'regular' loop | ||
for(i = 0; i < fullData.length; i++) { | ||
var cd = []; | ||
|
||
trace = fullData[i]; | ||
|
||
if(trace.visible === true) { | ||
_module = trace._module; | ||
if(_module && _module.calc) cd = _module.calc(gd, trace); | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I know this part isn't new here, but... it isn't used anywhere, right? Looks to me like it was already broken by transforms (calcdata index and trace index aren't the same) and will be broken MORE by this PR (any trace not included will be dropped from autorange) so I'd remove it until we decide to do it right AND use it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
cc @rreusser
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah, is that a bug to be using that as an array index like that? If so, that may well be my fault. Unless I'm wrong, the intention was to reduce the work when animating. Use case: two traces. One contains 10MB of data, the other has two points. When animating the two points, it's best to avoid touching the 10MB trace. Perhaps we need to fix this.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
right, makes a lot of sense to want to do that. I guess for autorange we just need to store the various
_min
and_max
entries in a different way so we can selectively replace only the ones for the traces we're recalculating. And trace index, depending on how this gets used (it's not yet, right?) you just have to be careful about what you mean by index, before or after transforms potentially insert new traces.