From 7241716d3fd76df63bacb605032cb7a465af4d6a Mon Sep 17 00:00:00 2001 From: 28raining Date: Sat, 5 Aug 2023 14:16:11 -0700 Subject: [PATCH 01/20] First push --- CONTRIBUTING.md | 8 +- src/traces/box/attributes.js | 13 ++- src/traces/box/defaults.js | 1 + src/traces/box/hover.js | 2 +- src/traces/box/plot.js | 47 ++++++++--- test/image/mocks/box_3sigma.json | 133 +++++++++++++++++++++++++++++++ test/plot-schema.json | 14 +++- 7 files changed, 203 insertions(+), 15 deletions(-) create mode 100644 test/image/mocks/box_3sigma.json diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b9414f7d2fa..f6f832eab62 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -118,7 +118,7 @@ npm start This command bundles up the source files and opens up a tab in your browser. -#### Step 6: Open up the console and start developing +#### Step 6a: Open up the console and start developing A typical workflow is to make some modifications to the source, update the test dashboard, inspect and debug the changes, then repeat. The test dashboard @@ -146,6 +146,12 @@ Three additional helpers exist that are refreshed every second: There is also a search bar in the top right of the dashboard. This fuzzy-searches image mocks based on their file name and trace type. +#### Step 6b: Create a mock to test new features +Create a new JSON inside +`test\image\mocks\` +which you'll then be able to search from the test dashboard + + #### Step 7: Regenerate plot-schema in "test" folder then review & commit potential changes ```bash diff --git a/src/traces/box/attributes.js b/src/traces/box/attributes.js index 81fdce06524..29abca58351 100644 --- a/src/traces/box/attributes.js +++ b/src/traces/box/attributes.js @@ -221,12 +221,14 @@ module.exports = { boxmean: { valType: 'enumerated', - values: [true, 'sd', false], + values: [true, 'sd', '1sigma', '2sigma', '3sigma', '4sigma', '5sigma', '6sigma', false], editType: 'calc', description: [ 'If *true*, the mean of the box(es)\' underlying distribution is', 'drawn as a dashed line inside the box(es).', 'If *sd* the standard deviation is also drawn.', + 'If 1sigma the box is drawn between mean+-sigma, instead of median+-quartile', + '1sigma, 2sigma, ... , 6sigma are availabe', 'Defaults to *true* when `mean` is set.', 'Defaults to *sd* when `sd` is set', 'Otherwise defaults to *false*.' @@ -378,6 +380,15 @@ module.exports = { ].join(' ') }, + whiskerdisable: { + valType: 'boolean', + dflt: false, + editType: 'calc', + description: [ + 'Determines whether or not whiskers are visible' + ].join(' ') + }, + offsetgroup: barAttrs.offsetgroup, alignmentgroup: barAttrs.alignmentgroup, diff --git a/src/traces/box/defaults.js b/src/traces/box/defaults.js index f2f087b714a..18e35195f7e 100644 --- a/src/traces/box/defaults.js +++ b/src/traces/box/defaults.js @@ -43,6 +43,7 @@ function supplyDefaults(traceIn, traceOut, defaultColor, layout) { coerce('boxmean', boxmeanDflt); coerce('whiskerwidth'); + coerce('whiskerdisable'); coerce('width'); coerce('quartilemethod'); diff --git a/src/traces/box/hover.js b/src/traces/box/hover.js index 479d434f42c..ca44fa14643 100644 --- a/src/traces/box/hover.js +++ b/src/traces/box/hover.js @@ -179,7 +179,7 @@ function hoverOnBoxes(pointData, xval, yval, hovermode) { // clicked point from a box during click-to-select pointData2.hoverOnBox = true; - if(attr === 'mean' && ('sd' in di) && trace.boxmean === 'sd') { + if(attr === 'mean' && ('sd' in di) && ((trace.boxmean === 'sd') || (trace.boxmean === '1sigma') || (trace.boxmean === '2sigma') || (trace.boxmean === '3sigma') || (trace.boxmean === '4sigma') || (trace.boxmean === '5sigma') || (trace.boxmean === '6sigma'))) { pointData2[vLetter + 'err'] = di.sd; } diff --git a/src/traces/box/plot.js b/src/traces/box/plot.js index 3fd80ce070e..a06ea57ea2d 100644 --- a/src/traces/box/plot.js +++ b/src/traces/box/plot.js @@ -54,6 +54,7 @@ function plotBoxAndWhiskers(sel, axes, trace, t, isStatic) { var wdPos = t.wdPos || 0; var bPosPxOffset = t.bPosPxOffset || 0; var whiskerWidth = trace.whiskerwidth || 0; + var whiskerDisable = trace.whiskerdisable || false; var notched = trace.notched || false; var nw = notched ? 1 - 2 * trace.notchwidth : 1; @@ -94,12 +95,30 @@ function plotBoxAndWhiskers(sel, axes, trace, t, isStatic) { var posm0 = posAxis.l2p(lcenter - bdPos0 * nw) + bPosPxOffset; var posm1 = posAxis.l2p(lcenter + bdPos1 * nw) + bPosPxOffset; - var q1 = valAxis.c2p(d.q1, true); - var q3 = valAxis.c2p(d.q3, true); + var q1 = trace.boxmean === '1sigma' ? valAxis.c2p(d.mean - 1 * d.sd, true) : + trace.boxmean === '2sigma' ? valAxis.c2p(d.mean - 2 * d.sd, true) : + trace.boxmean === '3sigma' ? valAxis.c2p(d.mean - 3 * d.sd, true) : + trace.boxmean === '4sigma' ? valAxis.c2p(d.mean - 4 * d.sd, true) : + trace.boxmean === '5sigma' ? valAxis.c2p(d.mean - 5 * d.sd, true) : + trace.boxmean === '6sigma' ? valAxis.c2p(d.mean - 6 * d.sd, true) : + valAxis.c2p(d.q1, true); + var q3 = trace.boxmean === '1sigma' ? valAxis.c2p(d.mean + 1 * d.sd, true) : + trace.boxmean === '2sigma' ? valAxis.c2p(d.mean + 2 * d.sd, true) : + trace.boxmean === '3sigma' ? valAxis.c2p(d.mean + 3 * d.sd, true) : + trace.boxmean === '4sigma' ? valAxis.c2p(d.mean + 4 * d.sd, true) : + trace.boxmean === '5sigma' ? valAxis.c2p(d.mean + 5 * d.sd, true) : + trace.boxmean === '6sigma' ? valAxis.c2p(d.mean + 6 * d.sd, true) : + valAxis.c2p(d.q3, true); // make sure median isn't identical to either of the // quartiles, so we can see it var m = Lib.constrain( - valAxis.c2p(d.med, true), + trace.boxmean === '1sigma' ? valAxis.c2p(d.mean, true) : + trace.boxmean === '2sigma' ? valAxis.c2p(d.mean, true) : + trace.boxmean === '3sigma' ? valAxis.c2p(d.mean, true) : + trace.boxmean === '4sigma' ? valAxis.c2p(d.mean, true) : + trace.boxmean === '5sigma' ? valAxis.c2p(d.mean, true) : + trace.boxmean === '6sigma' ? valAxis.c2p(d.mean, true) : + valAxis.c2p(d.med, true), Math.min(q1, q3) + 1, Math.max(q1, q3) - 1 ); @@ -127,10 +146,13 @@ function plotBoxAndWhiskers(sel, axes, trace, t, isStatic) { 'V' + pos0 + // right edge (notched ? 'H' + un + 'L' + m + ',' + posm0 + 'L' + ln + ',' + pos0 : '') + // bottom notched edge 'Z' + // end of the box - 'M' + q1 + ',' + posc + 'H' + lf + 'M' + q3 + ',' + posc + 'H' + uf + // whiskers - (whiskerWidth === 0 ? - '' : // whisker caps - 'M' + lf + ',' + posw0 + 'V' + posw1 + 'M' + uf + ',' + posw0 + 'V' + posw1 + (!whiskerDisable ? + 'M' + q1 + ',' + posc + 'H' + lf + 'M' + q3 + ',' + posc + 'H' + uf + // whiskers + (whiskerWidth === 0 ? + '' : // whisker caps + 'M' + lf + ',' + posw0 + 'V' + posw1 + 'M' + uf + ',' + posw0 + 'V' + posw1 + ) : + '' ) ); } else { @@ -148,10 +170,13 @@ function plotBoxAndWhiskers(sel, axes, trace, t, isStatic) { '' ) + // notched left edge 'Z' + // end of the box - 'M' + posc + ',' + q1 + 'V' + lf + 'M' + posc + ',' + q3 + 'V' + uf + // whiskers - (whiskerWidth === 0 ? - '' : // whisker caps - 'M' + posw0 + ',' + lf + 'H' + posw1 + 'M' + posw0 + ',' + uf + 'H' + posw1 + (!whiskerDisable ? + 'M' + posc + ',' + q1 + 'V' + lf + 'M' + posc + ',' + q3 + 'V' + uf + // whiskers + (whiskerWidth === 0 ? + '' : // whisker caps + 'M' + posw0 + ',' + lf + 'H' + posw1 + 'M' + posw0 + ',' + uf + 'H' + posw1 + ) : + '' ) ); } diff --git a/test/image/mocks/box_3sigma.json b/test/image/mocks/box_3sigma.json new file mode 100644 index 00000000000..f4896282355 --- /dev/null +++ b/test/image/mocks/box_3sigma.json @@ -0,0 +1,133 @@ +{ + "data": [ + { + "y": [ + 0.4995, 0.3786, 0.5188, 0.4505, 0.5805, 0.5539, 0.7341, 0.3303, 0.6202, 0.4754, 0.4814, 0.6103, 0.5157, 0.3841, 0.6166, 0.4917, 0.5646, 0.4532, 0.5983, + 0.5079, 0.5227, 0.5483, 0.3081, 0.5172, 0.4127, 0.3871, 0.4703, 0.5331, 0.4573, 0.6187, 0.5718, 0.4474, 0.5349, 0.4614, 0.3096, 0.4411, 0.7143, 0.5956, + 0.5171, 0.5515, 0.4234, 0.4589, 0.4289, 0.417, 0.4229, 0.5039, 0.4726, 0.5382, 0.261, 0.5326, 0.4472, 0.54, 0.4998, 0.5513, 0.3891, 0.4821, 0.5006, + 0.4362, 0.4184, 0.3632, 0.5182, 0.5229, 0.5493, 0.507, 0.4528, 0.4836, 0.5009, 0.49, 0.5757, 0.5408, 0.4246, 0.511, 0.5216, 0.3817, 0.4471, 0.4935, + 0.5668, 0.3187, 0.3633, 0.5964, 0.637, 0.4701, 0.4292, 0.4921, 0.439, 0.5846, 0.4502, 0.44, 0.3057, 0.4756, 0.4867, 0.502, 0.438, 0.6819, 0.2607, + 0.5233, 0.3291, 0.5555, 0.5397, 0.5068 + ], + "line": { + "color": "#1c9099" + }, + "type": "box", + "boxpoints": "all", + "pointpos": 0, + "name": "1-sigma", + "boxmean": "1sigma", + "whiskerdisable": true + }, + { + "y": [ + 0.4995, 0.3786, 0.5188, 0.4505, 0.5805, 0.5539, 0.7341, 0.3303, 0.6202, 0.4754, 0.4814, 0.6103, 0.5157, 0.3841, 0.6166, 0.4917, 0.5646, 0.4532, 0.5983, + 0.5079, 0.5227, 0.5483, 0.3081, 0.5172, 0.4127, 0.3871, 0.4703, 0.5331, 0.4573, 0.6187, 0.5718, 0.4474, 0.5349, 0.4614, 0.3096, 0.4411, 0.7143, 0.5956, + 0.5171, 0.5515, 0.4234, 0.4589, 0.4289, 0.417, 0.4229, 0.5039, 0.4726, 0.5382, 0.261, 0.5326, 0.4472, 0.54, 0.4998, 0.5513, 0.3891, 0.4821, 0.5006, + 0.4362, 0.4184, 0.3632, 0.5182, 0.5229, 0.5493, 0.507, 0.4528, 0.4836, 0.5009, 0.49, 0.5757, 0.5408, 0.4246, 0.511, 0.5216, 0.3817, 0.4471, 0.4935, + 0.5668, 0.3187, 0.3633, 0.5964, 0.637, 0.4701, 0.4292, 0.4921, 0.439, 0.5846, 0.4502, 0.44, 0.3057, 0.4756, 0.4867, 0.502, 0.438, 0.6819, 0.2607, + 0.5233, 0.3291, 0.5555, 0.5397, 0.5068 + ], + "line": { + "color": "#1c9099" + }, + "boxpoints": "all", + "pointpos": 0, + "type": "box", + "name": "2-sigma", + "boxmean": "2sigma", + "whiskerdisable": true + }, + { + "y": [ + 0.4995, 0.3786, 0.5188, 0.4505, 0.5805, 0.5539, 0.7341, 0.3303, 0.6202, 0.4754, 0.4814, 0.6103, 0.5157, 0.3841, 0.6166, 0.4917, 0.5646, 0.4532, 0.5983, + 0.5079, 0.5227, 0.5483, 0.3081, 0.5172, 0.4127, 0.3871, 0.4703, 0.5331, 0.4573, 0.6187, 0.5718, 0.4474, 0.5349, 0.4614, 0.3096, 0.4411, 0.7143, 0.5956, + 0.5171, 0.5515, 0.4234, 0.4589, 0.4289, 0.417, 0.4229, 0.5039, 0.4726, 0.5382, 0.261, 0.5326, 0.4472, 0.54, 0.4998, 0.5513, 0.3891, 0.4821, 0.5006, + 0.4362, 0.4184, 0.3632, 0.5182, 0.5229, 0.5493, 0.507, 0.4528, 0.4836, 0.5009, 0.49, 0.5757, 0.5408, 0.4246, 0.511, 0.5216, 0.3817, 0.4471, 0.4935, + 0.5668, 0.3187, 0.3633, 0.5964, 0.637, 0.4701, 0.4292, 0.4921, 0.439, 0.5846, 0.4502, 0.44, 0.3057, 0.4756, 0.4867, 0.502, 0.438, 0.6819, 0.2607, + 0.5233, 0.3291, 0.5555, 0.5397, 0.5068 + ], + "line": { + "color": "#1c9099" + }, + "type": "box", + "boxpoints": "all", + "pointpos": 0, + "name": "3-sigma", + "boxmean": "3sigma", + "whiskerdisable": true + }, + { + "y": [ + 0.4995, 0.3786, 0.5188, 0.4505, 0.5805, 0.5539, 0.7341, 0.3303, 0.6202, 0.4754, 0.4814, 0.6103, 0.5157, 0.3841, 0.6166, 0.4917, 0.5646, 0.4532, 0.5983, + 0.5079, 0.5227, 0.5483, 0.3081, 0.5172, 0.4127, 0.3871, 0.4703, 0.5331, 0.4573, 0.6187, 0.5718, 0.4474, 0.5349, 0.4614, 0.3096, 0.4411, 0.7143, 0.5956, + 0.5171, 0.5515, 0.4234, 0.4589, 0.4289, 0.417, 0.4229, 0.5039, 0.4726, 0.5382, 0.261, 0.5326, 0.4472, 0.54, 0.4998, 0.5513, 0.3891, 0.4821, 0.5006, + 0.4362, 0.4184, 0.3632, 0.5182, 0.5229, 0.5493, 0.507, 0.4528, 0.4836, 0.5009, 0.49, 0.5757, 0.5408, 0.4246, 0.511, 0.5216, 0.3817, 0.4471, 0.4935, + 0.5668, 0.3187, 0.3633, 0.5964, 0.637, 0.4701, 0.4292, 0.4921, 0.439, 0.5846, 0.4502, 0.44, 0.3057, 0.4756, 0.4867, 0.502, 0.438, 0.6819, 0.2607, + 0.5233, 0.3291, 0.5555, 0.5397, 0.5068 + ], + "line": { + "color": "#1c9099" + }, + "type": "box", + "boxpoints": "all", + "pointpos": 0, + "name": "4-sigma", + "boxmean": "4sigma", + "whiskerdisable": true + }, + { + "y": [ + 0.4995, 0.3786, 0.5188, 0.4505, 0.5805, 0.5539, 0.7341, 0.3303, 0.6202, 0.4754, 0.4814, 0.6103, 0.5157, 0.3841, 0.6166, 0.4917, 0.5646, 0.4532, 0.5983, + 0.5079, 0.5227, 0.5483, 0.3081, 0.5172, 0.4127, 0.3871, 0.4703, 0.5331, 0.4573, 0.6187, 0.5718, 0.4474, 0.5349, 0.4614, 0.3096, 0.4411, 0.7143, 0.5956, + 0.5171, 0.5515, 0.4234, 0.4589, 0.4289, 0.417, 0.4229, 0.5039, 0.4726, 0.5382, 0.261, 0.5326, 0.4472, 0.54, 0.4998, 0.5513, 0.3891, 0.4821, 0.5006, + 0.4362, 0.4184, 0.3632, 0.5182, 0.5229, 0.5493, 0.507, 0.4528, 0.4836, 0.5009, 0.49, 0.5757, 0.5408, 0.4246, 0.511, 0.5216, 0.3817, 0.4471, 0.4935, + 0.5668, 0.3187, 0.3633, 0.5964, 0.637, 0.4701, 0.4292, 0.4921, 0.439, 0.5846, 0.4502, 0.44, 0.3057, 0.4756, 0.4867, 0.502, 0.438, 0.6819, 0.2607, + 0.5233, 0.3291, 0.5555, 0.5397, 0.5068 + ], + "line": { + "color": "#1c9099" + }, + "boxpoints": "all", + "pointpos": 0, + "type": "box", + "name": "5-sigma", + "boxmean": "5sigma", + "whiskerdisable": true + }, + { + "y": [ + 0.4995, 0.3786, 0.5188, 0.4505, 0.5805, 0.5539, 0.7341, 0.3303, 0.6202, 0.4754, 0.4814, 0.6103, 0.5157, 0.3841, 0.6166, 0.4917, 0.5646, 0.4532, 0.5983, + 0.5079, 0.5227, 0.5483, 0.3081, 0.5172, 0.4127, 0.3871, 0.4703, 0.5331, 0.4573, 0.6187, 0.5718, 0.4474, 0.5349, 0.4614, 0.3096, 0.4411, 0.7143, 0.5956, + 0.5171, 0.5515, 0.4234, 0.4589, 0.4289, 0.417, 0.4229, 0.5039, 0.4726, 0.5382, 0.261, 0.5326, 0.4472, 0.54, 0.4998, 0.5513, 0.3891, 0.4821, 0.5006, + 0.4362, 0.4184, 0.3632, 0.5182, 0.5229, 0.5493, 0.507, 0.4528, 0.4836, 0.5009, 0.49, 0.5757, 0.5408, 0.4246, 0.511, 0.5216, 0.3817, 0.4471, 0.4935, + 0.5668, 0.3187, 0.3633, 0.5964, 0.637, 0.4701, 0.4292, 0.4921, 0.439, 0.5846, 0.4502, 0.44, 0.3057, 0.4756, 0.4867, 0.502, 0.438, 0.6819, 0.2607, + 0.5233, 0.3291, 0.5555, 0.5397, 0.5068 + ], + "line": { + "color": "#1c9099" + }, + "boxpoints": "all", + "pointpos": 0, + "type": "box", + "name": "6-sigma", + "boxmean": "6sigma", + "whiskerdisable": true + } + ], + "layout": { + "showlegend": false, + "yaxis": { + "title": { "text": "Random Variable" }, + "type": "linear", + "range":[-0.2, 1.2] + }, + "title": { "text": "Box plots drawn on std deviation instead of quartiles" }, + "xaxis": { + "type": "category" + }, + "height": 598, + "width": 1080, + "autosize": true + } +} diff --git a/test/plot-schema.json b/test/plot-schema.json index 813b0668adc..047de22c34d 100644 --- a/test/plot-schema.json +++ b/test/plot-schema.json @@ -15607,12 +15607,18 @@ "valType": "string" }, "boxmean": { - "description": "If *true*, the mean of the box(es)' underlying distribution is drawn as a dashed line inside the box(es). If *sd* the standard deviation is also drawn. Defaults to *true* when `mean` is set. Defaults to *sd* when `sd` is set Otherwise defaults to *false*.", + "description": "If *true*, the mean of the box(es)' underlying distribution is drawn as a dashed line inside the box(es). If *sd* the standard deviation is also drawn. If 1sigma the box is drawn between mean+-sigma, instead of median+-quartile 1sigma, 2sigma, ... , 6sigma are availabe Defaults to *true* when `mean` is set. Defaults to *sd* when `sd` is set Otherwise defaults to *false*.", "editType": "calc", "valType": "enumerated", "values": [ true, "sd", + "1sigma", + "2sigma", + "3sigma", + "4sigma", + "5sigma", + "6sigma", false ] }, @@ -16735,6 +16741,12 @@ "legendonly" ] }, + "whiskerdisable": { + "description": "Determines whether or not whiskers are visible", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, "whiskerwidth": { "description": "Sets the width of the whiskers relative to the box' width. For example, with 1, the whiskers are as wide as the box(es).", "dflt": 0.5, From fe3d2d089e57afe992bd84d9388c0bdf88b26ef7 Mon Sep 17 00:00:00 2001 From: 28raining Date: Sat, 5 Aug 2023 14:36:40 -0700 Subject: [PATCH 02/20] Adding draftlog --- draftlogs/6697_add.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 draftlogs/6697_add.md diff --git a/draftlogs/6697_add.md b/draftlogs/6697_add.md new file mode 100644 index 00000000000..17a8170daa2 --- /dev/null +++ b/draftlogs/6697_add.md @@ -0,0 +1 @@ +- Add [1-6]-sigma (std deviations) box plots as an alternative to quartiles [[#6697](https://github.com/plotly/plotly.js/issues/6697)] \ No newline at end of file From 923df18b7fc78d82e5b6a748ce4a4aaddcb562e8 Mon Sep 17 00:00:00 2001 From: 28raining Date: Sat, 12 Aug 2023 10:47:12 -0700 Subject: [PATCH 03/20] Create sizemode after fb in pull 6698 Creating sizemode and sdmultiple to allow plots with any standard deviation, and a simpler cleaner codebase. use 'showwhisker' insteadk of 'whiskerdisable' adding .png to allow unit test to pass hover annotation labels number of std deviations chosen --- src/traces/box/attributes.js | 31 ++++++++-- src/traces/box/calc.js | 4 +- src/traces/box/defaults.js | 4 +- src/traces/box/hover.js | 4 +- src/traces/box/plot.js | 35 ++++-------- test/image/baselines/box_sizemode_sd.png | Bin 0 -> 59802 bytes .../{box_3sigma.json => box_sizemode_sd.json} | 53 +++++++++++++----- test/jasmine/tests/box_test.js | 6 +- 8 files changed, 85 insertions(+), 52 deletions(-) create mode 100644 test/image/baselines/box_sizemode_sd.png rename test/image/mocks/{box_3sigma.json => box_sizemode_sd.json} (80%) diff --git a/src/traces/box/attributes.js b/src/traces/box/attributes.js index 29abca58351..8ac5d0b3270 100644 --- a/src/traces/box/attributes.js +++ b/src/traces/box/attributes.js @@ -218,10 +218,33 @@ module.exports = { 'right (left) for vertical boxes and above (below) for horizontal boxes' ].join(' ') }, - + sdmultiple: { + valType: 'number', + min: 0, + editType: 'calc', + dflt: 1, + description: [ + 'Scales the box size when sizemode=sd', + 'Allowing boxes to be drawn across any stddev range', + 'For example 1-stddev, 3-stddev, 5-stddev', + ].join(' ') + }, + sizemode: { + valType: 'enumerated', + values: ['quartiles', 'sd'], + editType: 'calc', + dflt: 'quartiles', + description: [ + 'Sets the upper and lower bound for the boxes', + 'quartiles means box is drawn between Q1 and Q3', + 'SD means the box is drawn between Mean +- Standard Deviation', + 'Argument sdmultiple (default 1) to scale the box size', + 'So it could be drawn 1-stddev, 3-stddev etc', + ].join(' ') + }, boxmean: { valType: 'enumerated', - values: [true, 'sd', '1sigma', '2sigma', '3sigma', '4sigma', '5sigma', '6sigma', false], + values: [true, 'sd', false], editType: 'calc', description: [ 'If *true*, the mean of the box(es)\' underlying distribution is', @@ -380,9 +403,9 @@ module.exports = { ].join(' ') }, - whiskerdisable: { + showwhiskers: { valType: 'boolean', - dflt: false, + dflt: true, editType: 'calc', description: [ 'Determines whether or not whiskers are visible' diff --git a/src/traces/box/calc.js b/src/traces/box/calc.js index 83eadb0b1f8..b1f15470d7d 100644 --- a/src/traces/box/calc.js +++ b/src/traces/box/calc.js @@ -221,7 +221,7 @@ module.exports = function calc(gd, trace) { cdi.min = boxVals[0]; cdi.max = boxVals[N - 1]; cdi.mean = Lib.mean(boxVals, N); - cdi.sd = Lib.stdev(boxVals, N, cdi.mean); + cdi.sd = Lib.stdev(boxVals, N, cdi.mean) * trace.sdmultiple; cdi.med = Lib.interp(boxVals, 0.5); if((N % 2) && (usesExclusive || usesInclusive)) { @@ -286,7 +286,7 @@ module.exports = function calc(gd, trace) { q1: _(gd, 'q1:'), q3: _(gd, 'q3:'), max: _(gd, 'max:'), - mean: trace.boxmean === 'sd' ? _(gd, 'mean ± σ:') : _(gd, 'mean:'), + mean: (trace.boxmean === 'sd') || (trace.sizemode === 'sd') ? _(gd, 'mean ± ' + trace.sdmultiple + 'σ:') : _(gd, 'mean:'), lf: _(gd, 'lower fence:'), uf: _(gd, 'upper fence:') } diff --git a/src/traces/box/defaults.js b/src/traces/box/defaults.js index 18e35195f7e..bdc863a2cd1 100644 --- a/src/traces/box/defaults.js +++ b/src/traces/box/defaults.js @@ -43,7 +43,9 @@ function supplyDefaults(traceIn, traceOut, defaultColor, layout) { coerce('boxmean', boxmeanDflt); coerce('whiskerwidth'); - coerce('whiskerdisable'); + coerce('showwhiskers'); + coerce('sizemode'); + coerce('sdmultiple'); coerce('width'); coerce('quartilemethod'); diff --git a/src/traces/box/hover.js b/src/traces/box/hover.js index ca44fa14643..8eddfe96235 100644 --- a/src/traces/box/hover.js +++ b/src/traces/box/hover.js @@ -140,7 +140,7 @@ function hoverOnBoxes(pointData, xval, yval, hovermode) { pointData.spikeDistance = dxy(di) * spikePseudoDistance / hoverPseudoDistance; pointData[spikePosAttr] = pAxis.c2p(di.pos, true); - var hasMean = trace.boxmean || (trace.meanline || {}).visible; + var hasMean = trace.boxmean || (trace.sizemode === 'sd') || (trace.meanline || {}).visible; var hasFences = trace.boxpoints || trace.points; // labels with equal values (e.g. when min === q1) should still be presented in the order they have when they're unequal @@ -179,7 +179,7 @@ function hoverOnBoxes(pointData, xval, yval, hovermode) { // clicked point from a box during click-to-select pointData2.hoverOnBox = true; - if(attr === 'mean' && ('sd' in di) && ((trace.boxmean === 'sd') || (trace.boxmean === '1sigma') || (trace.boxmean === '2sigma') || (trace.boxmean === '3sigma') || (trace.boxmean === '4sigma') || (trace.boxmean === '5sigma') || (trace.boxmean === '6sigma'))) { + if(attr === 'mean' && ('sd' in di) && ((trace.boxmean === 'sd') || (trace.sizemode === 'sd'))) { pointData2[vLetter + 'err'] = di.sd; } diff --git a/src/traces/box/plot.js b/src/traces/box/plot.js index a06ea57ea2d..951a8be55bb 100644 --- a/src/traces/box/plot.js +++ b/src/traces/box/plot.js @@ -54,7 +54,7 @@ function plotBoxAndWhiskers(sel, axes, trace, t, isStatic) { var wdPos = t.wdPos || 0; var bPosPxOffset = t.bPosPxOffset || 0; var whiskerWidth = trace.whiskerwidth || 0; - var whiskerDisable = trace.whiskerdisable || false; + var showWhiskers = trace.showwhiskers; var notched = trace.notched || false; var nw = notched ? 1 - 2 * trace.notchwidth : 1; @@ -95,30 +95,15 @@ function plotBoxAndWhiskers(sel, axes, trace, t, isStatic) { var posm0 = posAxis.l2p(lcenter - bdPos0 * nw) + bPosPxOffset; var posm1 = posAxis.l2p(lcenter + bdPos1 * nw) + bPosPxOffset; - var q1 = trace.boxmean === '1sigma' ? valAxis.c2p(d.mean - 1 * d.sd, true) : - trace.boxmean === '2sigma' ? valAxis.c2p(d.mean - 2 * d.sd, true) : - trace.boxmean === '3sigma' ? valAxis.c2p(d.mean - 3 * d.sd, true) : - trace.boxmean === '4sigma' ? valAxis.c2p(d.mean - 4 * d.sd, true) : - trace.boxmean === '5sigma' ? valAxis.c2p(d.mean - 5 * d.sd, true) : - trace.boxmean === '6sigma' ? valAxis.c2p(d.mean - 6 * d.sd, true) : - valAxis.c2p(d.q1, true); - var q3 = trace.boxmean === '1sigma' ? valAxis.c2p(d.mean + 1 * d.sd, true) : - trace.boxmean === '2sigma' ? valAxis.c2p(d.mean + 2 * d.sd, true) : - trace.boxmean === '3sigma' ? valAxis.c2p(d.mean + 3 * d.sd, true) : - trace.boxmean === '4sigma' ? valAxis.c2p(d.mean + 4 * d.sd, true) : - trace.boxmean === '5sigma' ? valAxis.c2p(d.mean + 5 * d.sd, true) : - trace.boxmean === '6sigma' ? valAxis.c2p(d.mean + 6 * d.sd, true) : - valAxis.c2p(d.q3, true); + var q1 = trace.sizemode === 'sd' ? valAxis.c2p(d.mean - 1 * d.sd, true) : + valAxis.c2p(d.q1, true); + var q3 = trace.sizemode === 'sd' ? valAxis.c2p(d.mean + 1 * d.sd, true) : + valAxis.c2p(d.q3, true); // make sure median isn't identical to either of the // quartiles, so we can see it var m = Lib.constrain( - trace.boxmean === '1sigma' ? valAxis.c2p(d.mean, true) : - trace.boxmean === '2sigma' ? valAxis.c2p(d.mean, true) : - trace.boxmean === '3sigma' ? valAxis.c2p(d.mean, true) : - trace.boxmean === '4sigma' ? valAxis.c2p(d.mean, true) : - trace.boxmean === '5sigma' ? valAxis.c2p(d.mean, true) : - trace.boxmean === '6sigma' ? valAxis.c2p(d.mean, true) : - valAxis.c2p(d.med, true), + trace.sizemode === 'sd' ? valAxis.c2p(d.mean, true) : + valAxis.c2p(d.med, true), Math.min(q1, q3) + 1, Math.max(q1, q3) - 1 ); @@ -128,7 +113,7 @@ function plotBoxAndWhiskers(sel, axes, trace, t, isStatic) { // - box always has d.lf, but boxpoints can be anything // - violin has d.lf and should always use it (boxpoints is undefined) // - candlestick has only min/max - var useExtremes = (d.lf === undefined) || (trace.boxpoints === false); + var useExtremes = (d.lf === undefined) || (trace.boxpoints === false) || (trace.sizemode === 'sd'); var lf = valAxis.c2p(useExtremes ? d.min : d.lf, true); var uf = valAxis.c2p(useExtremes ? d.max : d.uf, true); var ln = valAxis.c2p(d.ln, true); @@ -146,7 +131,7 @@ function plotBoxAndWhiskers(sel, axes, trace, t, isStatic) { 'V' + pos0 + // right edge (notched ? 'H' + un + 'L' + m + ',' + posm0 + 'L' + ln + ',' + pos0 : '') + // bottom notched edge 'Z' + // end of the box - (!whiskerDisable ? + (showWhiskers ? 'M' + q1 + ',' + posc + 'H' + lf + 'M' + q3 + ',' + posc + 'H' + uf + // whiskers (whiskerWidth === 0 ? '' : // whisker caps @@ -170,7 +155,7 @@ function plotBoxAndWhiskers(sel, axes, trace, t, isStatic) { '' ) + // notched left edge 'Z' + // end of the box - (!whiskerDisable ? + (showWhiskers ? 'M' + posc + ',' + q1 + 'V' + lf + 'M' + posc + ',' + q3 + 'V' + uf + // whiskers (whiskerWidth === 0 ? '' : // whisker caps diff --git a/test/image/baselines/box_sizemode_sd.png b/test/image/baselines/box_sizemode_sd.png new file mode 100644 index 0000000000000000000000000000000000000000..f2feddd311fb73528699211f66b4b4a7167bb67f GIT binary patch literal 59802 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 Date: Sat, 12 Aug 2023 11:13:36 -0700 Subject: [PATCH 04/20] Fix failing translate string --- src/traces/box/calc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/traces/box/calc.js b/src/traces/box/calc.js index b1f15470d7d..b382722f680 100644 --- a/src/traces/box/calc.js +++ b/src/traces/box/calc.js @@ -286,7 +286,7 @@ module.exports = function calc(gd, trace) { q1: _(gd, 'q1:'), q3: _(gd, 'q3:'), max: _(gd, 'max:'), - mean: (trace.boxmean === 'sd') || (trace.sizemode === 'sd') ? _(gd, 'mean ± ' + trace.sdmultiple + 'σ:') : _(gd, 'mean:'), + mean: (trace.boxmean === 'sd') || (trace.sizemode === 'sd') ? (gd, 'mean ± ' + trace.sdmultiple + 'σ:') : _(gd, 'mean:'), lf: _(gd, 'lower fence:'), uf: _(gd, 'upper fence:') } From 3e1319eba82e464a815740d48a1b4698533c1165 Mon Sep 17 00:00:00 2001 From: 28raining Date: Sat, 12 Aug 2023 11:21:11 -0700 Subject: [PATCH 05/20] Updating schema --- src/traces/box/attributes.js | 2 -- test/plot-schema.json | 37 +++++++++++++++++++++++------------- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/src/traces/box/attributes.js b/src/traces/box/attributes.js index 8ac5d0b3270..8a8ed663de4 100644 --- a/src/traces/box/attributes.js +++ b/src/traces/box/attributes.js @@ -250,8 +250,6 @@ module.exports = { 'If *true*, the mean of the box(es)\' underlying distribution is', 'drawn as a dashed line inside the box(es).', 'If *sd* the standard deviation is also drawn.', - 'If 1sigma the box is drawn between mean+-sigma, instead of median+-quartile', - '1sigma, 2sigma, ... , 6sigma are availabe', 'Defaults to *true* when `mean` is set.', 'Defaults to *sd* when `sd` is set', 'Otherwise defaults to *false*.' diff --git a/test/plot-schema.json b/test/plot-schema.json index 047de22c34d..c9327f7dd5c 100644 --- a/test/plot-schema.json +++ b/test/plot-schema.json @@ -15607,18 +15607,12 @@ "valType": "string" }, "boxmean": { - "description": "If *true*, the mean of the box(es)' underlying distribution is drawn as a dashed line inside the box(es). If *sd* the standard deviation is also drawn. If 1sigma the box is drawn between mean+-sigma, instead of median+-quartile 1sigma, 2sigma, ... , 6sigma are availabe Defaults to *true* when `mean` is set. Defaults to *sd* when `sd` is set Otherwise defaults to *false*.", + "description": "If *true*, the mean of the box(es)' underlying distribution is drawn as a dashed line inside the box(es). If *sd* the standard deviation is also drawn. Defaults to *true* when `mean` is set. Defaults to *sd* when `sd` is set Otherwise defaults to *false*.", "editType": "calc", "valType": "enumerated", "values": [ true, "sd", - "1sigma", - "2sigma", - "3sigma", - "4sigma", - "5sigma", - "6sigma", false ] }, @@ -16600,6 +16594,13 @@ "editType": "calc", "valType": "data_array" }, + "sdmultiple": { + "description": "Scales the box size when sizemode=sd Allowing boxes to be drawn across any stddev range For example 1-stddev, 3-stddev, 5-stddev", + "dflt": 1, + "editType": "calc", + "min": 0, + "valType": "number" + }, "sdsrc": { "description": "Sets the source reference on Chart Studio Cloud for `sd`.", "editType": "none", @@ -16642,6 +16643,22 @@ "editType": "style", "valType": "boolean" }, + "showwhiskers": { + "description": "Determines whether or not whiskers are visible", + "dflt": true, + "editType": "calc", + "valType": "boolean" + }, + "sizemode": { + "description": "Sets the upper and lower bound for the boxes quartiles means box is drawn between Q1 and Q3 SD means the box is drawn between Mean +- Standard Deviation Argument sdmultiple (default 1) to scale the box size So it could be drawn 1-stddev, 3-stddev etc", + "dflt": "quartiles", + "editType": "calc", + "valType": "enumerated", + "values": [ + "quartiles", + "sd" + ] + }, "stream": { "editType": "calc", "maxpoints": { @@ -16741,12 +16758,6 @@ "legendonly" ] }, - "whiskerdisable": { - "description": "Determines whether or not whiskers are visible", - "dflt": false, - "editType": "calc", - "valType": "boolean" - }, "whiskerwidth": { "description": "Sets the width of the whiskers relative to the box' width. For example, with 1, the whiskers are as wide as the box(es).", "dflt": 0.5, From 0e9d5a6e47d1467b2b923cdb736f37f9f95fe02e Mon Sep 17 00:00:00 2001 From: 28raining Date: Mon, 14 Aug 2023 21:28:50 -0700 Subject: [PATCH 06/20] generate correct baseline. Use .replace to keep var in translated string --- src/traces/box/calc.js | 4 +++- test/image/baselines/box_sizemode_sd.png | Bin 59802 -> 47137 bytes 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/traces/box/calc.js b/src/traces/box/calc.js index b382722f680..1026c8b573d 100644 --- a/src/traces/box/calc.js +++ b/src/traces/box/calc.js @@ -286,7 +286,9 @@ module.exports = function calc(gd, trace) { q1: _(gd, 'q1:'), q3: _(gd, 'q3:'), max: _(gd, 'max:'), - mean: (trace.boxmean === 'sd') || (trace.sizemode === 'sd') ? (gd, 'mean ± ' + trace.sdmultiple + 'σ:') : _(gd, 'mean:'), + mean: (trace.boxmean === 'sd') || (trace.sizemode === 'sd') ? + _(gd, 'mean ± σ:').replace('σ', trace.sdmultiple===1 ? 'σ' : (trace.sdmultiple + 'σ')) : //displaying mean +- Nσ whilst supporting translations + _(gd, 'mean:'), lf: _(gd, 'lower fence:'), uf: _(gd, 'upper fence:') } diff --git a/test/image/baselines/box_sizemode_sd.png b/test/image/baselines/box_sizemode_sd.png index f2feddd311fb73528699211f66b4b4a7167bb67f..38f0999a4ca7dff3c3bb19f63ca88fbe616e31e5 100644 GIT binary patch literal 47137 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

