Skip to content

Commit e38c18b

Browse files
authored
Merge pull request #6698 from 28raining/dev-box-sigma-boxes
Adding box plots drawn on std-deviation instead of quartiles
2 parents e824199 + f84e93f commit e38c18b

File tree

9 files changed

+249
-18
lines changed

9 files changed

+249
-18
lines changed

Diff for: draftlogs/6697_add.md

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
- Add [1-6]-sigma (std deviations) box plots as an alternative to quartiles [[#6697](https://github.com/plotly/plotly.js/issues/6697)]

Diff for: src/traces/box/attributes.js

+33-1
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,30 @@ module.exports = {
218218
'right (left) for vertical boxes and above (below) for horizontal boxes'
219219
].join(' ')
220220
},
221-
221+
sdmultiple: {
222+
valType: 'number',
223+
min: 0,
224+
editType: 'calc',
225+
dflt: 1,
226+
description: [
227+
'Scales the box size when sizemode=sd',
228+
'Allowing boxes to be drawn across any stddev range',
229+
'For example 1-stddev, 3-stddev, 5-stddev',
230+
].join(' ')
231+
},
232+
sizemode: {
233+
valType: 'enumerated',
234+
values: ['quartiles', 'sd'],
235+
editType: 'calc',
236+
dflt: 'quartiles',
237+
description: [
238+
'Sets the upper and lower bound for the boxes',
239+
'quartiles means box is drawn between Q1 and Q3',
240+
'SD means the box is drawn between Mean +- Standard Deviation',
241+
'Argument sdmultiple (default 1) to scale the box size',
242+
'So it could be drawn 1-stddev, 3-stddev etc',
243+
].join(' ')
244+
},
222245
boxmean: {
223246
valType: 'enumerated',
224247
values: [true, 'sd', false],
@@ -378,6 +401,15 @@ module.exports = {
378401
].join(' ')
379402
},
380403

404+
showwhiskers: {
405+
valType: 'boolean',
406+
editType: 'calc',
407+
description: [
408+
'Determines whether or not whiskers are visible.',
409+
'Defaults to true for `sizemode` *quartiles*, false for *sd*.'
410+
].join(' ')
411+
},
412+
381413
offsetgroup: barAttrs.offsetgroup,
382414
alignmentgroup: barAttrs.alignmentgroup,
383415

Diff for: src/traces/box/calc.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ module.exports = function calc(gd, trace) {
221221
cdi.min = boxVals[0];
222222
cdi.max = boxVals[N - 1];
223223
cdi.mean = Lib.mean(boxVals, N);
224-
cdi.sd = Lib.stdev(boxVals, N, cdi.mean);
224+
cdi.sd = Lib.stdev(boxVals, N, cdi.mean) * trace.sdmultiple;
225225
cdi.med = Lib.interp(boxVals, 0.5);
226226

227227
if((N % 2) && (usesExclusive || usesInclusive)) {
@@ -286,7 +286,9 @@ module.exports = function calc(gd, trace) {
286286
q1: _(gd, 'q1:'),
287287
q3: _(gd, 'q3:'),
288288
max: _(gd, 'max:'),
289-
mean: trace.boxmean === 'sd' ? _(gd, 'mean ± σ:') : _(gd, 'mean:'),
289+
mean: (trace.boxmean === 'sd') || (trace.sizemode === 'sd') ?
290+
_(gd, 'mean ± σ:').replace('σ', trace.sdmultiple === 1 ? 'σ' : (trace.sdmultiple + 'σ')) : // displaying mean +- Nσ whilst supporting translations
291+
_(gd, 'mean:'),
290292
lf: _(gd, 'lower fence:'),
291293
uf: _(gd, 'upper fence:')
292294
}

Diff for: src/traces/box/defaults.js

+9-1
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,17 @@ function supplyDefaults(traceIn, traceOut, defaultColor, layout) {
4040
if(sd && sd.length) boxmeanDflt = 'sd';
4141
}
4242
}
43-
coerce('boxmean', boxmeanDflt);
4443

4544
coerce('whiskerwidth');
45+
var sizemode = coerce('sizemode');
46+
var boxmean;
47+
if(sizemode === 'quartiles') {
48+
boxmean = coerce('boxmean', boxmeanDflt);
49+
}
50+
coerce('showwhiskers', sizemode === 'quartiles');
51+
if((sizemode === 'sd') || (boxmean === 'sd')) {
52+
coerce('sdmultiple');
53+
}
4654
coerce('width');
4755
coerce('quartilemethod');
4856

Diff for: src/traces/box/hover.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ function hoverOnBoxes(pointData, xval, yval, hovermode) {
140140
pointData.spikeDistance = dxy(di) * spikePseudoDistance / hoverPseudoDistance;
141141
pointData[spikePosAttr] = pAxis.c2p(di.pos, true);
142142

143-
var hasMean = trace.boxmean || (trace.meanline || {}).visible;
143+
var hasMean = trace.boxmean || (trace.sizemode === 'sd') || (trace.meanline || {}).visible;
144144
var hasFences = trace.boxpoints || trace.points;
145145

146146
// 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) {
179179
// clicked point from a box during click-to-select
180180
pointData2.hoverOnBox = true;
181181

182-
if(attr === 'mean' && ('sd' in di) && trace.boxmean === 'sd') {
182+
if(attr === 'mean' && ('sd' in di) && ((trace.boxmean === 'sd') || (trace.sizemode === 'sd'))) {
183183
pointData2[vLetter + 'err'] = di.sd;
184184
}
185185

Diff for: src/traces/box/plot.js

+22-12
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ function plotBoxAndWhiskers(sel, axes, trace, t, isStatic) {
5454
var wdPos = t.wdPos || 0;
5555
var bPosPxOffset = t.bPosPxOffset || 0;
5656
var whiskerWidth = trace.whiskerwidth || 0;
57+
var showWhiskers = (trace.showwhiskers !== false);
5758
var notched = trace.notched || false;
5859
var nw = notched ? 1 - 2 * trace.notchwidth : 1;
5960

@@ -94,12 +95,15 @@ function plotBoxAndWhiskers(sel, axes, trace, t, isStatic) {
9495

9596
var posm0 = posAxis.l2p(lcenter - bdPos0 * nw) + bPosPxOffset;
9697
var posm1 = posAxis.l2p(lcenter + bdPos1 * nw) + bPosPxOffset;
97-
var q1 = valAxis.c2p(d.q1, true);
98-
var q3 = valAxis.c2p(d.q3, true);
98+
var sdmode = trace.sizemode === 'sd';
99+
var q1 = valAxis.c2p(sdmode ? d.mean - d.sd : d.q1, true);
100+
var q3 = sdmode ? valAxis.c2p(d.mean + d.sd, true) :
101+
valAxis.c2p(d.q3, true);
99102
// make sure median isn't identical to either of the
100103
// quartiles, so we can see it
101104
var m = Lib.constrain(
102-
valAxis.c2p(d.med, true),
105+
sdmode ? valAxis.c2p(d.mean, true) :
106+
valAxis.c2p(d.med, true),
103107
Math.min(q1, q3) + 1, Math.max(q1, q3) - 1
104108
);
105109

@@ -109,7 +113,7 @@ function plotBoxAndWhiskers(sel, axes, trace, t, isStatic) {
109113
// - box always has d.lf, but boxpoints can be anything
110114
// - violin has d.lf and should always use it (boxpoints is undefined)
111115
// - candlestick has only min/max
112-
var useExtremes = (d.lf === undefined) || (trace.boxpoints === false);
116+
var useExtremes = (d.lf === undefined) || (trace.boxpoints === false) || sdmode;
113117
var lf = valAxis.c2p(useExtremes ? d.min : d.lf, true);
114118
var uf = valAxis.c2p(useExtremes ? d.max : d.uf, true);
115119
var ln = valAxis.c2p(d.ln, true);
@@ -127,10 +131,13 @@ function plotBoxAndWhiskers(sel, axes, trace, t, isStatic) {
127131
'V' + pos0 + // right edge
128132
(notched ? 'H' + un + 'L' + m + ',' + posm0 + 'L' + ln + ',' + pos0 : '') + // bottom notched edge
129133
'Z' + // end of the box
130-
'M' + q1 + ',' + posc + 'H' + lf + 'M' + q3 + ',' + posc + 'H' + uf + // whiskers
131-
(whiskerWidth === 0 ?
132-
'' : // whisker caps
133-
'M' + lf + ',' + posw0 + 'V' + posw1 + 'M' + uf + ',' + posw0 + 'V' + posw1
134+
(showWhiskers ?
135+
'M' + q1 + ',' + posc + 'H' + lf + 'M' + q3 + ',' + posc + 'H' + uf + // whiskers
136+
(whiskerWidth === 0 ?
137+
'' : // whisker caps
138+
'M' + lf + ',' + posw0 + 'V' + posw1 + 'M' + uf + ',' + posw0 + 'V' + posw1
139+
) :
140+
''
134141
)
135142
);
136143
} else {
@@ -148,10 +155,13 @@ function plotBoxAndWhiskers(sel, axes, trace, t, isStatic) {
148155
''
149156
) + // notched left edge
150157
'Z' + // end of the box
151-
'M' + posc + ',' + q1 + 'V' + lf + 'M' + posc + ',' + q3 + 'V' + uf + // whiskers
152-
(whiskerWidth === 0 ?
153-
'' : // whisker caps
154-
'M' + posw0 + ',' + lf + 'H' + posw1 + 'M' + posw0 + ',' + uf + 'H' + posw1
158+
(showWhiskers ?
159+
'M' + posc + ',' + q1 + 'V' + lf + 'M' + posc + ',' + q3 + 'V' + uf + // whiskers
160+
(whiskerWidth === 0 ?
161+
'' : // whisker caps
162+
'M' + posw0 + ',' + lf + 'H' + posw1 + 'M' + posw0 + ',' + uf + 'H' + posw1
163+
) :
164+
''
155165
)
156166
);
157167
}

Diff for: test/image/baselines/box_sizemode_sd.png

46 KB
Loading

Diff for: test/image/mocks/box_sizemode_sd.json

+156
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
{
2+
"data": [
3+
{
4+
"y": [
5+
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,
6+
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,
7+
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,
8+
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,
9+
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,
10+
0.5233, 0.3291, 0.5555, 0.5397, 0.5068
11+
],
12+
"line": {
13+
"color": "#1c9099"
14+
},
15+
"type": "box",
16+
"boxpoints": "all",
17+
"pointpos": 0,
18+
"name": "1-sigma",
19+
"sizemode": "sd",
20+
"showwhiskers": false
21+
},
22+
{
23+
"y": [
24+
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,
25+
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,
26+
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,
27+
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,
28+
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,
29+
0.5233, 0.3291, 0.5555, 0.5397, 0.5068
30+
],
31+
"line": {
32+
"color": "#1c9099"
33+
},
34+
"boxpoints": "all",
35+
"pointpos": 0,
36+
"type": "box",
37+
"name": "2-sigma",
38+
"sdmultiple" : 2,
39+
"sizemode": "sd",
40+
"showwhiskers": false
41+
},
42+
{
43+
"y": [
44+
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,
45+
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,
46+
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,
47+
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,
48+
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,
49+
0.5233, 0.3291, 0.5555, 0.5397, 0.5068
50+
],
51+
"line": {
52+
"color": "#1c9099"
53+
},
54+
"type": "box",
55+
"boxpoints": "all",
56+
"pointpos": 0,
57+
"name": "3-sigma",
58+
"sdmultiple" : 3,
59+
"sizemode": "sd",
60+
"showwhiskers": false
61+
},
62+
{
63+
"y": [
64+
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,
65+
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,
66+
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,
67+
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,
68+
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,
69+
0.5233, 0.3291, 0.5555, 0.5397, 0.5068
70+
],
71+
"line": {
72+
"color": "#1c9099"
73+
},
74+
"type": "box",
75+
"boxpoints": "all",
76+
"pointpos": 0,
77+
"name": "1-sigma + whiskers",
78+
"sizemode": "sd",
79+
"showwhiskers": true
80+
},
81+
{
82+
"y": [
83+
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,
84+
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,
85+
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,
86+
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,
87+
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,
88+
0.5233, 0.3291, 0.5555, 0.5397, 0.5068
89+
],
90+
"line": {
91+
"color": "#1c9099"
92+
},
93+
"boxpoints": "all",
94+
"pointpos": 0,
95+
"type": "box",
96+
"name": "3-sigma + whiskers",
97+
"sdmultiple" : 3,
98+
"sizemode": "sd",
99+
"showwhiskers": true
100+
},
101+
{
102+
"y": [
103+
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,
104+
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,
105+
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,
106+
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,
107+
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,
108+
0.5233, 0.3291, 0.5555, 0.5397, 0.5068
109+
],
110+
"line": {
111+
"color": "#1c9099"
112+
},
113+
"boxpoints": "all",
114+
"pointpos": 0,
115+
"type": "box",
116+
"name": "diamond 1-sigma",
117+
"boxmean": "sd",
118+
"showwhiskers": false
119+
},
120+
{
121+
"y": [
122+
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,
123+
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,
124+
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,
125+
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,
126+
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,
127+
0.5233, 0.3291, 0.5555, 0.5397, 0.5068
128+
],
129+
"line": {
130+
"color": "#1c9099"
131+
},
132+
"boxpoints": "all",
133+
"pointpos": 0,
134+
"type": "box",
135+
"name": "diamond 3-sigma",
136+
"sdmultiple" : 3,
137+
"boxmean": "sd",
138+
"showwhiskers": false
139+
}
140+
],
141+
"layout": {
142+
"showlegend": false,
143+
"yaxis": {
144+
"title": { "text": "Random Variable" },
145+
"type": "linear",
146+
"range":[-0.2, 1.2]
147+
},
148+
"title": { "text": "Box plots drawn on std deviation instead of quartiles" },
149+
"xaxis": {
150+
"type": "category"
151+
},
152+
"height": 598,
153+
"width": 1080,
154+
"autosize": true
155+
}
156+
}

Diff for: test/plot-schema.json

+22
Original file line numberDiff line numberDiff line change
@@ -16738,6 +16738,13 @@
1673816738
"editType": "calc",
1673916739
"valType": "data_array"
1674016740
},
16741+
"sdmultiple": {
16742+
"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",
16743+
"dflt": 1,
16744+
"editType": "calc",
16745+
"min": 0,
16746+
"valType": "number"
16747+
},
1674116748
"sdsrc": {
1674216749
"description": "Sets the source reference on Chart Studio Cloud for `sd`.",
1674316750
"editType": "none",
@@ -16780,6 +16787,21 @@
1678016787
"editType": "style",
1678116788
"valType": "boolean"
1678216789
},
16790+
"showwhiskers": {
16791+
"description": "Determines whether or not whiskers are visible. Defaults to true for `sizemode` *quartiles*, false for *sd*.",
16792+
"editType": "calc",
16793+
"valType": "boolean"
16794+
},
16795+
"sizemode": {
16796+
"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",
16797+
"dflt": "quartiles",
16798+
"editType": "calc",
16799+
"valType": "enumerated",
16800+
"values": [
16801+
"quartiles",
16802+
"sd"
16803+
]
16804+
},
1678316805
"stream": {
1678416806
"editType": "calc",
1678516807
"maxpoints": {

0 commit comments

Comments
 (0)