Skip to content

Commit 2f4786d

Browse files
committed
fix errorbar when coord input arrays differ from their calc arrays
- for example, when 'x' array is given (i.e. the x0/dx case) or when numeric string are inputted.
1 parent 57eb8ef commit 2f4786d

File tree

4 files changed

+34
-11
lines changed

4 files changed

+34
-11
lines changed

src/traces/scattergl/convert.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -360,10 +360,11 @@ function convertLinePositions(gd, trace, positions) {
360360
};
361361
}
362362

363-
function convertErrorBarPositions(gd, trace, positions) {
363+
function convertErrorBarPositions(gd, trace, pos, x, y) {
364364
var calcFromTrace = Registry.getComponentMethod('errorbars', 'calcFromTrace');
365-
var vals = calcFromTrace(trace, gd._fullLayout);
366-
var count = positions.length / 2;
365+
var _trace = Lib.extendFlat({}, trace, {x: x, y: y});
366+
var vals = calcFromTrace(_trace, gd._fullLayout);
367+
var count = pos.length / 2;
367368
var out = {};
368369

369370
function put(axLetter) {
@@ -373,25 +374,24 @@ function convertErrorBarPositions(gd, trace, positions) {
373374
var eOffset = {x: [0, 1, 2, 3], y: [2, 3, 0, 1]}[axLetter];
374375

375376
for(var i = 0, p = 0; i < count; i++, p += 4) {
376-
errors[p + eOffset[0]] = positions[i * 2 + pOffset] - ax.d2l(vals[i][axLetter + 's']) || 0;
377-
errors[p + eOffset[1]] = ax.d2l(vals[i][axLetter + 'h']) - positions[i * 2 + pOffset] || 0;
377+
errors[p + eOffset[0]] = pos[i * 2 + pOffset] - ax.c2l(vals[i][axLetter + 's']) || 0;
378+
errors[p + eOffset[1]] = ax.c2l(vals[i][axLetter + 'h']) - pos[i * 2 + pOffset] || 0;
378379
errors[p + eOffset[2]] = 0;
379380
errors[p + eOffset[3]] = 0;
380381
}
381382

382383
return errors;
383384
}
384385

385-
386386
if(trace.error_x && trace.error_x.visible) {
387387
out.x = {
388-
positions: positions,
388+
positions: pos,
389389
errors: put('x')
390390
};
391391
}
392392
if(trace.error_y && trace.error_y.visible) {
393393
out.y = {
394-
positions: positions,
394+
positions: pos,
395395
errors: put('y')
396396
};
397397
}

src/traces/scattergl/index.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ function calc(gd, trace) {
8282

8383
// create scene options and scene
8484
calcColorscales(trace);
85-
var opts = sceneOptions(gd, subplot, trace, positions);
85+
var opts = sceneOptions(gd, subplot, trace, positions, x, y);
8686
var scene = sceneUpdate(gd, subplot);
8787

8888
// Re-use SVG scatter axis expansion routine except
@@ -133,7 +133,7 @@ function calc(gd, trace) {
133133
}
134134

135135
// create scene options
136-
function sceneOptions(gd, subplot, trace, positions) {
136+
function sceneOptions(gd, subplot, trace, positions, x, y) {
137137
var opts = convertStyle(gd, trace);
138138

139139
if(opts.marker) {
@@ -148,7 +148,7 @@ function sceneOptions(gd, subplot, trace, positions) {
148148
}
149149

150150
if(opts.errorX || opts.errorY) {
151-
var errors = convertErrorBarPositions(gd, trace, positions);
151+
var errors = convertErrorBarPositions(gd, trace, positions, x, y);
152152

153153
if(opts.errorX) {
154154
Lib.extendFlat(opts.errorX, errors.x);
3.33 KB
Loading

test/image/mocks/gl2d_error_bars.json

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
{
22
"data": [
3+
{
4+
"x": [6],
5+
"y": ["2"],
6+
"error_y": {
7+
"type": "data",
8+
"array": [2],
9+
"arrayminus": [4]
10+
},
11+
"type": "scattergl"
12+
},
313
{
414
"x": [
515
0,
@@ -92,6 +102,19 @@
92102
"value": 10
93103
},
94104
"type": "scattergl"
105+
},
106+
{
107+
"y": [
108+
3,
109+
3,
110+
6,
111+
5
112+
],
113+
"error_x": {
114+
"type": "constant",
115+
"value": 0.1
116+
},
117+
"type": "scattergl"
95118
}
96119
]
97120
}

0 commit comments

Comments
 (0)