RKBSME{Fx)z4SCgi7$% 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 z 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 z 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

F--q8jqzy}D}wC1C+i+N1?Vn8 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 Date: Mon, 14 Aug 2023 21:58:44 -0700 Subject: [PATCH 07/20] re-add whiskers to violin plots --- src/traces/box/calc.js | 4 ++-- src/traces/violin/attributes.js | 1 + src/traces/violin/defaults.js | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/traces/box/calc.js b/src/traces/box/calc.js index 1026c8b573d..cbb045d189e 100644 --- a/src/traces/box/calc.js +++ b/src/traces/box/calc.js @@ -286,8 +286,8 @@ module.exports = function calc(gd, trace) { q1: _(gd, 'q1:'), q3: _(gd, 'q3:'), max: _(gd, 'max:'), - mean: (trace.boxmean === 'sd') || (trace.sizemode === 'sd') ? - _(gd, 'mean ± σ:').replace('σ', trace.sdmultiple===1 ? 'σ' : (trace.sdmultiple + 'σ')) : //displaying mean +- Nσ whilst supporting translations + mean: (trace.boxmean === 'sd') || (trace.sizemode === 'sd') ? + _(gd, 'mean ± σ:').replace('σ', trace.sdmultiple === 1 ? 'σ' : (trace.sdmultiple + 'σ')) : // displaying mean +- Nσ whilst supporting translations _(gd, 'mean:'), lf: _(gd, 'lower fence:'), uf: _(gd, 'upper fence:') diff --git a/src/traces/violin/attributes.js b/src/traces/violin/attributes.js index 9cb1d9f33af..9c3de099896 100644 --- a/src/traces/violin/attributes.js +++ b/src/traces/violin/attributes.js @@ -155,6 +155,7 @@ module.exports = { hovertemplate: boxAttrs.hovertemplate, quartilemethod: boxAttrs.quartilemethod, + showwhiskers: boxAttrs.showwhiskers, box: { visible: { diff --git a/src/traces/violin/defaults.js b/src/traces/violin/defaults.js index 1224fdd9bc8..665304e9072 100644 --- a/src/traces/violin/defaults.js +++ b/src/traces/violin/defaults.js @@ -49,5 +49,6 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout var meanLineVisible = coerce('meanline.visible', Boolean(meanLineColor || meanLineWidth)); if(!meanLineVisible) traceOut.meanline = {visible: false}; + coerce('showwhiskers'); coerce('quartilemethod'); }; From 6ea8d6d5f6aaaf293f7c3a76d316704773ded4ad Mon Sep 17 00:00:00 2001 From: 28raining Date: Tue, 15 Aug 2023 07:33:08 -0700 Subject: [PATCH 08/20] Update src/traces/box/plot.js tidy code Co-authored-by: Alex Johnson --- src/traces/box/plot.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/traces/box/plot.js b/src/traces/box/plot.js index 951a8be55bb..cf7e60bc01c 100644 --- a/src/traces/box/plot.js +++ b/src/traces/box/plot.js @@ -95,8 +95,8 @@ function plotBoxAndWhiskers(sel, axes, trace, t, isStatic) { var posm0 = posAxis.l2p(lcenter - bdPos0 * nw) + bPosPxOffset; var posm1 = posAxis.l2p(lcenter + bdPos1 * nw) + bPosPxOffset; - var q1 = trace.sizemode === 'sd' ? valAxis.c2p(d.mean - 1 * d.sd, true) : - valAxis.c2p(d.q1, true); + var sdmode = trace.sizemode === 'sd'; + var q1 = valAxis.c2p(sdmode ? d.mean - d.sd : d.q1, true); var q3 = trace.sizemode === 'sd' ? valAxis.c2p(d.mean + 1 * d.sd, true) : valAxis.c2p(d.q3, true); // make sure median isn't identical to either of the From c3f9ea765b60e610ee79bafe794484a82b6191bd Mon Sep 17 00:00:00 2001 From: 28raining Date: Tue, 15 Aug 2023 07:37:41 -0700 Subject: [PATCH 09/20] reverting jasmine test --- test/jasmine/tests/box_test.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/jasmine/tests/box_test.js b/test/jasmine/tests/box_test.js index 4c980ce22e7..b350804d63c 100644 --- a/test/jasmine/tests/box_test.js +++ b/test/jasmine/tests/box_test.js @@ -769,7 +769,7 @@ describe('Test box hover:', function() { }, nums: [ 'median: 0.55', 'min: 0', 'lower fence: 0', 'q1: 0.3', 'q3: 0.6', 'upper fence: 0.7', 'max: 0.7', - 'mean ± 1σ: 0.45 ± 0.2362908' + 'mean ± σ: 0.45 ± 0.2362908' ], name: ['radishes', '', '', '', '', '', '', ''], axis: 'day 1' @@ -927,7 +927,7 @@ describe('Test box hover:', function() { 'max: 1', 'lower fence: 0.3', 'upper fence: 1', - 'mean ± 1σ: 0.6833333 ± 0.2409472', + 'mean ± σ: 0.6833333 ± 0.2409472', ], name: ['carrots', '', '', '', '', '', '', ''], axis: 'day 2' @@ -943,7 +943,7 @@ describe('Test box hover:', function() { '(max: 1, day 2)', '(lower fence: 0.3, day 2)', '(upper fence: 1, day 2)', - '(mean ± 1σ: 0.6833333 ± 0.2409472, day 2)' + '(mean ± σ: 0.6833333 ± 0.2409472, day 2)' ], name: ['carrots', '', '', '', '', '', '', ''], }, { From 4e4b486d612fa04ee2df58414c99cd4f82a94437 Mon Sep 17 00:00:00 2001 From: 28raining Date: Tue, 15 Aug 2023 07:40:19 -0700 Subject: [PATCH 10/20] Change whisker default if sizemode=='sd' Co-authored-by: Alex Johnson --- src/traces/box/defaults.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/traces/box/defaults.js b/src/traces/box/defaults.js index bdc863a2cd1..dc4643afaed 100644 --- a/src/traces/box/defaults.js +++ b/src/traces/box/defaults.js @@ -43,8 +43,8 @@ function supplyDefaults(traceIn, traceOut, defaultColor, layout) { coerce('boxmean', boxmeanDflt); coerce('whiskerwidth'); - coerce('showwhiskers'); - coerce('sizemode'); + var sizemode = coerce('sizemode'); + coerce('showwhiskers', sizemode === 'quartiles'); coerce('sdmultiple'); coerce('width'); coerce('quartilemethod'); From b3812f823c55f827de66435cbdc1286d22f6cb06 Mon Sep 17 00:00:00 2001 From: 28raining Date: Tue, 15 Aug 2023 07:58:54 -0700 Subject: [PATCH 11/20] add showwhiskers to candlestick --- src/traces/candlestick/attributes.js | 3 +++ src/traces/candlestick/defaults.js | 2 ++ 2 files changed, 5 insertions(+) diff --git a/src/traces/candlestick/attributes.js b/src/traces/candlestick/attributes.js index e114d59307b..96103cf9574 100644 --- a/src/traces/candlestick/attributes.js +++ b/src/traces/candlestick/attributes.js @@ -51,6 +51,9 @@ module.exports = { hovertext: OHLCattrs.hovertext, whiskerwidth: extendFlat({}, boxAttrs.whiskerwidth, { dflt: 0 }), + showwhiskers: boxAttrs.showwhiskers, + sizemode: boxAttrs.sizemode, + hoverlabel: OHLCattrs.hoverlabel, }; diff --git a/src/traces/candlestick/defaults.js b/src/traces/candlestick/defaults.js index 43ca40f8809..bb7ed79e592 100644 --- a/src/traces/candlestick/defaults.js +++ b/src/traces/candlestick/defaults.js @@ -29,6 +29,8 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout coerce('text'); coerce('hovertext'); coerce('whiskerwidth'); + coerce('sizemode'); + coerce('showwhiskers'); layout._requestRangeslider[traceOut.xaxis] = true; }; From 505a14e2033233a90b3370c09a302d9648e04909 Mon Sep 17 00:00:00 2001 From: 28raining Date: Tue, 15 Aug 2023 19:54:47 -0700 Subject: [PATCH 12/20] if sizemode === quartiles, don't use boxmean Co-authored-by: Alex Johnson --- src/traces/box/defaults.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/traces/box/defaults.js b/src/traces/box/defaults.js index dc4643afaed..d38540a2046 100644 --- a/src/traces/box/defaults.js +++ b/src/traces/box/defaults.js @@ -40,10 +40,12 @@ function supplyDefaults(traceIn, traceOut, defaultColor, layout) { if(sd && sd.length) boxmeanDflt = 'sd'; } } - coerce('boxmean', boxmeanDflt); coerce('whiskerwidth'); var sizemode = coerce('sizemode'); + if (sizemode === 'quartiles') { + coerce('boxmean', boxmeanDflt); + } coerce('showwhiskers', sizemode === 'quartiles'); coerce('sdmultiple'); coerce('width'); From 3a3b46c193bfac17ab71dd0b3c59327bcd54e629 Mon Sep 17 00:00:00 2001 From: 28raining Date: Tue, 15 Aug 2023 19:57:13 -0700 Subject: [PATCH 13/20] Update description for whisker default behavior Co-authored-by: Alex Johnson --- src/traces/box/attributes.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/traces/box/attributes.js b/src/traces/box/attributes.js index 8a8ed663de4..95c8a80e538 100644 --- a/src/traces/box/attributes.js +++ b/src/traces/box/attributes.js @@ -403,10 +403,10 @@ module.exports = { showwhiskers: { valType: 'boolean', - dflt: true, editType: 'calc', description: [ - 'Determines whether or not whiskers are visible' + 'Determines whether or not whiskers are visible.', + 'Defaults to true for `sizemode` *quartiles*, false for *sd*.' ].join(' ') }, From 44e13556ca51fb08f87c0c5c6b0b51f1510514cf Mon Sep 17 00:00:00 2001 From: 28raining Date: Tue, 15 Aug 2023 20:05:23 -0700 Subject: [PATCH 14/20] roll back candelstick and violin changes simplify sizemode usage --- src/traces/candlestick/attributes.js | 3 --- src/traces/candlestick/defaults.js | 2 -- src/traces/violin/attributes.js | 3 +-- src/traces/violin/defaults.js | 1 - 4 files changed, 1 insertion(+), 8 deletions(-) diff --git a/src/traces/candlestick/attributes.js b/src/traces/candlestick/attributes.js index 96103cf9574..e114d59307b 100644 --- a/src/traces/candlestick/attributes.js +++ b/src/traces/candlestick/attributes.js @@ -51,9 +51,6 @@ module.exports = { hovertext: OHLCattrs.hovertext, whiskerwidth: extendFlat({}, boxAttrs.whiskerwidth, { dflt: 0 }), - showwhiskers: boxAttrs.showwhiskers, - sizemode: boxAttrs.sizemode, - hoverlabel: OHLCattrs.hoverlabel, }; diff --git a/src/traces/candlestick/defaults.js b/src/traces/candlestick/defaults.js index bb7ed79e592..43ca40f8809 100644 --- a/src/traces/candlestick/defaults.js +++ b/src/traces/candlestick/defaults.js @@ -29,8 +29,6 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout coerce('text'); coerce('hovertext'); coerce('whiskerwidth'); - coerce('sizemode'); - coerce('showwhiskers'); layout._requestRangeslider[traceOut.xaxis] = true; }; diff --git a/src/traces/violin/attributes.js b/src/traces/violin/attributes.js index 9c3de099896..18d1358ee13 100644 --- a/src/traces/violin/attributes.js +++ b/src/traces/violin/attributes.js @@ -16,7 +16,7 @@ module.exports = { name: extendFlat({}, boxAttrs.name, { description: [ 'Sets the trace name.', - 'The trace name appear as the legend item and on hover.', + 'The trace name appears as the legend item and on hover.', 'For violin traces, the name will also be used for the position', 'coordinate, if `x` and `x0` (`y` and `y0` if horizontal) are', 'missing and the position axis is categorical.', @@ -155,7 +155,6 @@ module.exports = { hovertemplate: boxAttrs.hovertemplate, quartilemethod: boxAttrs.quartilemethod, - showwhiskers: boxAttrs.showwhiskers, box: { visible: { diff --git a/src/traces/violin/defaults.js b/src/traces/violin/defaults.js index 665304e9072..1224fdd9bc8 100644 --- a/src/traces/violin/defaults.js +++ b/src/traces/violin/defaults.js @@ -49,6 +49,5 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout var meanLineVisible = coerce('meanline.visible', Boolean(meanLineColor || meanLineWidth)); if(!meanLineVisible) traceOut.meanline = {visible: false}; - coerce('showwhiskers'); coerce('quartilemethod'); }; From edfa543992897e760c76d7ccb88e33417dae9da8 Mon Sep 17 00:00:00 2001 From: 28raining Date: Tue, 15 Aug 2023 20:05:34 -0700 Subject: [PATCH 15/20] simplify sizemode usage --- src/traces/box/plot.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/traces/box/plot.js b/src/traces/box/plot.js index cf7e60bc01c..3249457c8c5 100644 --- a/src/traces/box/plot.js +++ b/src/traces/box/plot.js @@ -54,7 +54,7 @@ function plotBoxAndWhiskers(sel, axes, trace, t, isStatic) { var wdPos = t.wdPos || 0; var bPosPxOffset = t.bPosPxOffset || 0; var whiskerWidth = trace.whiskerwidth || 0; - var showWhiskers = trace.showwhiskers; + var showWhiskers = (trace.showwhiskers !== false); var notched = trace.notched || false; var nw = notched ? 1 - 2 * trace.notchwidth : 1; @@ -97,13 +97,13 @@ function plotBoxAndWhiskers(sel, axes, trace, t, isStatic) { var posm1 = posAxis.l2p(lcenter + bdPos1 * nw) + bPosPxOffset; var sdmode = trace.sizemode === 'sd'; var q1 = valAxis.c2p(sdmode ? d.mean - d.sd : d.q1, true); - var q3 = trace.sizemode === 'sd' ? valAxis.c2p(d.mean + 1 * d.sd, true) : - valAxis.c2p(d.q3, true); + var q3 = sdmode ? valAxis.c2p(d.mean + d.sd, true) : + valAxis.c2p(d.q3, true); // make sure median isn't identical to either of the // quartiles, so we can see it var m = Lib.constrain( - trace.sizemode === 'sd' ? valAxis.c2p(d.mean, true) : - valAxis.c2p(d.med, true), + sdmode ? valAxis.c2p(d.mean, true) : + valAxis.c2p(d.med, true), Math.min(q1, q3) + 1, Math.max(q1, q3) - 1 ); @@ -113,7 +113,7 @@ function plotBoxAndWhiskers(sel, axes, trace, t, isStatic) { // - box always has d.lf, but boxpoints can be anything // - violin has d.lf and should always use it (boxpoints is undefined) // - candlestick has only min/max - var useExtremes = (d.lf === undefined) || (trace.boxpoints === false) || (trace.sizemode === 'sd'); + var useExtremes = (d.lf === undefined) || (trace.boxpoints === false) || sdmode; var lf = valAxis.c2p(useExtremes ? d.min : d.lf, true); var uf = valAxis.c2p(useExtremes ? d.max : d.uf, true); var ln = valAxis.c2p(d.ln, true); From a48f2ce77b3852a230e6480ffc58792ab166ba00 Mon Sep 17 00:00:00 2001 From: 28raining Date: Tue, 15 Aug 2023 20:06:35 -0700 Subject: [PATCH 16/20] fix lint --- src/traces/box/defaults.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/traces/box/defaults.js b/src/traces/box/defaults.js index d38540a2046..d8b74659bc6 100644 --- a/src/traces/box/defaults.js +++ b/src/traces/box/defaults.js @@ -43,7 +43,7 @@ function supplyDefaults(traceIn, traceOut, defaultColor, layout) { coerce('whiskerwidth'); var sizemode = coerce('sizemode'); - if (sizemode === 'quartiles') { + if(sizemode === 'quartiles') { coerce('boxmean', boxmeanDflt); } coerce('showwhiskers', sizemode === 'quartiles'); From 66dcba7484338af9f8398559c0d018dd228ddec3 Mon Sep 17 00:00:00 2001 From: 28raining Date: Tue, 15 Aug 2023 20:14:00 -0700 Subject: [PATCH 17/20] update schema --- test/plot-schema.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/test/plot-schema.json b/test/plot-schema.json index c9327f7dd5c..46fcf4978e7 100644 --- a/test/plot-schema.json +++ b/test/plot-schema.json @@ -16644,8 +16644,7 @@ "valType": "boolean" }, "showwhiskers": { - "description": "Determines whether or not whiskers are visible", - "dflt": true, + "description": "Determines whether or not whiskers are visible. Defaults to true for `sizemode` *quartiles*, false for *sd*.", "editType": "calc", "valType": "boolean" }, @@ -72453,7 +72452,7 @@ "valType": "string" }, "name": { - "description": "Sets the trace name. The trace name appear as the legend item and on hover. For violin traces, the name will also be used for the position coordinate, if `x` and `x0` (`y` and `y0` if horizontal) are missing and the position axis is categorical. Note that the trace name is also used as a default value for attribute `scalegroup` (please see its description for details).", + "description": "Sets the trace name. The trace name appears as the legend item and on hover. For violin traces, the name will also be used for the position coordinate, if `x` and `x0` (`y` and `y0` if horizontal) are missing and the position axis is categorical. Note that the trace name is also used as a default value for attribute `scalegroup` (please see its description for details).", "editType": "calc+clearAxisTypes", "valType": "string" }, From 013f4d35b94ed015e22f96f1fb7264596b446bbd Mon Sep 17 00:00:00 2001 From: 28raining Date: Tue, 15 Aug 2023 20:42:11 -0700 Subject: [PATCH 18/20] roll back violin further --- src/traces/violin/attributes.js | 2 +- test/plot-schema.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/traces/violin/attributes.js b/src/traces/violin/attributes.js index 18d1358ee13..9cb1d9f33af 100644 --- a/src/traces/violin/attributes.js +++ b/src/traces/violin/attributes.js @@ -16,7 +16,7 @@ module.exports = { name: extendFlat({}, boxAttrs.name, { description: [ 'Sets the trace name.', - 'The trace name appears as the legend item and on hover.', + 'The trace name appear as the legend item and on hover.', 'For violin traces, the name will also be used for the position', 'coordinate, if `x` and `x0` (`y` and `y0` if horizontal) are', 'missing and the position axis is categorical.', diff --git a/test/plot-schema.json b/test/plot-schema.json index 46fcf4978e7..d9f9e58c7fa 100644 --- a/test/plot-schema.json +++ b/test/plot-schema.json @@ -72452,7 +72452,7 @@ "valType": "string" }, "name": { - "description": "Sets the trace name. The trace name appears as the legend item and on hover. For violin traces, the name will also be used for the position coordinate, if `x` and `x0` (`y` and `y0` if horizontal) are missing and the position axis is categorical. Note that the trace name is also used as a default value for attribute `scalegroup` (please see its description for details).", + "description": "Sets the trace name. The trace name appear as the legend item and on hover. For violin traces, the name will also be used for the position coordinate, if `x` and `x0` (`y` and `y0` if horizontal) are missing and the position axis is categorical. Note that the trace name is also used as a default value for attribute `scalegroup` (please see its description for details).", "editType": "calc+clearAxisTypes", "valType": "string" }, From 1668fe9ee3e4e03ff45bdb2b956367bb8056153c Mon Sep 17 00:00:00 2001 From: 28raining Date: Wed, 16 Aug 2023 18:12:38 -0700 Subject: [PATCH 19/20] rolled back contributing --- CONTRIBUTING.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f6f832eab62..b9414f7d2fa 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -118,7 +118,7 @@ npm start This command bundles up the source files and opens up a tab in your browser. -#### Step 6a: Open up the console and start developing +#### Step 6: Open up the console and start developing A typical workflow is to make some modifications to the source, update the test dashboard, inspect and debug the changes, then repeat. The test dashboard @@ -146,12 +146,6 @@ Three additional helpers exist that are refreshed every second: There is also a search bar in the top right of the dashboard. This fuzzy-searches image mocks based on their file name and trace type. -#### Step 6b: Create a mock to test new features -Create a new JSON inside -`test\image\mocks\` -which you'll then be able to search from the test dashboard - - #### Step 7: Regenerate plot-schema in "test" folder then review & commit potential changes ```bash From f84e93f0147f63009154b5c2c36035b37831fafe Mon Sep 17 00:00:00 2001 From: 28raining Date: Wed, 16 Aug 2023 18:21:56 -0700 Subject: [PATCH 20/20] selectively coerce sdmultiple --- src/traces/box/defaults.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/traces/box/defaults.js b/src/traces/box/defaults.js index d8b74659bc6..892d4401bd0 100644 --- a/src/traces/box/defaults.js +++ b/src/traces/box/defaults.js @@ -43,11 +43,14 @@ function supplyDefaults(traceIn, traceOut, defaultColor, layout) { coerce('whiskerwidth'); var sizemode = coerce('sizemode'); + var boxmean; if(sizemode === 'quartiles') { - coerce('boxmean', boxmeanDflt); + boxmean = coerce('boxmean', boxmeanDflt); } coerce('showwhiskers', sizemode === 'quartiles'); - coerce('sdmultiple'); + if((sizemode === 'sd') || (boxmean === 'sd')) { + coerce('sdmultiple'); + } coerce('width'); coerce('quartilemethod');