提交 6a50ca47 编写于 作者: O Ovilia

feat(sunburst): improve sorting

上级 fc13cbf8
......@@ -295,7 +295,8 @@ function getNodeColor(node, seriesModel, ecModel) {
var color = node.getModel('itemStyle.normal').get('color');
if (!color) {
// First-generation color
color = ecModel.option.color[getRootId(node)];
var length = ecModel.option.color.length;
color = ecModel.option.color[getRootId(node) % length];
}
return color;
......
......@@ -76,6 +76,8 @@ export default SeriesModel.extend({
// 'zoomToNode', 'link', or false
nodeClick: 'zoomToNode',
renderLabelForZeroData: false,
label: {
normal: {
// could be: 'radial', 'tangential', or 'none'
......@@ -114,9 +116,18 @@ export default SeriesModel.extend({
levels: [],
// null for not sorting,
// 'desc' and 'asc' for descend and ascendant order
sortOrder: 'desc'
/**
* Sort order.
*
* Valid values: 'desc', 'asc', null, or callback function.
* 'desc' and 'asc' for descend and ascendant order;
* null for not sorting;
* example of callback function:
* function(nodeA, nodeB) {
* return nodeA.getValue() - nodeB.getValue();
* }
*/
sort: 'desc'
},
getViewRoot: function () {
......
......@@ -31,6 +31,8 @@ var SunburstView = ChartView.extend({
var group = this.group;
var renderLabelForZeroData = seriesModel.get('renderLabelForZeroData');
dualTravel(
newRoot ? [newRoot] : [],
oldRoot ? [oldRoot] : []
......@@ -71,6 +73,11 @@ var SunburstView = ChartView.extend({
}
function doRenderNode(newNode, oldNode) {
if (!renderLabelForZeroData && newNode && !newNode.getValue()) {
// Not render data with value 0
newNode = null;
}
if (newNode !== virtualRoot) {
if (oldNode && oldNode.piece) {
if (newNode) {
......
......@@ -25,8 +25,6 @@ export default function (seriesType, ecModel, api, payload) {
var r0 = parsePercent(radius[0], size / 2);
var r = parsePercent(radius[1], size / 2);
// var data = seriesModel.getData();
var startAngle = -seriesModel.get('startAngle') * RADIAN;
var minAngle = seriesModel.get('minAngle') * RADIAN;
......@@ -34,9 +32,9 @@ export default function (seriesType, ecModel, api, payload) {
var treeRoot = seriesModel.getViewRoot();
var rootDepth = treeRoot.depth;
var sortOrder = seriesModel.get('sortOrder');
if (sortOrder != null) {
initChildren(treeRoot, sortOrder === 'asc');
var sort = seriesModel.get('sort');
if (sort != null) {
initChildren(treeRoot, sort);
}
var validDataCount = 0;
......@@ -49,7 +47,7 @@ export default function (seriesType, ecModel, api, payload) {
var unitRadian = Math.PI / (sum || validDataCount) * 2;
var renderRollupNode = treeRoot !== virtualRoot;
var levels = treeRoot.height + (renderRollupNode ? 1 : 0);
var levels = treeRoot.height - (renderRollupNode ? 0 : 1);
var rPerLevel = (r - r0) / (levels || 1);
var clockwise = seriesModel.get('clockwise');
......@@ -90,7 +88,7 @@ export default function (seriesType, ecModel, api, payload) {
endAngle = startAngle + dir * angle;
var depth = node.depth - rootDepth + (renderRollupNode ? 1 : 0);
var depth = node.depth - rootDepth - (renderRollupNode ? 0 : 1);
var rStart = r0 + rPerLevel * depth;
var rEnd = r0 + rPerLevel * (depth + 1);
......@@ -170,14 +168,21 @@ function initChildren(node, isAsc) {
/**
* Sort children nodes
*
* @param {TreeNode[]} children children of node to be sorted
* @param {boolean} isAsc if is in ascendant order
* @param {TreeNode[]} children children of node to be sorted
* @param {string | function | null} sort sort method
* See SunburstSeries.js for details.
*/
function sort(children, isAsc) {
return children.sort(function (a, b) {
var diff = (a.getValue() - b.getValue()) * (isAsc ? -1 : 1);
return diff === 0
? (a.dataIndex - b.dataIndex) * (isAsc ? 1 : -1)
: diff;
});
function sort(children, sortOrder) {
if (typeof sortOrder === 'function') {
return children.sort(sortOrder);
}
else {
var isAsc = sortOrder === 'asc';
return children.sort(function (a, b) {
var diff = (a.getValue() - b.getValue()) * (isAsc ? 1 : -1);
return diff === 0
? (a.dataIndex - b.dataIndex) * (isAsc ? -1 : 1)
: diff;
});
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册