| import * as echarts from '../../echarts'; |
| import List from '../../data/List'; |
| import * as zrUtil from 'zrender/src/core/util'; |
| import * as modelUtil from '../../util/model'; |
| import { getPercentWithPrecision } from '../../util/number'; |
| import completeDimensions from '../../data/helper/completeDimensions'; |
| import dataSelectableMixin from '../../component/helper/selectableMixin'; |
| var PieSeries = echarts.extendSeriesModel({ |
| type: 'series.pie', |
| // Overwrite |
| init: function (option) { |
| PieSeries.superApply(this, 'init', arguments); // Enable legend selection for each data item |
| // Use a function instead of direct access because data reference may changed |
| |
| this.legendDataProvider = function () { |
| return this.getRawData(); |
| }; |
| |
| this.updateSelectedMap(option.data); |
| |
| this._defaultLabelLine(option); |
| }, |
| // Overwrite |
| mergeOption: function (newOption) { |
| PieSeries.superCall(this, 'mergeOption', newOption); |
| this.updateSelectedMap(this.option.data); |
| }, |
| getInitialData: function (option, ecModel) { |
| var dimensions = completeDimensions(['value'], option.data); |
| var list = new List(dimensions, this); |
| list.initData(option.data); |
| return list; |
| }, |
| // Overwrite |
| getDataParams: function (dataIndex) { |
| var data = this.getData(); |
| var params = PieSeries.superCall(this, 'getDataParams', dataIndex); // FIXME toFixed? |
| |
| var valueList = []; |
| data.each('value', function (value) { |
| valueList.push(value); |
| }); |
| params.percent = getPercentWithPrecision(valueList, dataIndex, data.hostModel.get('percentPrecision')); |
| params.$vars.push('percent'); |
| return params; |
| }, |
| _defaultLabelLine: function (option) { |
| // Extend labelLine emphasis |
| modelUtil.defaultEmphasis(option.labelLine, ['show']); |
| var labelLineNormalOpt = option.labelLine.normal; |
| var labelLineEmphasisOpt = option.labelLine.emphasis; // Not show label line if `label.normal.show = false` |
| |
| labelLineNormalOpt.show = labelLineNormalOpt.show && option.label.normal.show; |
| labelLineEmphasisOpt.show = labelLineEmphasisOpt.show && option.label.emphasis.show; |
| }, |
| defaultOption: { |
| zlevel: 0, |
| z: 2, |
| legendHoverLink: true, |
| hoverAnimation: true, |
| // 默认全局居中 |
| center: ['50%', '50%'], |
| radius: [0, '75%'], |
| // 默认顺时针 |
| clockwise: true, |
| startAngle: 90, |
| // 最小角度改为0 |
| minAngle: 0, |
| // 选中时扇区偏移量 |
| selectedOffset: 10, |
| // 高亮扇区偏移量 |
| hoverOffset: 10, |
| // If use strategy to avoid label overlapping |
| avoidLabelOverlap: true, |
| // 选择模式,默认关闭,可选single,multiple |
| // selectedMode: false, |
| // 南丁格尔玫瑰图模式,'radius'(半径) | 'area'(面积) |
| // roseType: null, |
| percentPrecision: 2, |
| // If still show when all data zero. |
| stillShowZeroSum: true, |
| // cursor: null, |
| label: { |
| normal: { |
| // If rotate around circle |
| rotate: false, |
| show: true, |
| // 'outer', 'inside', 'center' |
| position: 'outer' // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调 |
| // 默认使用全局文本样式,详见TEXTSTYLE |
| // distance: 当position为inner时有效,为label位置到圆心的距离与圆半径(环状图为内外半径和)的比例系数 |
| |
| }, |
| emphasis: {} |
| }, |
| // Enabled when label.normal.position is 'outer' |
| labelLine: { |
| normal: { |
| show: true, |
| // 引导线两段中的第一段长度 |
| length: 15, |
| // 引导线两段中的第二段长度 |
| length2: 15, |
| smooth: false, |
| lineStyle: { |
| // color: 各异, |
| width: 1, |
| type: 'solid' |
| } |
| } |
| }, |
| itemStyle: { |
| normal: { |
| borderWidth: 1 |
| }, |
| emphasis: {} |
| }, |
| // Animation type canbe expansion, scale |
| animationType: 'expansion', |
| animationEasing: 'cubicOut', |
| data: [] |
| } |
| }); |
| zrUtil.mixin(PieSeries, dataSelectableMixin); |
| export default PieSeries; |