Skip to content

Commit 1fdf574

Browse files
committed
correct displaying percentages
1 parent d2b07b5 commit 1fdf574

File tree

5 files changed

+68
-44
lines changed

5 files changed

+68
-44
lines changed

src/traces/sunburst/fx.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ module.exports = function attachFxHandlers(sliceTop, entry, gd, cd, opts) {
4646
var cdi = pt.data.data;
4747
var ptNumber = cdi.i;
4848
var isRoot = helpers.isHierarchyRoot(pt);
49+
var isEntry = helpers.isEntry(pt);
4950

5051
var _cast = function(astr) {
5152
return Lib.castOption(traceNow, ptNumber, astr);
@@ -94,20 +95,20 @@ module.exports = function attachFxHandlers(sliceTop, entry, gd, cd, opts) {
9495
}
9596

9697
var tx;
97-
var prevTx;
98+
var allPercents = [];
9899
var insertPercent = function() {
99-
if(tx !== prevTx) { // no need to add redundant info
100+
if(allPercents.indexOf(tx) === -1) { // no need to add redundant info
100101
thisText.push(tx);
101-
prevTx = '' + tx; // i.e. deep copy
102+
allPercents.push(tx);
102103
}
103104
};
104105

105106
var val = getVal(cdi);
106107

107-
var ref2 = pt.parent;
108+
var ref2 = isEntry ? pt._parent : pt.parent;
108109
if(ref2 && getVal(ref2)) {
109110
hoverPt.percentParent = pt.percentParent = val / getVal(ref2);
110-
hoverPt.parent = pt.parent = helpers.getLabelString(ref2.data.data.label);
111+
hoverPt.parent = pt.parentString = helpers.getLabelString(isEntry ? ref2.label : ref2.data.data.label);
111112
if(hasFlag('percent parent')) {
112113
tx = helpers.formatPercent(hoverPt.percentParent, separators) + ' of ' + hoverPt.parent;
113114
insertPercent();
@@ -308,6 +309,8 @@ function makeEventData(pt, trace, keys) {
308309
var key = keys[i];
309310
if(key in pt) out[key] = pt[key];
310311
}
312+
// handle special case of parent
313+
if('parentString' in pt) out.parent = pt.parentString;
311314

312315
appendArrayPointValue(out, trace, cdi.i);
313316

src/traces/sunburst/helpers.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -155,9 +155,10 @@ exports.getLabelString = function(label) { // used in hover to reference to the
155155
};
156156

157157
exports.listPath = function(d, keyStr) {
158-
if(!d.parent) return [];
159-
var list = keyStr ? [d.parent.data[keyStr]] : [d];
160-
return exports.listPath(d.parent, keyStr).concat(list);
158+
var parent = d.parent;
159+
if(!parent) return [];
160+
var list = keyStr ? [parent.data[keyStr]] : [parent];
161+
return exports.listPath(parent, keyStr).concat(list);
161162
};
162163

163164
exports.getPath = function(d) {

src/traces/sunburst/plot.js

Lines changed: 49 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,13 @@ function plotOne(gd, cd, element, transitionOpts) {
8686
var trace = cd0.trace;
8787
var hierarchy = cd0.hierarchy;
8888
var entry = helpers.findEntryWithLevel(hierarchy, trace.level);
89+
var ancestorNodes = helpers.listPath(entry.data);
90+
var numAncestors = ancestorNodes.length;
91+
entry._parent = (numAncestors ?
92+
ancestorNodes[numAncestors - 1] :
93+
hierarchy // parent of root is itself
94+
).data;
95+
8996
var maxDepth = helpers.getMaxDepth(trace);
9097

9198
var gs = fullLayout._size;
@@ -482,9 +489,11 @@ exports.formatSliceLabel = function(pt, entry, trace, cd, fullLayout) {
482489
var hierarchy = cd0.hierarchy;
483490
var ref;
484491
var calcPercent = function() {
492+
var refData = ref.data ? ref.data.data : ref;
493+
485494
return cdi.hasOwnProperty('v') ?
486-
cdi.v / ref.data.data.v :
487-
cdi.value / ref.data.data.value;
495+
cdi.v / refData.v :
496+
cdi.value / refData.value;
488497
};
489498

490499
if(trace.type === 'treemap' && helpers.isHeader(pt, trace)) {
@@ -504,6 +513,8 @@ exports.formatSliceLabel = function(pt, entry, trace, cd, fullLayout) {
504513
var hasFlag = function(flag) { return parts.indexOf(flag) !== -1; };
505514
var thisText = [];
506515
var tx;
516+
var parent = helpers.isEntry(pt) ? pt._parent : pt.parent;
517+
var isRoot = helpers.isHierarchyRoot(pt);
507518

508519
if(hasFlag('label') && cdi.label) {
509520
thisText.push(cdi.label);
@@ -513,41 +524,43 @@ exports.formatSliceLabel = function(pt, entry, trace, cd, fullLayout) {
513524
thisText.push(helpers.formatValue(cdi.v, separators));
514525
}
515526

516-
if(hasFlag('current path')) {
517-
thisText.push(helpers.getPath(pt.data));
518-
}
519-
520-
var nPercent = 0;
521-
if(hasFlag('percent parent')) nPercent++;
522-
if(hasFlag('percent entry')) nPercent++;
523-
if(hasFlag('percent root')) nPercent++;
524-
var hasMultiplePercents = nPercent > 1;
525-
526-
if(nPercent) {
527-
var percent;
528-
var addPercent = function(key) {
529-
tx = helpers.formatPercent(percent, separators);
530-
531-
if(hasMultiplePercents) tx += ' of ' + key + ' ';
532-
thisText.push(tx);
533-
};
534-
535-
var makePercent = function(key) {
536-
percent = calcPercent();
537-
addPercent(key);
538-
};
539-
540-
if(hasFlag('percent parent') && pt.parent) {
541-
ref = pt.parent;
542-
makePercent('parent');
527+
if(!isRoot) {
528+
if(hasFlag('current path')) {
529+
thisText.push(helpers.getPath(pt.data));
543530
}
544-
if(hasFlag('percent entry') && pt.parent) {
545-
ref = entry;
546-
makePercent('entry');
547-
}
548-
if(hasFlag('percent root') && (pt.parent || helpers.isLeaf(pt))) {
549-
ref = hierarchy;
550-
makePercent('root');
531+
532+
var nPercent = 0;
533+
if(hasFlag('percent parent')) nPercent++;
534+
if(hasFlag('percent entry')) nPercent++;
535+
if(hasFlag('percent root')) nPercent++;
536+
var hasMultiplePercents = nPercent > 1;
537+
538+
if(nPercent) {
539+
var percent;
540+
var addPercent = function(key) {
541+
tx = helpers.formatPercent(percent, separators);
542+
543+
if(hasMultiplePercents) tx += ' of ' + key + ' ';
544+
thisText.push(tx);
545+
};
546+
547+
var makePercent = function(key) {
548+
percent = calcPercent();
549+
addPercent(key);
550+
};
551+
552+
if(hasFlag('percent parent') && parent) {
553+
ref = parent;
554+
makePercent('parent');
555+
}
556+
if(hasFlag('percent entry') && parent) {
557+
ref = entry;
558+
makePercent('entry');
559+
}
560+
if(hasFlag('percent root') && (parent || helpers.isLeaf(pt))) {
561+
ref = hierarchy;
562+
makePercent('root');
563+
}
551564
}
552565
}
553566

src/traces/treemap/plot.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,13 @@ function plotOne(gd, cd, element, transitionOpts) {
7979
var hasTransition = helpers.hasTransition(transitionOpts);
8080

8181
var entry = helpers.findEntryWithLevel(hierarchy, trace.level);
82+
var ancestorNodes = helpers.listPath(entry.data);
83+
var numAncestors = ancestorNodes.length;
84+
entry._parent = (numAncestors ?
85+
ancestorNodes[numAncestors - 1] :
86+
hierarchy // parent of root is itself
87+
).data;
88+
8289
var maxDepth = helpers.getMaxDepth(trace);
8390
var hasVisibleDepth = function(pt) {
8491
return pt.data.depth - entry.data.depth < maxDepth;
5.7 KB
Loading

0 commit comments

Comments
 (0)