Skip to content

Commit 95d253d

Browse files
committed
introduce period positioning for cartesian traces
1 parent 00d7c6b commit 95d253d

33 files changed

+224
-0
lines changed

src/plots/cartesian/align_period.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/**
2+
* Copyright 2012-2020, Plotly, Inc.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the MIT license found in the
6+
* LICENSE file in the root directory of this source tree.
7+
*/
8+
9+
'use strict';
10+
11+
module.exports = function alignPeriod(trace, axLetter, vals) {
12+
var periodAlignment = trace[axLetter + 'periodalignment'];
13+
if(!periodAlignment || periodAlignment === 'start') return vals;
14+
15+
var delta = (periodAlignment === 'end' ? 1 : 0.5) * trace[axLetter + 'period'];
16+
for(var i = 0; i < vals.length; i++) {
17+
vals[i] += delta;
18+
}
19+
return vals;
20+
};

src/plots/cartesian/axes.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1266,6 +1266,10 @@ function formatDate(ax, out, hover, extraPrecision) {
12661266
var tr = ax._tickround;
12671267
var fmt = (hover && ax.hoverformat) || axes.getTickFormat(ax);
12681268

1269+
if(ax.ticklabelmode === 'period') {
1270+
extraPrecision = false;
1271+
}
1272+
12691273
if(extraPrecision) {
12701274
// second or sub-second precision: extra always shows max digits.
12711275
// for other fields, extra precision just adds one field.

src/plots/cartesian/set_convert.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ var ONEMIN = numConstants.ONEMIN;
3030
var ONESEC = numConstants.ONESEC;
3131

3232
var axisIds = require('./axis_ids');
33+
var alignPeriod = require('./align_period');
3334

3435
var constants = require('./constants');
3536
var HOUR_PATTERN = constants.HOUR_PATTERN;
@@ -847,6 +848,10 @@ module.exports = function setConvert(ax, fullLayout) {
847848
}
848849
}
849850

851+
if(axType === 'date') {
852+
arrayOut = alignPeriod(trace, axLetter, arrayOut);
853+
}
854+
850855
return arrayOut;
851856
};
852857

src/traces/bar/attributes.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@ module.exports = {
5959
y0: scatterAttrs.y0,
6060
dy: scatterAttrs.dy,
6161

62+
xperiod: scatterAttrs.xperiod,
63+
yperiod: scatterAttrs.yperiod,
64+
xperiodalignment: scatterAttrs.xperiodalignment,
65+
yperiodalignment: scatterAttrs.yperiodalignment,
66+
6267
text: scatterAttrs.text,
6368
texttemplate: texttemplateAttrs({editType: 'plot'}, {
6469
keys: constants.eventDataKeys

src/traces/bar/defaults.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ var Color = require('../../components/color');
1313
var Registry = require('../../registry');
1414

1515
var handleXYDefaults = require('../scatter/xy_defaults');
16+
var handlePeriodDefaults = require('../scatter/period_defaults');
1617
var handleStyleDefaults = require('./style_defaults');
1718
var getAxisGroup = require('../../plots/cartesian/axis_ids').getAxisGroup;
1819
var attributes = require('./attributes');
@@ -30,6 +31,8 @@ function supplyDefaults(traceIn, traceOut, defaultColor, layout) {
3031
return;
3132
}
3233

34+
handlePeriodDefaults(traceIn, traceOut, layout, coerce);
35+
3336
coerce('orientation', (traceOut.x && !traceOut.y) ? 'h' : 'v');
3437
coerce('base');
3538
coerce('offset');

src/traces/box/attributes.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,11 @@ module.exports = {
7676
].join(' ')
7777
},
7878

79+
xperiod: scatterAttrs.xperiod,
80+
yperiod: scatterAttrs.yperiod,
81+
xperiodalignment: scatterAttrs.xperiodalignment,
82+
yperiodalignment: scatterAttrs.yperiodalignment,
83+
7984
name: {
8085
valType: 'string',
8186
role: 'info',

src/traces/box/defaults.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
var Lib = require('../../lib');
1212
var Registry = require('../../registry');
1313
var Color = require('../../components/color');
14+
var handlePeriodDefaults = require('../scatter/period_defaults');
1415
var handleGroupingDefaults = require('../bar/defaults').handleGroupingDefaults;
1516
var autoType = require('../../plots/cartesian/axis_autotype');
1617
var attributes = require('./attributes');
@@ -23,6 +24,8 @@ function supplyDefaults(traceIn, traceOut, defaultColor, layout) {
2324
handleSampleDefaults(traceIn, traceOut, coerce, layout);
2425
if(traceOut.visible === false) return;
2526

27+
handlePeriodDefaults(traceIn, traceOut, layout, coerce);
28+
2629
var hasPreCompStats = traceOut._hasPreCompStats;
2730

2831
if(hasPreCompStats) {

src/traces/candlestick/attributes.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ function directionAttrs(lineColorDefault) {
2727
}
2828

2929
module.exports = {
30+
xperiod: OHLCattrs.xperiod,
31+
xperiodalignment: OHLCattrs.xperiodalignment,
32+
3033
x: OHLCattrs.x,
3134
open: OHLCattrs.open,
3235
high: OHLCattrs.high,

src/traces/candlestick/defaults.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
var Lib = require('../../lib');
1313
var Color = require('../../components/color');
1414
var handleOHLC = require('../ohlc/ohlc_defaults');
15+
var handlePeriodDefaults = require('../scatter/period_defaults');
1516
var attributes = require('./attributes');
1617

1718
module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout) {
@@ -25,6 +26,8 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
2526
return;
2627
}
2728

29+
handlePeriodDefaults(traceIn, traceOut, layout, coerce, {x: true});
30+
2831
coerce('line.width');
2932

3033
handleDirection(traceIn, traceOut, coerce, 'increasing');

src/traces/contour/attributes.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ module.exports = extendFlat({
3131
y: heatmapAttrs.y,
3232
y0: heatmapAttrs.y0,
3333
dy: heatmapAttrs.dy,
34+
35+
xperiod: heatmapAttrs.xperiod,
36+
yperiod: heatmapAttrs.yperiod,
37+
xperiodalignment: heatmapAttrs.xperiodalignment,
38+
yperiodalignment: heatmapAttrs.yperiodalignment,
39+
3440
text: heatmapAttrs.text,
3541
hovertext: heatmapAttrs.hovertext,
3642
transpose: heatmapAttrs.transpose,

0 commit comments

Comments
 (0)