From 6eb9b1dcdbf8935163c4903dbf57e5f1e5d38123 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Fri, 8 Feb 2019 12:57:49 -0500 Subject: [PATCH 1/4] add alignmentgroup and offsetgroup to bar and histogram traces --- src/plots/plots.js | 2 + src/traces/bar/attributes.js | 22 + src/traces/bar/cross_trace_calc.js | 36 +- src/traces/bar/defaults.js | 52 +- src/traces/bar/index.js | 3 +- src/traces/histogram/attributes.js | 3 + src/traces/histogram/defaults.js | 4 +- test/image/baselines/bar-alignment-offset.png | Bin 0 -> 44057 bytes .../baselines/bar-grouping-vs-defaults.png | Bin 0 -> 25029 bytes test/image/baselines/bar-offsetgroups.png | Bin 0 -> 24050 bytes .../baselines/histogram-offsetgroups.png | Bin 0 -> 30247 bytes test/image/mocks/bar-alignment-offset.json | 547 ++++++++++++++++++ .../image/mocks/bar-grouping-vs-defaults.json | 61 ++ test/image/mocks/bar-offsetgroups.json | 88 +++ test/image/mocks/histogram-offsetgroups.json | 80 +++ 15 files changed, 883 insertions(+), 15 deletions(-) create mode 100644 test/image/baselines/bar-alignment-offset.png create mode 100644 test/image/baselines/bar-grouping-vs-defaults.png create mode 100644 test/image/baselines/bar-offsetgroups.png create mode 100644 test/image/baselines/histogram-offsetgroups.png create mode 100644 test/image/mocks/bar-alignment-offset.json create mode 100644 test/image/mocks/bar-grouping-vs-defaults.json create mode 100644 test/image/mocks/bar-offsetgroups.json create mode 100644 test/image/mocks/histogram-offsetgroups.json diff --git a/src/plots/plots.js b/src/plots/plots.js index 9fa2616a69e..cde651366e8 100644 --- a/src/plots/plots.js +++ b/src/plots/plots.js @@ -394,6 +394,8 @@ plots.supplyDefaults = function(gd, opts) { newFullLayout._scatterStackOpts = {}; // for the first scatter trace on each subplot (so it knows tonext->tozero) newFullLayout._firstScatter = {}; + // for grouped bar/box/violin trace to share config across traces + newFullLayout._alignmentOpts = {}; // for traces to request a default rangeslider on their x axes // eg set `_requestRangeslider.x2 = true` for xaxis2 diff --git a/src/traces/bar/attributes.js b/src/traces/bar/attributes.js index ea0694f077c..ab8bf1b00b2 100644 --- a/src/traces/bar/attributes.js +++ b/src/traces/bar/attributes.js @@ -174,6 +174,28 @@ module.exports = { marker: marker, + offsetgroup: { + valType: 'string', + role: 'info', + dflt: '', + editType: 'calc', + description: [ + 'Set several traces linked to the same position axis to the same', + 'offsetgroup where bars of the same position coordinate will line up.' + ].join(' ') + }, + alignmentgroup: { + valType: 'string', + role: 'info', + dflt: '', + editType: 'calc', + description: [ + 'Set several traces linked to the same position axis to the same', + 'alignmentgroup. This controls whether bars compute their positional', + 'range dependently or independently.' + ].join(' ') + }, + selected: { marker: { opacity: scatterAttrs.selected.marker.opacity, diff --git a/src/traces/bar/cross_trace_calc.js b/src/traces/bar/cross_trace_calc.js index 2a0224dc35e..f4ba937e47a 100644 --- a/src/traces/bar/cross_trace_calc.js +++ b/src/traces/bar/cross_trace_calc.js @@ -279,26 +279,42 @@ function setOffsetAndWidthInGroupMode(gd, pa, sieve) { var distinctPositions = sieve.distinctPositions; var minDiff = sieve.minDiff; var calcTraces = sieve.traces; + var nTraces = calcTraces.length; // if there aren't any overlapping positions, // let them have full width even if mode is group var overlap = (positions.length !== distinctPositions.length); - - var nTraces = calcTraces.length; var barGroupWidth = minDiff * (1 - bargap); - var barWidthPlusGap = (overlap) ? barGroupWidth / nTraces : barGroupWidth; - var barWidth = barWidthPlusGap * (1 - bargroupgap); + + var groupId = pa._id + calcTraces[0][0].trace.orientation; + var alignmentGroups = fullLayout._alignmentOpts[groupId] || {}; for(var i = 0; i < nTraces; i++) { var calcTrace = calcTraces[i]; - var t = calcTrace[0].t; + var trace = calcTrace[0].trace; - // computer bar group center and bar offset - var offsetFromCenter = overlap ? - ((2 * i + 1 - nTraces) * barWidthPlusGap - barWidth) / 2 : - -barWidth / 2; + var alignmentGroupOpts = alignmentGroups[trace.alignmentgroup] || {}; + var nOffsetGroups = Object.keys(alignmentGroupOpts.offsetGroups || {}).length; - // store bar width and offset for this trace + var barWidthPlusGap; + if(nOffsetGroups) { + barWidthPlusGap = barGroupWidth / nOffsetGroups; + } else { + barWidthPlusGap = overlap ? barGroupWidth / nTraces : barGroupWidth; + } + + var barWidth = barWidthPlusGap * (1 - bargroupgap); + + var offsetFromCenter; + if(nOffsetGroups) { + offsetFromCenter = ((2 * trace._offsetIndex + 1 - nOffsetGroups) * barWidthPlusGap - barWidth) / 2; + } else { + offsetFromCenter = overlap ? + ((2 * i + 1 - nTraces) * barWidthPlusGap - barWidth) / 2 : + -barWidth / 2; + } + + var t = calcTrace[0].t; t.barwidth = barWidth; t.poffset = offsetFromCenter; t.bargroupwidth = barGroupWidth; diff --git a/src/traces/bar/defaults.js b/src/traces/bar/defaults.js index b32a14d5cf2..1cdd29da629 100644 --- a/src/traces/bar/defaults.js +++ b/src/traces/bar/defaults.js @@ -6,7 +6,6 @@ * LICENSE file in the root directory of this source tree. */ - 'use strict'; var Lib = require('../../lib'); @@ -17,7 +16,7 @@ var handleXYDefaults = require('../scatter/xy_defaults'); var handleStyleDefaults = require('../bar/style_defaults'); var attributes = require('./attributes'); -module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout) { +function supplyDefaults(traceIn, traceOut, defaultColor, layout) { function coerce(attr, dflt) { return Lib.coerce(traceIn, traceOut, attributes, attr, dflt); } @@ -77,5 +76,54 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout errorBarsSupplyDefaults(traceIn, traceOut, lineColor || Color.defaultLine, {axis: 'y'}); errorBarsSupplyDefaults(traceIn, traceOut, lineColor || Color.defaultLine, {axis: 'x', inherit: 'y'}); + handleGroupingDefaults(traceIn, traceOut, layout, coerce); + Lib.coerceSelectionMarkerOpacity(traceOut, coerce); +} + +function handleGroupingDefaults(traceIn, traceOut, layout, coerce) { + var orientation = traceOut.orientation; + // TODO make this work across matching axes too?!? + // TODO should this work per trace-type? + // one set for bar/histogram another for box/violin? + // or just one set for all trace trace types? + var posAxId = traceOut[{v: 'x', h: 'y'}[orientation] + 'axis']; + var groupId = posAxId + orientation; + + var alignmentOpts = layout._alignmentOpts || {}; + var alignmentgroup = coerce('alignmentgroup'); + + var alignmentGroups = alignmentOpts[groupId]; + if(!alignmentGroups) alignmentGroups = alignmentOpts[groupId] = {}; + + var alignmentGroupOpts = alignmentGroups[alignmentgroup]; + + if(alignmentGroupOpts) { + alignmentGroupOpts.traces.push(traceOut); + } else { + alignmentGroupOpts = alignmentGroups[alignmentgroup] = { + traces: [traceOut], + alignmentIndex: Object.keys(alignmentGroups).length, + offsetGroups: {} + }; + } + + var offsetgroup = coerce('offsetgroup'); + var offsetGroups = alignmentGroupOpts.offsetGroups; + var offsetGroupOpts = offsetGroups[offsetgroup]; + + if(offsetgroup) { + if(!offsetGroupOpts) { + offsetGroupOpts = offsetGroups[offsetgroup] = { + offsetIndex: Object.keys(offsetGroups).length + }; + } + + traceOut._offsetIndex = offsetGroupOpts.offsetIndex; + } +} + +module.exports = { + supplyDefaults: supplyDefaults, + handleGroupingDefaults: handleGroupingDefaults }; diff --git a/src/traces/bar/index.js b/src/traces/bar/index.js index fa579dbf3fa..b024c48764f 100644 --- a/src/traces/bar/index.js +++ b/src/traces/bar/index.js @@ -6,14 +6,13 @@ * LICENSE file in the root directory of this source tree. */ - 'use strict'; var Bar = {}; Bar.attributes = require('./attributes'); Bar.layoutAttributes = require('./layout_attributes'); -Bar.supplyDefaults = require('./defaults'); +Bar.supplyDefaults = require('./defaults').supplyDefaults; Bar.supplyLayoutDefaults = require('./layout_defaults'); Bar.calc = require('./calc'); Bar.crossTraceCalc = require('./cross_trace_calc').crossTraceCalc; diff --git a/src/traces/histogram/attributes.js b/src/traces/histogram/attributes.js index 5391922a702..4433288d720 100644 --- a/src/traces/histogram/attributes.js +++ b/src/traces/histogram/attributes.js @@ -188,6 +188,9 @@ module.exports = { marker: barAttrs.marker, + offsetgroup: barAttrs.offsetgroup, + alignmentgroup: barAttrs.alignmentgroup, + selected: barAttrs.selected, unselected: barAttrs.unselected, diff --git a/src/traces/histogram/defaults.js b/src/traces/histogram/defaults.js index 747559f352a..6477b73fa7c 100644 --- a/src/traces/histogram/defaults.js +++ b/src/traces/histogram/defaults.js @@ -6,7 +6,6 @@ * LICENSE file in the root directory of this source tree. */ - 'use strict'; var Registry = require('../../registry'); @@ -14,6 +13,7 @@ var Lib = require('../../lib'); var Color = require('../../components/color'); var handleStyleDefaults = require('../bar/style_defaults'); +var handleGroupingDefaults = require('../bar/defaults').handleGroupingDefaults; var attributes = require('./attributes'); module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout) { @@ -70,4 +70,6 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout var errorBarsSupplyDefaults = Registry.getComponentMethod('errorbars', 'supplyDefaults'); errorBarsSupplyDefaults(traceIn, traceOut, lineColor || Color.defaultLine, {axis: 'y'}); errorBarsSupplyDefaults(traceIn, traceOut, lineColor || Color.defaultLine, {axis: 'x', inherit: 'y'}); + + handleGroupingDefaults(traceIn, traceOut, layout, coerce); }; diff --git a/test/image/baselines/bar-alignment-offset.png b/test/image/baselines/bar-alignment-offset.png new file mode 100644 index 0000000000000000000000000000000000000000..3c004bb69187fb1fbd46af43b806217b13be8adc GIT binary patch literal 44057 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

MINyDiw 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� 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 TT(W}*{^^}HK2xS;d;5O?CzJqc literal 0 HcmV?d00001 diff --git a/test/image/baselines/bar-grouping-vs-defaults.png b/test/image/baselines/bar-grouping-vs-defaults.png new file mode 100644 index 0000000000000000000000000000000000000000..6b5bb751dc1a259b170f036caba4770a76a65b07 GIT binary patch literal 25029 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 L*UGQne(?VQ08{|a literal 0 HcmV?d00001 diff --git a/test/image/baselines/bar-offsetgroups.png b/test/image/baselines/bar-offsetgroups.png new file mode 100644 index 0000000000000000000000000000000000000000..b5f400efa4ae611037bee5912775f0bbbb31a69d GIT binary patch literal 24050 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� zd>KcxP$a&@m;z~@lii5M+RaJ)l%Y9^Lwu~bNxa#g-X)>w22E9>dbV&8(Ivcpqw8(* zC1mfH6gJLyVj`Ix_y%tO6m`w!+k$k;-h+VUdQ|ThV|?U&>F{M#O5JNwuD>A@e0e)+ uhzp49{~Njaw^%layZzr(KOB2Z@HV-y5)D;r1hw1=)K#=^72doT`hNl8lb(VA literal 0 HcmV?d00001 diff --git a/test/image/baselines/histogram-offsetgroups.png b/test/image/baselines/histogram-offsetgroups.png new file mode 100644 index 0000000000000000000000000000000000000000..e2ecc685531ddf26230c7b4aef823f96003d5a38 GIT binary patch literal 30247 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 literal 0 HcmV?d00001 diff --git a/test/image/mocks/bar-alignment-offset.json b/test/image/mocks/bar-alignment-offset.json new file mode 100644 index 00000000000..a163a42fb91 --- /dev/null +++ b/test/image/mocks/bar-alignment-offset.json @@ -0,0 +1,547 @@ +{ + "data": [ + { + "type": "bar", + "marker": { + "color": "orange" + }, + "opacity": 0.6, + "name": "B", + "legendgroup": "B", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "a0", + "xaxis": "x", + "yaxis": "y", + "alignmentgroup": "a", + "offsetgroup": 0, + "x": [ + 1 + ], + "y": [ + 1 + ] + }, + { + "type": "bar", + "marker": { + "color": "orange" + }, + "opacity": 1, + "name": "B", + "legendgroup": "B", + "showlegend": true, + "hoverinfo": "text", + "hovertext": "a1", + "xaxis": "x", + "yaxis": "y", + "alignmentgroup": "a", + "offsetgroup": 1, + "x": [ + 1 + ], + "y": [ + 1 + ] + }, + { + "type": "bar", + "marker": { + "color": "blue" + }, + "opacity": 0.7, + "name": "A", + "legendgroup": "A", + "showlegend": true, + "hoverinfo": "text", + "hovertext": "a2", + "xaxis": "x", + "yaxis": "y", + "alignmentgroup": "a", + "offsetgroup": 2, + "x": [ + 1 + ], + "y": [ + 1 + ] + }, + { + "type": "bar", + "marker": { + "color": "orange" + }, + "opacity": 0.6, + "name": "B", + "legendgroup": "B", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "a0", + "xaxis": "x2", + "yaxis": "y2", + "alignmentgroup": "a", + "offsetgroup": 0, + "x": [ + 1 + ], + "y": [ + 1 + ] + }, + { + "type": "bar", + "marker": { + "color": "orange" + }, + "opacity": 1, + "name": "B", + "legendgroup": "B", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "a1", + "xaxis": "x2", + "yaxis": "y2", + "alignmentgroup": "a", + "offsetgroup": 1, + "x": [ + 1 + ], + "y": [ + 1 + ] + }, + { + "type": "bar", + "marker": { + "color": "blue" + }, + "opacity": 0.7, + "name": "A", + "legendgroup": "A", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "a1", + "xaxis": "x2", + "yaxis": "y2", + "alignmentgroup": "a", + "offsetgroup": 1, + "x": [ + 1 + ], + "y": [ + 1 + ] + }, + { + "type": "bar", + "marker": { + "color": "orange" + }, + "opacity": 0.6, + "name": "B", + "legendgroup": "B", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "a0", + "xaxis": "x3", + "yaxis": "y3", + "alignmentgroup": "a", + "offsetgroup": 0, + "x": [ + 1 + ], + "y": [ + 1 + ] + }, + { + "type": "bar", + "marker": { + "color": "orange" + }, + "opacity": 1, + "name": "B", + "legendgroup": "B", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "a1", + "xaxis": "x3", + "yaxis": "y3", + "alignmentgroup": "a", + "offsetgroup": 1, + "x": [ + 1 + ], + "y": [ + 1 + ] + }, + { + "type": "bar", + "marker": { + "color": "blue" + }, + "opacity": 0.7, + "name": "A", + "legendgroup": "A", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "b1", + "xaxis": "x3", + "yaxis": "y3", + "alignmentgroup": "b", + "offsetgroup": 1, + "x": [ + 1 + ], + "y": [ + 1 + ] + }, + { + "type": "bar", + "marker": { + "color": "orange" + }, + "opacity": 0.6, + "name": "B", + "legendgroup": "B", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "a0", + "xaxis": "x4", + "yaxis": "y5", + "alignmentgroup": "a", + "offsetgroup": 0, + "x": [ + 1 + ], + "y": [ + 1 + ] + }, + { + "type": "bar", + "marker": { + "color": "orange" + }, + "opacity": 1, + "name": "B", + "legendgroup": "B", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "a1", + "xaxis": "x4", + "yaxis": "y5", + "alignmentgroup": "a", + "offsetgroup": 1, + "x": [ + 1 + ], + "y": [ + 1 + ] + }, + { + "type": "bar", + "marker": { + "color": "blue" + }, + "opacity": 0.7, + "name": "A", + "legendgroup": "A", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "a2", + "xaxis": "x4", + "yaxis": "y4", + "alignmentgroup": "a", + "offsetgroup": 2, + "x": [ + 1 + ], + "y": [ + 1 + ] + }, + { + "type": "bar", + "marker": { + "color": "orange" + }, + "opacity": 0.6, + "name": "B", + "legendgroup": "B", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "a0", + "xaxis": "x5", + "yaxis": "y7", + "alignmentgroup": "a", + "offsetgroup": 0, + "x": [ + 1 + ], + "y": [ + 1 + ] + }, + { + "type": "bar", + "marker": { + "color": "orange" + }, + "opacity": 1, + "name": "B", + "legendgroup": "B", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "a1", + "xaxis": "x5", + "yaxis": "y7", + "alignmentgroup": "a", + "offsetgroup": 1, + "x": [ + 1 + ], + "y": [ + 1 + ] + }, + { + "type": "bar", + "marker": { + "color": "blue" + }, + "opacity": 0.7, + "name": "A", + "legendgroup": "A", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "a1", + "xaxis": "x5", + "yaxis": "y6", + "alignmentgroup": "a", + "offsetgroup": 1, + "x": [ + 1 + ], + "y": [ + 1 + ] + }, + { + "type": "bar", + "marker": { + "color": "orange" + }, + "opacity": 0.6, + "name": "B", + "legendgroup": "B", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "a0", + "xaxis": "x6", + "yaxis": "y9", + "alignmentgroup": "a", + "offsetgroup": 0, + "x": [ + 1 + ], + "y": [ + 1 + ] + }, + { + "type": "bar", + "marker": { + "color": "orange" + }, + "opacity": 1, + "name": "B", + "legendgroup": "B", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "a1", + "xaxis": "x6", + "yaxis": "y9", + "alignmentgroup": "a", + "offsetgroup": 1, + "x": [ + 1 + ], + "y": [ + 1 + ] + }, + { + "type": "bar", + "marker": { + "color": "blue" + }, + "opacity": 0.7, + "name": "A", + "legendgroup": "A", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "b1", + "xaxis": "x6", + "yaxis": "y8", + "alignmentgroup": "b", + "offsetgroup": 1, + "x": [ + 1 + ], + "y": [ + 1 + ] + } + ], + "layout": { + "legend": { + "x": 1, + "xanchor": "right", + "y": 1, + "yanchor": "bottom", + "tracegroupgap": 0 + }, + "margin": { + "l": 25, + "r": 25, + "t": 60, + "b": 80 + }, + "title": { + "text": "Each zone refers to the relationship
between the blue bar and the opaque orange bar", + "x": 0, + "xref": "paper", + "y": 0.96, + "yref": "cont", + "font": { + "size": 20 + } + }, + "shapes": [ + { + "type": "line", + "xref": "paper", + "yref": "paper", + "x0": 0.49, + "x1": 0.49, + "y0": -0.5, + "y1": 1 + } + ], + "xaxis": { + "domain": [ + 0, + 0.14666666666666667 + ], + "anchor": "y", + "title": "=alignment
≠offset" + }, + "yaxis": { + "domain": [ + 0, + 1 + ], + "anchor": "x" + }, + "xaxis2": { + "domain": [ + 0.18666666666666665, + 0.3133333333333333 + ], + "anchor": "y2", + "title": "=alignment
=offset" + }, + "yaxis2": { + "domain": [ + 0, + 1 + ], + "anchor": "x2" + }, + "xaxis3": { + "domain": [ + 0.35333333333333333, + 0.48 + ], + "anchor": "y3", + "title": "≠alignment
=offset" + }, + "yaxis3": { + "domain": [ + 0, + 1 + ], + "anchor": "x3" + }, + "xaxis4": { + "domain": [ + 0.52, + 0.6466666666666666 + ], + "anchor": "y4", + "title": "=alignment
≠offset" + }, + "yaxis4": { + "domain": [ + 0, + 0.45 + ], + "anchor": "x4" + }, + "yaxis5": { + "domain": [ + 0.55, + 1 + ], + "anchor": "x4" + }, + "xaxis5": { + "domain": [ + 0.6866666666666666, + 0.8133333333333332 + ], + "anchor": "y6", + "title": "=alignment
=offset" + }, + "yaxis6": { + "domain": [ + 0, + 0.45 + ], + "anchor": "x5" + }, + "yaxis7": { + "domain": [ + 0.55, + 1 + ], + "anchor": "x5" + }, + "xaxis6": { + "domain": [ + 0.8533333333333333, + 1 + ], + "anchor": "y8", + "title": "≠alignment
=offset" + }, + "yaxis8": { + "domain": [ + 0, + 0.45 + ], + "anchor": "x6" + }, + "yaxis9": { + "domain": [ + 0.55, + 1 + ], + "anchor": "x6" + } + } +} diff --git a/test/image/mocks/bar-grouping-vs-defaults.json b/test/image/mocks/bar-grouping-vs-defaults.json new file mode 100644 index 00000000000..1fe679360ba --- /dev/null +++ b/test/image/mocks/bar-grouping-vs-defaults.json @@ -0,0 +1,61 @@ +{ + "data": [ + { + "type": "bar", + "y": [ 1, 2, 1 ], + "yaxis": "y2" + }, + { + "type": "bar", + "y": [ 2, 1, 2 ] + }, + { + "type": "bar", + "y": [ 1, 3, 0 ] + }, + { + "type": "bar", + "y": [ 1, 2, 1 ], + "alignmentgroup": "top", + "hovertext": "alignmentgroup: top", + "xaxis": "x2", + "yaxis": "y2" + }, + { + "type": "bar", + "y": [ 2, 1, 2 ], + "hovertext": "alignmentgroup: top
offsetgroup: 1", + "alignmentgroup": "bottom", + "offsetgroup": "1", + "xaxis": "x2" + }, + { + "type": "bar", + "y": [ 1, 3, 0 ], + "hovertext": "alignmentgroup: top
offsetgroup: 2", + "alignmentgroup": "bottom", + "offsetgroup": "2", + "xaxis": "x2" + } + ], + "layout": { + "showlegend": false, + "grid": { + "rows": 2, + "columns": 2, + "roworder": "bottom to top" + }, + "colorway": [ "blue", "orange", "green" ], + "margin": { "t": 20 }, + "xaxis": { + "title": { + "text": "no alignmentgroup
no offsetgroup" + } + }, + "xaxis2": { + "title": { + "text": "with alignmentgroup
with offsetgroup" + } + } + } +} diff --git a/test/image/mocks/bar-offsetgroups.json b/test/image/mocks/bar-offsetgroups.json new file mode 100644 index 00000000000..c6281133827 --- /dev/null +++ b/test/image/mocks/bar-offsetgroups.json @@ -0,0 +1,88 @@ +{ + "data": [ + { + "type": "bar", + "x": [ "A", "B", "C", "D" ], + "y": [ 1, 2, 3, 4 ], + "offsetgroup": 1, + "hovertext": "offsetgroup: 1" + }, + { + "type": "bar", + "x": [ "A", "B", "C", "D" ], + "y": [ 2, 3, 1, 5 ], + "offsetgroup": 2, + "hovertext": "offsetgroup: 2" + }, + { + "type": "bar", + "x": [ "A", "B", "C", "D" ], + "y": [ 1, 2, 3, 4 ], + "yaxis": "y2", + "offsetgroup": 1, + "hovertext": "offsetgroup: 1" + }, + { + "type": "bar", + "x": [ "A", "B", "C", "D" ], + "y": [ 2, 3, 1, 5 ], + "yaxis": "y2", + "offsetgroup": 2, + "hovertext": "offsetgroup: 2" + }, + { + "type": "bar", + "x": [ "A", "B", "C", "D" ], + "y": [ 1, 2, 3, 4 ], + "offsetgroup": 1, + "hovertext": "offsetgroup: 1", + "xaxis": "x2" + }, + { + "type": "bar", + "x": [ "A", "B", "C", "D" ], + "y": [ 2, 3, 1, 5 ], + "offsetgroup": 2, + "hovertext": "offsetgroup: 2", + "xaxis": "x2" + }, + { + "type": "bar", + "x": [ "A", "B", "C", "D" ], + "y": [ 1, 2, 3, 4 ], + "yaxis": "y2", + "offsetgroup": 3, + "hovertext": "offsetgroup: 3", + "xaxis": "x2" + }, + { + "type": "bar", + "x": [ "A", "B", "C", "D" ], + "y": [ 2, 3, 1, 5 ], + "yaxis": "y2", + "offsetgroup": 4, + "hovertext": "offsetgroup: 4", + "xaxis": "x2" + } + ], + "layout": { + "showlegend": false, + "grid": { + "rows": 2, + "columns": 2 + }, + "title": { + "text": "Bar offset groups" + }, + "xaxis": { + "title": { + "text": "two distinct offset groups" + } + }, + "xaxis2": { + "title": { + "text": "four distinct offset groups" + } + } + } +} diff --git a/test/image/mocks/histogram-offsetgroups.json b/test/image/mocks/histogram-offsetgroups.json new file mode 100644 index 00000000000..42cb0d4f567 --- /dev/null +++ b/test/image/mocks/histogram-offsetgroups.json @@ -0,0 +1,80 @@ +{ + "data": [ + { + "type": "histogram", + "y": [ 1, 2, 3, 4 ], + "offsetgroup": 1, + "text": "offsetgroup: 1" + }, + { + "type": "histogram", + "y": [ 2, 3, 1, 5 ], + "offsetgroup": 2, + "text": "offsetgroup: 2" + }, + { + "type": "histogram", + "y": [ 1, 2, 3, 4 ], + "yaxis": "y2", + "offsetgroup": 1, + "text": "offsetgroup: 1" + }, + { + "type": "histogram", + "y": [ 2, 3, 1, 5 ], + "yaxis": "y2", + "offsetgroup": 2, + "text": "offsetgroup: 2" + }, + { + "type": "histogram", + "y": [ 1, 2, 3, 4 ], + "offsetgroup": 1, + "xaxis": "x2", + "text": "offsetgroup: 1" + }, + { + "type": "histogram", + "y": [ 2, 3, 1, 5 ], + "offsetgroup": 2, + "xaxis": "x2", + "text": "offsetgroup: 2" + }, + { + "type": "histogram", + "y": [ 1, 2, 3, 4 ], + "yaxis": "y2", + "offsetgroup": 3, + "xaxis": "x2", + "text": "offsetgroup: 3" + }, + { + "type": "histogram", + "y": [ 2, 3, 1, 5 ], + "yaxis": "y2", + "offsetgroup": 4, + "xaxis": "x2", + "text": "offsetgroup: 4" + } + ], + "layout": { + "showlegend": false, + "grid": { + "rows": 2, + "columns": 2 + }, + "title": { + "text": "Histogram offset groups" + }, + "yaxis": { + "title": { + "text": "two distinct
offset groups" + } + }, + "yaxis2": { + "title": { + "text": "four distinct
offset groups" + } + } + } +} From a8535218be44d19a3ab9fae37955e882178dfeba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Fri, 8 Feb 2019 12:58:34 -0500 Subject: [PATCH 2/4] add alignmentgroup and offsetgroup to bar and violin traces --- src/traces/box/attributes.js | 4 + src/traces/box/cross_trace_calc.js | 28 +- src/traces/box/defaults.js | 3 +- src/traces/violin/attributes.js | 3 + src/traces/violin/defaults.js | 3 + test/image/baselines/box-alignment-offset.png | Bin 0 -> 53420 bytes test/image/baselines/violin-offsetgroups.png | Bin 0 -> 51691 bytes test/image/mocks/box-alignment-offset.json | 944 ++++++++++++++++++ test/image/mocks/violin-offsetgroups.json | 89 ++ 9 files changed, 1065 insertions(+), 9 deletions(-) create mode 100644 test/image/baselines/box-alignment-offset.png create mode 100644 test/image/baselines/violin-offsetgroups.png create mode 100644 test/image/mocks/box-alignment-offset.json create mode 100644 test/image/mocks/violin-offsetgroups.json diff --git a/src/traces/box/attributes.js b/src/traces/box/attributes.js index 7bfd9bce3ce..93318226ee3 100644 --- a/src/traces/box/attributes.js +++ b/src/traces/box/attributes.js @@ -9,6 +9,7 @@ 'use strict'; var scatterAttrs = require('../scatter/attributes'); +var barAttrs = require('../bar/attributes'); var colorAttrs = require('../../components/color/attributes'); var extendFlat = require('../../lib/extend').extendFlat; @@ -250,6 +251,9 @@ module.exports = { }, fillcolor: scatterAttrs.fillcolor, + offsetgroup: barAttrs.offsetgroup, + alignmentgroup: barAttrs.alignmentgroup, + selected: { marker: scatterAttrs.selected.marker, editType: 'style' diff --git a/src/traces/box/cross_trace_calc.js b/src/traces/box/cross_trace_calc.js index 2d42b0b0c74..74d3b230a42 100644 --- a/src/traces/box/cross_trace_calc.js +++ b/src/traces/box/cross_trace_calc.js @@ -51,9 +51,6 @@ function setPositionOffset(traceType, gd, boxList, posAxis) { var axId = posAxis._id; var axLetter = axId.charAt(0); - // N.B. reused in violin - var numKey = traceType === 'violin' ? '_numViolins' : '_numBoxes'; - var i, j, calcTrace; var pointList = []; var shownPts = 0; @@ -76,8 +73,9 @@ function setPositionOffset(traceType, gd, boxList, posAxis) { // check for forced minimum dtick Axes.minDtick(posAxis, boxdv.minDiff, boxdv.vals[0], true); - var num = fullLayout[numKey]; - var group = (fullLayout[traceType + 'mode'] === 'group' && num > 1); + var numKey = traceType === 'violin' ? '_numViolins' : '_numBoxes'; + var numTotal = fullLayout[numKey]; + var group = fullLayout[traceType + 'mode'] === 'group' && numTotal > 1; var groupFraction = 1 - fullLayout[traceType + 'gap']; var groupGapFraction = 1 - fullLayout[traceType + 'groupgap']; @@ -104,9 +102,23 @@ function setPositionOffset(traceType, gd, boxList, posAxis) { bPos = 0; } else { dPos = dPos0; - bdPos = dPos * groupFraction * groupGapFraction / (group ? num : 1); - bPos = group ? 2 * dPos * (-0.5 + (t.num + 0.5) / num) * groupFraction : 0; - wHover = dPos * (group ? groupFraction / num : 1); + + if(group) { + var groupId = posAxis._id + trace.orientation; + var alignmentGroups = fullLayout._alignmentOpts[groupId] || {}; + var alignmentGroupOpts = alignmentGroups[trace.alignmentgroup] || {}; + var nOffsetGroups = Object.keys(alignmentGroupOpts.offsetGroups || {}).length; + var num = nOffsetGroups || numTotal; + var shift = nOffsetGroups ? trace._offsetIndex : t.num; + + bdPos = dPos * groupFraction * groupGapFraction / num; + bPos = 2 * dPos * (-0.5 + (shift + 0.5) / num) * groupFraction; + wHover = dPos * groupFraction / num; + } else { + bdPos = dPos * groupFraction * groupGapFraction; + bPos = 0; + wHover = dPos; + } } t.dPos = dPos; t.bPos = bPos; diff --git a/src/traces/box/defaults.js b/src/traces/box/defaults.js index b3d6500e5d4..e473086afc8 100644 --- a/src/traces/box/defaults.js +++ b/src/traces/box/defaults.js @@ -11,7 +11,7 @@ var Lib = require('../../lib'); var Registry = require('../../registry'); var Color = require('../../components/color'); - +var handleGroupingDefaults = require('../bar/defaults').handleGroupingDefaults; var attributes = require('./attributes'); function supplyDefaults(traceIn, traceOut, defaultColor, layout) { @@ -34,6 +34,7 @@ function supplyDefaults(traceIn, traceOut, defaultColor, layout) { if(notched) coerce('notchwidth'); handlePointsDefaults(traceIn, traceOut, coerce, {prefix: 'box'}); + handleGroupingDefaults(traceIn, traceOut, layout, coerce); } function handleSampleDefaults(traceIn, traceOut, coerce, layout) { diff --git a/src/traces/violin/attributes.js b/src/traces/violin/attributes.js index ba71026aadf..1da220b2ab3 100644 --- a/src/traces/violin/attributes.js +++ b/src/traces/violin/attributes.js @@ -238,6 +238,9 @@ module.exports = { ].join(' ') }, + offsetgroup: boxAttrs.offsetgroup, + alignmentgroup: boxAttrs.alignmentgroup, + selected: boxAttrs.selected, unselected: boxAttrs.unselected, diff --git a/src/traces/violin/defaults.js b/src/traces/violin/defaults.js index 0a0fa8d1a73..487577d6af5 100644 --- a/src/traces/violin/defaults.js +++ b/src/traces/violin/defaults.js @@ -12,6 +12,7 @@ var Lib = require('../../lib'); var Color = require('../../components/color'); var boxDefaults = require('../box/defaults'); +var handleGroupingDefaults = require('../bar/defaults').handleGroupingDefaults; var attributes = require('./attributes'); module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout) { @@ -56,4 +57,6 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout var meanLineWidth = coerce2('meanline.width', lineWidth); var meanLineVisible = coerce('meanline.visible', Boolean(meanLineColor || meanLineWidth)); if(!meanLineVisible) traceOut.meanline = {visible: false}; + + handleGroupingDefaults(traceIn, traceOut, layout, coerce); }; diff --git a/test/image/baselines/box-alignment-offset.png b/test/image/baselines/box-alignment-offset.png new file mode 100644 index 0000000000000000000000000000000000000000..49531120be41ca76884ca427eb768541007a0741 GIT binary patch literal 53420 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 E0T>J?Gynhq literal 0 HcmV?d00001 diff --git a/test/image/baselines/violin-offsetgroups.png b/test/image/baselines/violin-offsetgroups.png new file mode 100644 index 0000000000000000000000000000000000000000..b1507b55d783d52abcb2d6e1173c6e336ef4103c GIT binary patch literal 51691 zcmeFZWmH>j*ENc}Yl}m1ZAW|NF2)Vg@zh{Xgzg z{1OD6nH*aEpHBieq5RMP+x_oN|2qUo|KALOy!2{W{c`7ePxKqt?T;FzI+aq!3Q6o8 zu4BUCEb6~kFZL$q1C&$Wp#%SZXZk!pUgtS)^nz9cQETouy%dr;r|&R62?ad8U-r8; z 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

ku5{QO@qM%Ny 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 NqNw?}QvP|!{{p!1y@CJ$ literal 0 HcmV?d00001 diff --git a/test/image/mocks/box-alignment-offset.json b/test/image/mocks/box-alignment-offset.json new file mode 100644 index 00000000000..24fbf2cf5b0 --- /dev/null +++ b/test/image/mocks/box-alignment-offset.json @@ -0,0 +1,944 @@ +{ + "data": [ + { + "type": "box", + "marker": { + "color": "orange" + }, + "opacity": 0.6, + "name": "B", + "legendgroup": "B", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "a0", + "xaxis": "x", + "yaxis": "y", + "alignmentgroup": "a", + "offsetgroup": 0, + "y": [ + 0.2, + 0.2, + 0.6, + 1, + 0.5, + 0.4, + 0.2, + 0.7, + 0.9, + 0.1, + 0.5, + 0.3 + ], + "x": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + }, + { + "type": "box", + "marker": { + "color": "orange" + }, + "opacity": 1, + "name": "B", + "legendgroup": "B", + "showlegend": true, + "hoverinfo": "text", + "hovertext": "a1", + "xaxis": "x", + "yaxis": "y", + "alignmentgroup": "a", + "offsetgroup": 1, + "y": [ + 0.2, + 0.2, + 0.6, + 1, + 0.5, + 0.4, + 0.2, + 0.7, + 0.9, + 0.1, + 0.5, + 0.3 + ], + "x": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + }, + { + "type": "box", + "marker": { + "color": "blue" + }, + "opacity": 0.7, + "name": "A", + "legendgroup": "A", + "showlegend": true, + "hoverinfo": "text", + "hovertext": "a2", + "xaxis": "x", + "yaxis": "y", + "alignmentgroup": "a", + "offsetgroup": 2, + "y": [ + 0.2, + 0.2, + 0.6, + 1, + 0.5, + 0.4, + 0.2, + 0.7, + 0.9, + 0.1, + 0.5, + 0.3 + ], + "x": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + }, + { + "type": "box", + "marker": { + "color": "orange" + }, + "opacity": 0.6, + "name": "B", + "legendgroup": "B", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "a0", + "xaxis": "x2", + "yaxis": "y2", + "alignmentgroup": "a", + "offsetgroup": 0, + "y": [ + 0.2, + 0.2, + 0.6, + 1, + 0.5, + 0.4, + 0.2, + 0.7, + 0.9, + 0.1, + 0.5, + 0.3 + ], + "x": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + }, + { + "type": "box", + "marker": { + "color": "orange" + }, + "opacity": 1, + "name": "B", + "legendgroup": "B", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "a1", + "xaxis": "x2", + "yaxis": "y2", + "alignmentgroup": "a", + "offsetgroup": 1, + "y": [ + 0.2, + 0.2, + 0.6, + 1, + 0.5, + 0.4, + 0.2, + 0.7, + 0.9, + 0.1, + 0.5, + 0.3 + ], + "x": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + }, + { + "type": "box", + "marker": { + "color": "blue" + }, + "opacity": 0.7, + "name": "A", + "legendgroup": "A", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "a1", + "xaxis": "x2", + "yaxis": "y2", + "alignmentgroup": "a", + "offsetgroup": 1, + "y": [ + 0.2, + 0.2, + 0.6, + 1, + 0.5, + 0.4, + 0.2, + 0.7, + 0.9, + 0.1, + 0.5, + 0.3 + ], + "x": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + }, + { + "type": "box", + "marker": { + "color": "orange" + }, + "opacity": 0.6, + "name": "B", + "legendgroup": "B", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "a0", + "xaxis": "x3", + "yaxis": "y3", + "alignmentgroup": "a", + "offsetgroup": 0, + "y": [ + 0.2, + 0.2, + 0.6, + 1, + 0.5, + 0.4, + 0.2, + 0.7, + 0.9, + 0.1, + 0.5, + 0.3 + ], + "x": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + }, + { + "type": "box", + "marker": { + "color": "orange" + }, + "opacity": 1, + "name": "B", + "legendgroup": "B", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "a1", + "xaxis": "x3", + "yaxis": "y3", + "alignmentgroup": "a", + "offsetgroup": 1, + "y": [ + 0.2, + 0.2, + 0.6, + 1, + 0.5, + 0.4, + 0.2, + 0.7, + 0.9, + 0.1, + 0.5, + 0.3 + ], + "x": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + }, + { + "type": "box", + "marker": { + "color": "blue" + }, + "opacity": 0.7, + "name": "A", + "legendgroup": "A", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "b1", + "xaxis": "x3", + "yaxis": "y3", + "alignmentgroup": "b", + "offsetgroup": 1, + "y": [ + 0.2, + 0.2, + 0.6, + 1, + 0.5, + 0.4, + 0.2, + 0.7, + 0.9, + 0.1, + 0.5, + 0.3 + ], + "x": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + }, + { + "type": "box", + "marker": { + "color": "orange" + }, + "opacity": 0.6, + "name": "B", + "legendgroup": "B", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "a0", + "xaxis": "x4", + "yaxis": "y5", + "alignmentgroup": "a", + "offsetgroup": 0, + "y": [ + 0.2, + 0.2, + 0.6, + 1, + 0.5, + 0.4, + 0.2, + 0.7, + 0.9, + 0.1, + 0.5, + 0.3 + ], + "x": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + }, + { + "type": "box", + "marker": { + "color": "orange" + }, + "opacity": 1, + "name": "B", + "legendgroup": "B", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "a1", + "xaxis": "x4", + "yaxis": "y5", + "alignmentgroup": "a", + "offsetgroup": 1, + "y": [ + 0.2, + 0.2, + 0.6, + 1, + 0.5, + 0.4, + 0.2, + 0.7, + 0.9, + 0.1, + 0.5, + 0.3 + ], + "x": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + }, + { + "type": "box", + "marker": { + "color": "blue" + }, + "opacity": 0.7, + "name": "A", + "legendgroup": "A", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "a2", + "xaxis": "x4", + "yaxis": "y4", + "alignmentgroup": "a", + "offsetgroup": 2, + "y": [ + 0.2, + 0.2, + 0.6, + 1, + 0.5, + 0.4, + 0.2, + 0.7, + 0.9, + 0.1, + 0.5, + 0.3 + ], + "x": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + }, + { + "type": "box", + "marker": { + "color": "orange" + }, + "opacity": 0.6, + "name": "B", + "legendgroup": "B", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "a0", + "xaxis": "x5", + "yaxis": "y7", + "alignmentgroup": "a", + "offsetgroup": 0, + "y": [ + 0.2, + 0.2, + 0.6, + 1, + 0.5, + 0.4, + 0.2, + 0.7, + 0.9, + 0.1, + 0.5, + 0.3 + ], + "x": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + }, + { + "type": "box", + "marker": { + "color": "orange" + }, + "opacity": 1, + "name": "B", + "legendgroup": "B", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "a1", + "xaxis": "x5", + "yaxis": "y7", + "alignmentgroup": "a", + "offsetgroup": 1, + "y": [ + 0.2, + 0.2, + 0.6, + 1, + 0.5, + 0.4, + 0.2, + 0.7, + 0.9, + 0.1, + 0.5, + 0.3 + ], + "x": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + }, + { + "type": "box", + "marker": { + "color": "blue" + }, + "opacity": 0.7, + "name": "A", + "legendgroup": "A", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "a1", + "xaxis": "x5", + "yaxis": "y6", + "alignmentgroup": "a", + "offsetgroup": 1, + "y": [ + 0.2, + 0.2, + 0.6, + 1, + 0.5, + 0.4, + 0.2, + 0.7, + 0.9, + 0.1, + 0.5, + 0.3 + ], + "x": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + }, + { + "type": "box", + "marker": { + "color": "orange" + }, + "opacity": 0.6, + "name": "B", + "legendgroup": "B", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "a0", + "xaxis": "x6", + "yaxis": "y9", + "alignmentgroup": "a", + "offsetgroup": 0, + "y": [ + 0.2, + 0.2, + 0.6, + 1, + 0.5, + 0.4, + 0.2, + 0.7, + 0.9, + 0.1, + 0.5, + 0.3 + ], + "x": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + }, + { + "type": "box", + "marker": { + "color": "orange" + }, + "opacity": 1, + "name": "B", + "legendgroup": "B", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "a1", + "xaxis": "x6", + "yaxis": "y9", + "alignmentgroup": "a", + "offsetgroup": 1, + "y": [ + 0.2, + 0.2, + 0.6, + 1, + 0.5, + 0.4, + 0.2, + 0.7, + 0.9, + 0.1, + 0.5, + 0.3 + ], + "x": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + }, + { + "type": "box", + "marker": { + "color": "blue" + }, + "opacity": 0.7, + "name": "A", + "legendgroup": "A", + "showlegend": false, + "hoverinfo": "text", + "hovertext": "b1", + "xaxis": "x6", + "yaxis": "y8", + "alignmentgroup": "b", + "offsetgroup": 1, + "y": [ + 0.2, + 0.2, + 0.6, + 1, + 0.5, + 0.4, + 0.2, + 0.7, + 0.9, + 0.1, + 0.5, + 0.3 + ], + "x": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + } + ], + "layout": { + "legend": { + "x": 1, + "xanchor": "right", + "y": 1, + "yanchor": "bottom", + "tracegroupgap": 0 + }, + "margin": { + "l": 25, + "r": 25, + "t": 60, + "b": 80 + }, + "title": { + "text": "Each zone refers to the relationship
between the blue box and the opaque orange box", + "x": 0, + "xref": "paper", + "y": 0.96, + "yref": "cont", + "font": { + "size": 20 + } + }, + "shapes": [ + { + "type": "line", + "xref": "paper", + "yref": "paper", + "x0": 0.49, + "x1": 0.49, + "y0": -0.5, + "y1": 1 + } + ], + "xaxis": { + "domain": [ + 0, + 0.14666666666666667 + ], + "anchor": "y", + "title": "=alignment
≠offset" + }, + "yaxis": { + "domain": [ + 0, + 1 + ], + "anchor": "x" + }, + "xaxis2": { + "domain": [ + 0.18666666666666665, + 0.3133333333333333 + ], + "anchor": "y2", + "title": "=alignment
=offset" + }, + "yaxis2": { + "domain": [ + 0, + 1 + ], + "anchor": "x2" + }, + "xaxis3": { + "domain": [ + 0.35333333333333333, + 0.48 + ], + "anchor": "y3", + "title": "≠alignment
=offset" + }, + "yaxis3": { + "domain": [ + 0, + 1 + ], + "anchor": "x3" + }, + "xaxis4": { + "domain": [ + 0.52, + 0.6466666666666666 + ], + "anchor": "y4", + "title": "=alignment
≠offset" + }, + "yaxis4": { + "domain": [ + 0, + 0.45 + ], + "anchor": "x4" + }, + "yaxis5": { + "domain": [ + 0.55, + 1 + ], + "anchor": "x4" + }, + "xaxis5": { + "domain": [ + 0.6866666666666666, + 0.8133333333333332 + ], + "anchor": "y6", + "title": "=alignment
=offset" + }, + "yaxis6": { + "domain": [ + 0, + 0.45 + ], + "anchor": "x5" + }, + "yaxis7": { + "domain": [ + 0.55, + 1 + ], + "anchor": "x5" + }, + "xaxis6": { + "domain": [ + 0.8533333333333333, + 1 + ], + "anchor": "y8", + "title": "≠alignment
=offset" + }, + "yaxis8": { + "domain": [ + 0, + 0.45 + ], + "anchor": "x6" + }, + "yaxis9": { + "domain": [ + 0.55, + 1 + ], + "anchor": "x6" + }, + "boxmode": "group" + } +} diff --git a/test/image/mocks/violin-offsetgroups.json b/test/image/mocks/violin-offsetgroups.json new file mode 100644 index 00000000000..4aaac563003 --- /dev/null +++ b/test/image/mocks/violin-offsetgroups.json @@ -0,0 +1,89 @@ +{ + "data": [ + { + "type": "violin", + "x": [ "A", "B", "C", "D" ], + "y": [ 1, 2, 3, 4 ], + "offsetgroup": 1, + "hovertext": "offsetgroup: 1" + }, + { + "type": "violin", + "x": [ "A", "B", "C", "D" ], + "y": [ 2, 3, 1, 5 ], + "offsetgroup": 2, + "hovertext": "offsetgroup: 2" + }, + { + "type": "violin", + "x": [ "A", "B", "C", "D" ], + "y": [ 1, 2, 3, 4 ], + "yaxis": "y2", + "offsetgroup": 1, + "hovertext": "offsetgroup: 1" + }, + { + "type": "violin", + "x": [ "A", "B", "C", "D" ], + "y": [ 2, 3, 1, 5 ], + "yaxis": "y2", + "offsetgroup": 2, + "hovertext": "offsetgroup: 2" + }, + { + "type": "violin", + "x": [ "A", "B", "C", "D" ], + "y": [ 1, 2, 3, 4 ], + "offsetgroup": 1, + "hovertext": "offsetgroup: 1", + "xaxis": "x2" + }, + { + "type": "violin", + "x": [ "A", "B", "C", "D" ], + "y": [ 2, 3, 1, 5 ], + "offsetgroup": 2, + "hovertext": "offsetgroup: 2", + "xaxis": "x2" + }, + { + "type": "violin", + "x": [ "A", "B", "C", "D" ], + "y": [ 1, 2, 3, 4 ], + "yaxis": "y2", + "offsetgroup": 3, + "hovertext": "offsetgroup: 3", + "xaxis": "x2" + }, + { + "type": "violin", + "x": [ "A", "B", "C", "D" ], + "y": [ 2, 3, 1, 5 ], + "yaxis": "y2", + "offsetgroup": 4, + "hovertext": "offsetgroup: 4", + "xaxis": "x2" + } + ], + "layout": { + "violinmode": "group", + "showlegend": false, + "grid": { + "rows": 2, + "columns": 2 + }, + "title": { + "text": "Violin offset groups" + }, + "xaxis": { + "title": { + "text": "two distinct offset groups" + } + }, + "xaxis2": { + "title": { + "text": "four distinct offset groups" + } + } + } +} From 1c1ca3a08a83d4b9ae813b038ba9f49db0d1d403 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Fri, 8 Feb 2019 12:59:37 -0500 Subject: [PATCH 3/4] rm alignmentgroup/offsetgroup from bar/box/violin when mode!=group --- src/traces/bar/layout_defaults.js | 21 +++++++++++++++++---- src/traces/box/layout_defaults.js | 27 ++++++++++++++++++++++----- test/jasmine/tests/bar_test.js | 16 ++++++++++++++++ test/jasmine/tests/box_test.js | 17 +++++++++++++++++ test/jasmine/tests/violin_test.js | 16 ++++++++++++++++ 5 files changed, 88 insertions(+), 9 deletions(-) diff --git a/src/traces/bar/layout_defaults.js b/src/traces/bar/layout_defaults.js index 7abb2920dfa..35ab979591b 100644 --- a/src/traces/bar/layout_defaults.js +++ b/src/traces/bar/layout_defaults.js @@ -6,7 +6,6 @@ * LICENSE file in the root directory of this source tree. */ - 'use strict'; var Registry = require('../../registry'); @@ -15,8 +14,9 @@ var Lib = require('../../lib'); var layoutAttributes = require('./layout_attributes'); - module.exports = function(layoutIn, layoutOut, fullData) { + var i, trace; + function coerce(attr, dflt) { return Lib.coerce(layoutIn, layoutOut, layoutAttributes, attr, dflt); } @@ -25,9 +25,10 @@ module.exports = function(layoutIn, layoutOut, fullData) { var shouldBeGapless = false; var gappedAnyway = false; var usedSubplots = {}; + var tracesWithGroupAttrs = []; - for(var i = 0; i < fullData.length; i++) { - var trace = fullData[i]; + for(i = 0; i < fullData.length; i++) { + trace = fullData[i]; if(Registry.traceIs(trace, 'bar') && trace.visible) hasBars = true; else continue; @@ -44,6 +45,10 @@ module.exports = function(layoutIn, layoutOut, fullData) { trace[trace.orientation === 'v' ? 'xaxis' : 'yaxis']); if(pa.type !== 'category') shouldBeGapless = true; } + + if(trace.alignmentgroup || trace.offsetgroup) { + tracesWithGroupAttrs.push(trace); + } } if(!hasBars) return; @@ -53,4 +58,12 @@ module.exports = function(layoutIn, layoutOut, fullData) { coerce('bargap', (shouldBeGapless && !gappedAnyway) ? 0 : 0.2); coerce('bargroupgap'); + + if(mode !== 'group') { + for(i = 0; i < tracesWithGroupAttrs.length; i++) { + trace = tracesWithGroupAttrs[i]; + delete trace.alignmentgroup; + delete trace.offsetgroup; + } + } }; diff --git a/src/traces/box/layout_defaults.js b/src/traces/box/layout_defaults.js index 027ab407ff7..818355aab56 100644 --- a/src/traces/box/layout_defaults.js +++ b/src/traces/box/layout_defaults.js @@ -13,19 +13,36 @@ var Lib = require('../../lib'); var layoutAttributes = require('./layout_attributes'); function _supply(layoutIn, layoutOut, fullData, coerce, traceType) { - var hasTraceType; + var i, trace; + var category = traceType + 'Layout'; - for(var i = 0; i < fullData.length; i++) { - if(Registry.traceIs(fullData[i], category)) { + var hasTraceType = false; + var tracesWithGroupAttrs = []; + + for(i = 0; i < fullData.length; i++) { + trace = fullData[i]; + + if(Registry.traceIs(trace, category)) { hasTraceType = true; - break; + + if(trace.alignmentgroup || trace.offsetgroup) { + tracesWithGroupAttrs.push(trace); + } } } if(!hasTraceType) return; - coerce(traceType + 'mode'); + var mode = coerce(traceType + 'mode'); coerce(traceType + 'gap'); coerce(traceType + 'groupgap'); + + if(mode !== 'group') { + for(i = 0; i < tracesWithGroupAttrs.length; i++) { + trace = tracesWithGroupAttrs[i]; + delete trace.alignmentgroup; + delete trace.offsetgroup; + } + } } function supplyLayoutDefaults(layoutIn, layoutOut, fullData) { diff --git a/test/jasmine/tests/bar_test.js b/test/jasmine/tests/bar_test.js index e79ea3627a5..5a0934734be 100644 --- a/test/jasmine/tests/bar_test.js +++ b/test/jasmine/tests/bar_test.js @@ -210,6 +210,22 @@ describe('Bar.supplyDefaults', function() { expect(traceOut.xcalendar).toBe('coptic'); expect(traceOut.ycalendar).toBe('ethiopian'); }); + + it('should not include alignementgroup/offsetgroup when barmode is not *group*', function() { + var gd = { + data: [{type: 'bar', y: [1], alignmentgroup: 'a', offsetgroup: '1'}], + layout: {barmode: 'group'} + }; + + supplyAllDefaults(gd); + expect(gd._fullData[0].alignmentgroup).toBe('a', 'alignementgroup'); + expect(gd._fullData[0].offsetgroup).toBe('1', 'offsetgroup'); + + gd.layout.barmode = 'stack'; + supplyAllDefaults(gd); + expect(gd._fullData[0].alignmentgroup).toBe(undefined, 'alignementgroup'); + expect(gd._fullData[0].offsetgroup).toBe(undefined, 'offsetgroup'); + }); }); describe('bar calc / crossTraceCalc (formerly known as setPositions)', function() { diff --git a/test/jasmine/tests/box_test.js b/test/jasmine/tests/box_test.js index 694735de757..cd655fc47d7 100644 --- a/test/jasmine/tests/box_test.js +++ b/test/jasmine/tests/box_test.js @@ -8,6 +8,7 @@ var createGraphDiv = require('../assets/create_graph_div'); var destroyGraphDiv = require('../assets/destroy_graph_div'); var failTest = require('../assets/fail_test'); var mouseEvent = require('../assets/mouse_event'); +var supplyAllDefaults = require('../assets/supply_defaults'); var customAssertions = require('../assets/custom_assertions'); var assertHoverLabelContent = customAssertions.assertHoverLabelContent; @@ -150,6 +151,22 @@ describe('Test boxes supplyDefaults', function() { expect(traceOut.marker).toBeDefined(); expect(traceOut.text).toBeDefined(); }); + + it('should not include alignementgroup/offsetgroup when boxmode is not *group*', function() { + var gd = { + data: [{type: 'box', y: [1], alignmentgroup: 'a', offsetgroup: '1'}], + layout: {boxmode: 'group'} + }; + + supplyAllDefaults(gd); + expect(gd._fullData[0].alignmentgroup).toBe('a', 'alignementgroup'); + expect(gd._fullData[0].offsetgroup).toBe('1', 'offsetgroup'); + + gd.layout.boxmode = 'overlay'; + supplyAllDefaults(gd); + expect(gd._fullData[0].alignmentgroup).toBe(undefined, 'alignementgroup'); + expect(gd._fullData[0].offsetgroup).toBe(undefined, 'offsetgroup'); + }); }); describe('Test box hover:', function() { diff --git a/test/jasmine/tests/violin_test.js b/test/jasmine/tests/violin_test.js index 9cca890e9c7..930e9c1dbbc 100644 --- a/test/jasmine/tests/violin_test.js +++ b/test/jasmine/tests/violin_test.js @@ -159,6 +159,22 @@ describe('Test violin defaults', function() { expect(traceOut.scalemode).toBe('width'); expect(traceOut.scalegroup).toBe(''); }); + + it('should not include alignementgroup/offsetgroup when violinmode is not *group*', function() { + var gd = { + data: [{type: 'violin', y: [1], alignmentgroup: 'a', offsetgroup: '1'}], + layout: {violinmode: 'group'} + }; + + supplyAllDefaults(gd); + expect(gd._fullData[0].alignmentgroup).toBe('a', 'alignementgroup'); + expect(gd._fullData[0].offsetgroup).toBe('1', 'offsetgroup'); + + gd.layout.violinmode = 'overlay'; + supplyAllDefaults(gd); + expect(gd._fullData[0].alignmentgroup).toBe(undefined, 'alignementgroup'); + expect(gd._fullData[0].offsetgroup).toBe(undefined, 'offsetgroup'); + }); }); describe('Test violin calc:', function() { From e746b088d6ff929577416706f59c2d739f850640 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Mon, 18 Feb 2019 17:34:08 -0500 Subject: [PATCH 4/4] consider alignment and offset group across matching axes ... as well as across trace types (confirmed behavior) to do so: - add getAxisGroup axis_ids.js util - mv alignmentgroup and offsetgroup coerce calls to crossTraceDefaults --- src/plots/cartesian/axis_ids.js | 10 ++ src/traces/bar/attributes.js | 6 +- src/traces/bar/cross_trace_calc.js | 3 +- src/traces/bar/defaults.js | 34 ++++-- src/traces/bar/index.js | 1 + src/traces/bar/layout_defaults.js | 19 +-- src/traces/box/cross_trace_calc.js | 3 +- src/traces/box/defaults.js | 23 +++- src/traces/box/index.js | 1 + src/traces/box/layout_defaults.js | 22 +--- src/traces/histogram/cross_trace_defaults.js | 15 +-- src/traces/histogram/defaults.js | 3 - src/traces/violin/defaults.js | 3 - src/traces/violin/index.js | 1 + .../baselines/groups-over-matching-axes.png | Bin 0 -> 34906 bytes .../mocks/groups-over-matching-axes.json | 111 ++++++++++++++++++ 16 files changed, 189 insertions(+), 66 deletions(-) create mode 100644 test/image/baselines/groups-over-matching-axes.png create mode 100644 test/image/mocks/groups-over-matching-axes.json diff --git a/src/plots/cartesian/axis_ids.js b/src/plots/cartesian/axis_ids.js index 8e0bf5003d3..eb36d1bf1c2 100644 --- a/src/plots/cartesian/axis_ids.js +++ b/src/plots/cartesian/axis_ids.js @@ -114,3 +114,13 @@ exports.idSort = function(id1, id2) { if(letter1 !== letter2) return letter1 > letter2 ? 1 : -1; return +(id1.substr(1) || 1) - +(id2.substr(1) || 1); }; + +exports.getAxisGroup = function getAxisGroup(fullLayout, axId) { + var matchGroups = fullLayout._axisMatchGroups; + + for(var i = 0; i < matchGroups.length; i++) { + var group = matchGroups[i]; + if(group[axId]) return 'g' + i; + } + return axId; +}; diff --git a/src/traces/bar/attributes.js b/src/traces/bar/attributes.js index ab8bf1b00b2..5cf9003da59 100644 --- a/src/traces/bar/attributes.js +++ b/src/traces/bar/attributes.js @@ -180,7 +180,8 @@ module.exports = { dflt: '', editType: 'calc', description: [ - 'Set several traces linked to the same position axis to the same', + 'Set several traces linked to the same position axis', + 'or matching axes to the same', 'offsetgroup where bars of the same position coordinate will line up.' ].join(' ') }, @@ -190,7 +191,8 @@ module.exports = { dflt: '', editType: 'calc', description: [ - 'Set several traces linked to the same position axis to the same', + 'Set several traces linked to the same position axis', + 'or matching axes to the same', 'alignmentgroup. This controls whether bars compute their positional', 'range dependently or independently.' ].join(' ') diff --git a/src/traces/bar/cross_trace_calc.js b/src/traces/bar/cross_trace_calc.js index f4ba937e47a..916e853eec5 100644 --- a/src/traces/bar/cross_trace_calc.js +++ b/src/traces/bar/cross_trace_calc.js @@ -14,6 +14,7 @@ var BADNUM = require('../../constants/numerical').BADNUM; var Registry = require('../../registry'); var Axes = require('../../plots/cartesian/axes'); +var getAxisGroup = require('../../plots/cartesian/axis_ids').getAxisGroup; var Sieve = require('./sieve.js'); /* @@ -286,7 +287,7 @@ function setOffsetAndWidthInGroupMode(gd, pa, sieve) { var overlap = (positions.length !== distinctPositions.length); var barGroupWidth = minDiff * (1 - bargap); - var groupId = pa._id + calcTraces[0][0].trace.orientation; + var groupId = getAxisGroup(fullLayout, pa._id) + calcTraces[0][0].trace.orientation; var alignmentGroups = fullLayout._alignmentOpts[groupId] || {}; for(var i = 0; i < nTraces; i++) { diff --git a/src/traces/bar/defaults.js b/src/traces/bar/defaults.js index 1cdd29da629..b6715411524 100644 --- a/src/traces/bar/defaults.js +++ b/src/traces/bar/defaults.js @@ -14,6 +14,7 @@ var Registry = require('../../registry'); var handleXYDefaults = require('../scatter/xy_defaults'); var handleStyleDefaults = require('../bar/style_defaults'); +var getAxisGroup = require('../../plots/cartesian/axis_ids').getAxisGroup; var attributes = require('./attributes'); function supplyDefaults(traceIn, traceOut, defaultColor, layout) { @@ -76,21 +77,16 @@ function supplyDefaults(traceIn, traceOut, defaultColor, layout) { errorBarsSupplyDefaults(traceIn, traceOut, lineColor || Color.defaultLine, {axis: 'y'}); errorBarsSupplyDefaults(traceIn, traceOut, lineColor || Color.defaultLine, {axis: 'x', inherit: 'y'}); - handleGroupingDefaults(traceIn, traceOut, layout, coerce); - Lib.coerceSelectionMarkerOpacity(traceOut, coerce); } -function handleGroupingDefaults(traceIn, traceOut, layout, coerce) { +function handleGroupingDefaults(traceIn, traceOut, fullLayout, coerce) { var orientation = traceOut.orientation; - // TODO make this work across matching axes too?!? - // TODO should this work per trace-type? - // one set for bar/histogram another for box/violin? - // or just one set for all trace trace types? + // N.B. grouping is done across all trace trace types that support it var posAxId = traceOut[{v: 'x', h: 'y'}[orientation] + 'axis']; - var groupId = posAxId + orientation; + var groupId = getAxisGroup(fullLayout, posAxId) + orientation; - var alignmentOpts = layout._alignmentOpts || {}; + var alignmentOpts = fullLayout._alignmentOpts || {}; var alignmentgroup = coerce('alignmentgroup'); var alignmentGroups = alignmentOpts[groupId]; @@ -123,7 +119,27 @@ function handleGroupingDefaults(traceIn, traceOut, layout, coerce) { } } +function crossTraceDefaults(fullData, fullLayout) { + var traceIn, traceOut; + + function coerce(attr) { + return Lib.coerce(traceOut._input, traceOut, attributes, attr); + } + + for(var i = 0; i < fullData.length; i++) { + traceOut = fullData[i]; + + if(traceOut.type === 'bar') { + traceIn = traceOut._input; + if(fullLayout.barmode === 'group') { + handleGroupingDefaults(traceIn, traceOut, fullLayout, coerce); + } + } + } +} + module.exports = { supplyDefaults: supplyDefaults, + crossTraceDefaults: crossTraceDefaults, handleGroupingDefaults: handleGroupingDefaults }; diff --git a/src/traces/bar/index.js b/src/traces/bar/index.js index b024c48764f..2da83f64c5b 100644 --- a/src/traces/bar/index.js +++ b/src/traces/bar/index.js @@ -13,6 +13,7 @@ var Bar = {}; Bar.attributes = require('./attributes'); Bar.layoutAttributes = require('./layout_attributes'); Bar.supplyDefaults = require('./defaults').supplyDefaults; +Bar.crossTraceDefaults = require('./defaults').crossTraceDefaults; Bar.supplyLayoutDefaults = require('./layout_defaults'); Bar.calc = require('./calc'); Bar.crossTraceCalc = require('./cross_trace_calc').crossTraceCalc; diff --git a/src/traces/bar/layout_defaults.js b/src/traces/bar/layout_defaults.js index 35ab979591b..1f688164dd0 100644 --- a/src/traces/bar/layout_defaults.js +++ b/src/traces/bar/layout_defaults.js @@ -15,8 +15,6 @@ var Lib = require('../../lib'); var layoutAttributes = require('./layout_attributes'); module.exports = function(layoutIn, layoutOut, fullData) { - var i, trace; - function coerce(attr, dflt) { return Lib.coerce(layoutIn, layoutOut, layoutAttributes, attr, dflt); } @@ -25,10 +23,9 @@ module.exports = function(layoutIn, layoutOut, fullData) { var shouldBeGapless = false; var gappedAnyway = false; var usedSubplots = {}; - var tracesWithGroupAttrs = []; - for(i = 0; i < fullData.length; i++) { - trace = fullData[i]; + for(var i = 0; i < fullData.length; i++) { + var trace = fullData[i]; if(Registry.traceIs(trace, 'bar') && trace.visible) hasBars = true; else continue; @@ -45,10 +42,6 @@ module.exports = function(layoutIn, layoutOut, fullData) { trace[trace.orientation === 'v' ? 'xaxis' : 'yaxis']); if(pa.type !== 'category') shouldBeGapless = true; } - - if(trace.alignmentgroup || trace.offsetgroup) { - tracesWithGroupAttrs.push(trace); - } } if(!hasBars) return; @@ -58,12 +51,4 @@ module.exports = function(layoutIn, layoutOut, fullData) { coerce('bargap', (shouldBeGapless && !gappedAnyway) ? 0 : 0.2); coerce('bargroupgap'); - - if(mode !== 'group') { - for(i = 0; i < tracesWithGroupAttrs.length; i++) { - trace = tracesWithGroupAttrs[i]; - delete trace.alignmentgroup; - delete trace.offsetgroup; - } - } }; diff --git a/src/traces/box/cross_trace_calc.js b/src/traces/box/cross_trace_calc.js index 93bca2d6f77..566c47d368a 100644 --- a/src/traces/box/cross_trace_calc.js +++ b/src/traces/box/cross_trace_calc.js @@ -10,6 +10,7 @@ var Axes = require('../../plots/cartesian/axes'); var Lib = require('../../lib'); +var getAxisGroup = require('../../plots/cartesian/axis_ids').getAxisGroup; var orientations = ['v', 'h']; @@ -104,7 +105,7 @@ function setPositionOffset(traceType, gd, boxList, posAxis) { dPos = dPos0; if(group) { - var groupId = posAxis._id + trace.orientation; + var groupId = getAxisGroup(fullLayout, posAxis._id) + trace.orientation; var alignmentGroups = fullLayout._alignmentOpts[groupId] || {}; var alignmentGroupOpts = alignmentGroups[trace.alignmentgroup] || {}; var nOffsetGroups = Object.keys(alignmentGroupOpts.offsetGroups || {}).length; diff --git a/src/traces/box/defaults.js b/src/traces/box/defaults.js index e473086afc8..b8e315cd0fc 100644 --- a/src/traces/box/defaults.js +++ b/src/traces/box/defaults.js @@ -34,7 +34,6 @@ function supplyDefaults(traceIn, traceOut, defaultColor, layout) { if(notched) coerce('notchwidth'); handlePointsDefaults(traceIn, traceOut, coerce, {prefix: 'box'}); - handleGroupingDefaults(traceIn, traceOut, layout, coerce); } function handleSampleDefaults(traceIn, traceOut, coerce, layout) { @@ -110,8 +109,30 @@ function handlePointsDefaults(traceIn, traceOut, coerce, opts) { Lib.coerceSelectionMarkerOpacity(traceOut, coerce); } +function crossTraceDefaults(fullData, fullLayout) { + var traceIn, traceOut; + + function coerce(attr) { + return Lib.coerce(traceOut._input, traceOut, attributes, attr); + } + + for(var i = 0; i < fullData.length; i++) { + traceOut = fullData[i]; + var traceType = traceOut.type; + + if(traceType === 'box' || traceType === 'violin') { + traceIn = traceOut._input; + if(fullLayout[traceType + 'mode'] === 'group') { + handleGroupingDefaults(traceIn, traceOut, fullLayout, coerce); + } + } + } +} + module.exports = { supplyDefaults: supplyDefaults, + crossTraceDefaults: crossTraceDefaults, + handleSampleDefaults: handleSampleDefaults, handlePointsDefaults: handlePointsDefaults }; diff --git a/src/traces/box/index.js b/src/traces/box/index.js index e8ffe05cc8a..174a3d6bb36 100644 --- a/src/traces/box/index.js +++ b/src/traces/box/index.js @@ -13,6 +13,7 @@ var Box = {}; Box.attributes = require('./attributes'); Box.layoutAttributes = require('./layout_attributes'); Box.supplyDefaults = require('./defaults').supplyDefaults; +Box.crossTraceDefaults = require('./defaults').crossTraceDefaults; Box.supplyLayoutDefaults = require('./layout_defaults').supplyLayoutDefaults; Box.calc = require('./calc'); Box.crossTraceCalc = require('./cross_trace_calc').crossTraceCalc; diff --git a/src/traces/box/layout_defaults.js b/src/traces/box/layout_defaults.js index 818355aab56..6c23d343a47 100644 --- a/src/traces/box/layout_defaults.js +++ b/src/traces/box/layout_defaults.js @@ -13,36 +13,22 @@ var Lib = require('../../lib'); var layoutAttributes = require('./layout_attributes'); function _supply(layoutIn, layoutOut, fullData, coerce, traceType) { - var i, trace; - var category = traceType + 'Layout'; var hasTraceType = false; - var tracesWithGroupAttrs = []; - for(i = 0; i < fullData.length; i++) { - trace = fullData[i]; + for(var i = 0; i < fullData.length; i++) { + var trace = fullData[i]; if(Registry.traceIs(trace, category)) { hasTraceType = true; - - if(trace.alignmentgroup || trace.offsetgroup) { - tracesWithGroupAttrs.push(trace); - } + break; } } if(!hasTraceType) return; - var mode = coerce(traceType + 'mode'); + coerce(traceType + 'mode'); coerce(traceType + 'gap'); coerce(traceType + 'groupgap'); - - if(mode !== 'group') { - for(i = 0; i < tracesWithGroupAttrs.length; i++) { - trace = tracesWithGroupAttrs[i]; - delete trace.alignmentgroup; - delete trace.offsetgroup; - } - } } function supplyLayoutDefaults(layoutIn, layoutOut, fullData) { diff --git a/src/traces/histogram/cross_trace_defaults.js b/src/traces/histogram/cross_trace_defaults.js index 4df1814fc71..0a7663cc43d 100644 --- a/src/traces/histogram/cross_trace_defaults.js +++ b/src/traces/histogram/cross_trace_defaults.js @@ -6,12 +6,13 @@ * LICENSE file in the root directory of this source tree. */ - 'use strict'; var Lib = require('../../lib'); var nestedProperty = Lib.nestedProperty; +var handleGroupingDefaults = require('../bar/defaults').handleGroupingDefaults; +var getAxisGroup = require('../../plots/cartesian/axis_ids').getAxisGroup; var attributes = require('./attributes'); var BINATTRS = { @@ -65,6 +66,8 @@ module.exports = function crossTraceDefaults(fullData, fullLayout) { direction: binDirection }; } + + handleGroupingDefaults(traceOut._input, traceOut, fullLayout, coerce); } for(group in allBinOpts) { @@ -111,13 +114,3 @@ module.exports = function crossTraceDefaults(fullData, fullLayout) { } } }; - -function getAxisGroup(fullLayout, axId) { - var matchGroups = fullLayout._axisMatchGroups; - - for(var i = 0; i < matchGroups.length; i++) { - var group = matchGroups[i]; - if(group[axId]) return 'g' + i; - } - return axId; -} diff --git a/src/traces/histogram/defaults.js b/src/traces/histogram/defaults.js index 6477b73fa7c..b8e94518e72 100644 --- a/src/traces/histogram/defaults.js +++ b/src/traces/histogram/defaults.js @@ -13,7 +13,6 @@ var Lib = require('../../lib'); var Color = require('../../components/color'); var handleStyleDefaults = require('../bar/style_defaults'); -var handleGroupingDefaults = require('../bar/defaults').handleGroupingDefaults; var attributes = require('./attributes'); module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout) { @@ -70,6 +69,4 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout var errorBarsSupplyDefaults = Registry.getComponentMethod('errorbars', 'supplyDefaults'); errorBarsSupplyDefaults(traceIn, traceOut, lineColor || Color.defaultLine, {axis: 'y'}); errorBarsSupplyDefaults(traceIn, traceOut, lineColor || Color.defaultLine, {axis: 'x', inherit: 'y'}); - - handleGroupingDefaults(traceIn, traceOut, layout, coerce); }; diff --git a/src/traces/violin/defaults.js b/src/traces/violin/defaults.js index 487577d6af5..0a0fa8d1a73 100644 --- a/src/traces/violin/defaults.js +++ b/src/traces/violin/defaults.js @@ -12,7 +12,6 @@ var Lib = require('../../lib'); var Color = require('../../components/color'); var boxDefaults = require('../box/defaults'); -var handleGroupingDefaults = require('../bar/defaults').handleGroupingDefaults; var attributes = require('./attributes'); module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout) { @@ -57,6 +56,4 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout var meanLineWidth = coerce2('meanline.width', lineWidth); var meanLineVisible = coerce('meanline.visible', Boolean(meanLineColor || meanLineWidth)); if(!meanLineVisible) traceOut.meanline = {visible: false}; - - handleGroupingDefaults(traceIn, traceOut, layout, coerce); }; diff --git a/src/traces/violin/index.js b/src/traces/violin/index.js index 9714268d519..92531e2cbf8 100644 --- a/src/traces/violin/index.js +++ b/src/traces/violin/index.js @@ -12,6 +12,7 @@ module.exports = { attributes: require('./attributes'), layoutAttributes: require('./layout_attributes'), supplyDefaults: require('./defaults'), + crossTraceDefaults: require('../box/defaults').crossTraceDefaults, supplyLayoutDefaults: require('./layout_defaults'), calc: require('./calc'), crossTraceCalc: require('./cross_trace_calc'), diff --git a/test/image/baselines/groups-over-matching-axes.png b/test/image/baselines/groups-over-matching-axes.png new file mode 100644 index 0000000000000000000000000000000000000000..635d61e7fac22271824eba1905b8459471c4ab59 GIT binary patch literal 34906 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