Skip to content

Commit a853521

Browse files
committed
add alignmentgroup and offsetgroup to bar and violin traces
1 parent 6eb9b1d commit a853521

9 files changed

+1065
-9
lines changed

src/traces/box/attributes.js

+4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
'use strict';
1010

1111
var scatterAttrs = require('../scatter/attributes');
12+
var barAttrs = require('../bar/attributes');
1213
var colorAttrs = require('../../components/color/attributes');
1314
var extendFlat = require('../../lib/extend').extendFlat;
1415

@@ -250,6 +251,9 @@ module.exports = {
250251
},
251252
fillcolor: scatterAttrs.fillcolor,
252253

254+
offsetgroup: barAttrs.offsetgroup,
255+
alignmentgroup: barAttrs.alignmentgroup,
256+
253257
selected: {
254258
marker: scatterAttrs.selected.marker,
255259
editType: 'style'

src/traces/box/cross_trace_calc.js

+20-8
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,6 @@ function setPositionOffset(traceType, gd, boxList, posAxis) {
5151
var axId = posAxis._id;
5252
var axLetter = axId.charAt(0);
5353

54-
// N.B. reused in violin
55-
var numKey = traceType === 'violin' ? '_numViolins' : '_numBoxes';
56-
5754
var i, j, calcTrace;
5855
var pointList = [];
5956
var shownPts = 0;
@@ -76,8 +73,9 @@ function setPositionOffset(traceType, gd, boxList, posAxis) {
7673
// check for forced minimum dtick
7774
Axes.minDtick(posAxis, boxdv.minDiff, boxdv.vals[0], true);
7875

79-
var num = fullLayout[numKey];
80-
var group = (fullLayout[traceType + 'mode'] === 'group' && num > 1);
76+
var numKey = traceType === 'violin' ? '_numViolins' : '_numBoxes';
77+
var numTotal = fullLayout[numKey];
78+
var group = fullLayout[traceType + 'mode'] === 'group' && numTotal > 1;
8179
var groupFraction = 1 - fullLayout[traceType + 'gap'];
8280
var groupGapFraction = 1 - fullLayout[traceType + 'groupgap'];
8381

@@ -104,9 +102,23 @@ function setPositionOffset(traceType, gd, boxList, posAxis) {
104102
bPos = 0;
105103
} else {
106104
dPos = dPos0;
107-
bdPos = dPos * groupFraction * groupGapFraction / (group ? num : 1);
108-
bPos = group ? 2 * dPos * (-0.5 + (t.num + 0.5) / num) * groupFraction : 0;
109-
wHover = dPos * (group ? groupFraction / num : 1);
105+
106+
if(group) {
107+
var groupId = posAxis._id + trace.orientation;
108+
var alignmentGroups = fullLayout._alignmentOpts[groupId] || {};
109+
var alignmentGroupOpts = alignmentGroups[trace.alignmentgroup] || {};
110+
var nOffsetGroups = Object.keys(alignmentGroupOpts.offsetGroups || {}).length;
111+
var num = nOffsetGroups || numTotal;
112+
var shift = nOffsetGroups ? trace._offsetIndex : t.num;
113+
114+
bdPos = dPos * groupFraction * groupGapFraction / num;
115+
bPos = 2 * dPos * (-0.5 + (shift + 0.5) / num) * groupFraction;
116+
wHover = dPos * groupFraction / num;
117+
} else {
118+
bdPos = dPos * groupFraction * groupGapFraction;
119+
bPos = 0;
120+
wHover = dPos;
121+
}
110122
}
111123
t.dPos = dPos;
112124
t.bPos = bPos;

src/traces/box/defaults.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
var Lib = require('../../lib');
1212
var Registry = require('../../registry');
1313
var Color = require('../../components/color');
14-
14+
var handleGroupingDefaults = require('../bar/defaults').handleGroupingDefaults;
1515
var attributes = require('./attributes');
1616

1717
function supplyDefaults(traceIn, traceOut, defaultColor, layout) {
@@ -34,6 +34,7 @@ function supplyDefaults(traceIn, traceOut, defaultColor, layout) {
3434
if(notched) coerce('notchwidth');
3535

3636
handlePointsDefaults(traceIn, traceOut, coerce, {prefix: 'box'});
37+
handleGroupingDefaults(traceIn, traceOut, layout, coerce);
3738
}
3839

3940
function handleSampleDefaults(traceIn, traceOut, coerce, layout) {

src/traces/violin/attributes.js

+3
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,9 @@ module.exports = {
238238
].join(' ')
239239
},
240240

241+
offsetgroup: boxAttrs.offsetgroup,
242+
alignmentgroup: boxAttrs.alignmentgroup,
243+
241244
selected: boxAttrs.selected,
242245
unselected: boxAttrs.unselected,
243246

src/traces/violin/defaults.js

+3
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ var Lib = require('../../lib');
1212
var Color = require('../../components/color');
1313

1414
var boxDefaults = require('../box/defaults');
15+
var handleGroupingDefaults = require('../bar/defaults').handleGroupingDefaults;
1516
var attributes = require('./attributes');
1617

1718
module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout) {
@@ -56,4 +57,6 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
5657
var meanLineWidth = coerce2('meanline.width', lineWidth);
5758
var meanLineVisible = coerce('meanline.visible', Boolean(meanLineColor || meanLineWidth));
5859
if(!meanLineVisible) traceOut.meanline = {visible: false};
60+
61+
handleGroupingDefaults(traceIn, traceOut, layout, coerce);
5962
};
52.2 KB
Loading
50.5 KB
Loading

0 commit comments

Comments
 (0)