diff --git a/src/traces/sunburst/attributes.js b/src/traces/sunburst/attributes.js index 02735365099..d8d3949a4f7 100644 --- a/src/traces/sunburst/attributes.js +++ b/src/traces/sunburst/attributes.js @@ -203,6 +203,16 @@ module.exports = { 'this option won\'t have any effect and `insidetextfont` would be used.' ].join(' ') }), + rotation: { + valType: 'angle', + role: 'style', + dflt: 0, + editType: 'plot', + description: [ + 'Rotates the whole diagram counterclockwise by some angle.', + 'By default the first slice starts at 3 o\'clock.' + ].join(' ') + }, sort: pieAttrs.sort, domain: domainAttrs({name: 'sunburst', trace: true, editType: 'calc'}) diff --git a/src/traces/sunburst/defaults.js b/src/traces/sunburst/defaults.js index 201867ef3d2..b02e3ac81e7 100644 --- a/src/traces/sunburst/defaults.js +++ b/src/traces/sunburst/defaults.js @@ -75,6 +75,8 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout coerce('sort'); + coerce('rotation'); + handleDomainDefaults(traceOut, layout, coerce); // do not support transforms for now diff --git a/src/traces/sunburst/plot.js b/src/traces/sunburst/plot.js index ef3616e4b88..dc69381c685 100644 --- a/src/traces/sunburst/plot.js +++ b/src/traces/sunburst/plot.js @@ -150,6 +150,14 @@ function plotOne(gd, cd, element, transitionOpts) { // filter out slices that won't show up on graph sliceData = sliceData.filter(function(pt) { return pt.y1 <= cutoff; }); + if(trace.rotation && trace.rotation !== 'auto') { + var extraAngle = trace.rotation * Math.PI / 180; + sliceData.forEach(function(pt) { + pt.x0 += extraAngle; + pt.x1 += extraAngle; + }); + } + // partition span ('y') to sector radial px value var maxY = Math.min(maxHeight, maxDepth); var y2rpx = function(y) { return (y - yOffset) / maxY * rMax; };