Skip to content

Commit 3cee835

Browse files
committed
implement legendrank
1 parent 296dbfb commit 3cee835

File tree

4 files changed

+29
-5
lines changed

4 files changed

+29
-5
lines changed

src/components/legend/get_legend_data.js

+17-5
Original file line numberDiff line numberDiff line change
@@ -71,21 +71,33 @@ module.exports = function getLegendData(calcdata, opts) {
7171
var ltraces;
7272
var legendData;
7373

74+
// sort considering trace.legendrank and legend.traceorder
75+
var dir = helpers.isReversed(opts) ? -1 : 1;
76+
var orderFn = function(a, b) {
77+
var A = a[0].trace;
78+
var B = b[0].trace;
79+
var delta = A.legendrank - B.legendrank;
80+
if(!delta) delta = A.index - B.index;
81+
82+
return dir * delta;
83+
};
84+
7485
if(hasOneNonBlankGroup && helpers.isGrouped(opts)) {
7586
legendData = new Array(lgroupsLength);
7687

7788
for(i = 0; i < lgroupsLength; i++) {
7889
ltraces = lgroupToTraces[lgroups[i]];
79-
legendData[i] = helpers.isReversed(opts) ? ltraces.reverse() : ltraces;
90+
legendData[i] = ltraces.sort(orderFn);
8091
}
8192
} else {
8293
// collapse all groups into one if all groups are blank
83-
legendData = [new Array(lgroupsLength)];
84-
94+
legendData = [[]];
8595
for(i = 0; i < lgroupsLength; i++) {
86-
ltraces = lgroupToTraces[lgroups[i]][0];
87-
legendData[0][helpers.isReversed(opts) ? lgroupsLength - i - 1 : i] = ltraces;
96+
legendData[0].push(
97+
lgroupToTraces[lgroups[i]][0]
98+
);
8899
}
100+
legendData[0] = legendData[0].sort(orderFn);
89101
lgroupsLength = 1;
90102
}
91103

src/plots/attributes.js

+10
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,16 @@ module.exports = {
4141
'when toggling legend items.'
4242
].join(' ')
4343
},
44+
legendrank: {
45+
valType: 'number',
46+
dflt: 1000,
47+
editType: 'style',
48+
description: [
49+
'Sets the legend rank for this trace.',
50+
'Items with smaller ranks would be presented on top/left side while',
51+
'with `*reversed* `legend.traceorder` they would be on bottom/right side.'
52+
].join(' ')
53+
},
4454
opacity: {
4555
valType: 'number',
4656
min: 0,

src/plots/plots.js

+1
Original file line numberDiff line numberDiff line change
@@ -1309,6 +1309,7 @@ plots.supplyTraceDefaults = function(traceIn, traceOut, colorIndex, layout, trac
13091309
);
13101310

13111311
coerce('legendgroup');
1312+
coerce('legendrank');
13121313

13131314
traceOut._dfltShowLegend = true;
13141315
} else {

src/traces/parcats/attributes.js

+1
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ module.exports = {
198198
hoverlabel: undefined,
199199
ids: undefined,
200200
legendgroup: undefined,
201+
legendrank: undefined,
201202
opacity: undefined,
202203
selectedpoints: undefined,
203204
showlegend: undefined

0 commit comments

Comments
 (0)