| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- var echarts = require("../../echarts");
- var List = require("../../data/List");
- var zrUtil = require("zrender/lib/core/util");
- var modelUtil = require("../../util/model");
- var _number = require("../../util/number");
- var getPercentWithPrecision = _number.getPercentWithPrecision;
- var completeDimensions = require("../../data/helper/completeDimensions");
- var dataSelectableMixin = require("../../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);
- var _default = PieSeries;
- module.exports = _default;
|