whiskerBoxCommon.js
4.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
define(function(require) {
'use strict';
var List = require('../../data/List');
var completeDimensions = require('../../data/helper/completeDimensions');
var WhiskerBoxDraw = require('../helper/WhiskerBoxDraw');
var zrUtil = require('zrender/core/util');
function getItemValue(item) {
return item.value == null ? item : item.value;
}
var seriesModelMixin = {
/**
* @private
* @type {string}
*/
_baseAxisDim: null,
/**
* @override
*/
getInitialData: function (option, ecModel) {
// When both types of xAxis and yAxis are 'value', layout is
// needed to be specified by user. Otherwise, layout can be
// judged by which axis is category.
var categories;
var xAxisModel = ecModel.getComponent('xAxis', this.get('xAxisIndex'));
var yAxisModel = ecModel.getComponent('yAxis', this.get('yAxisIndex'));
var xAxisType = xAxisModel.get('type');
var yAxisType = yAxisModel.get('type');
var addOrdinal;
// FIXME
// 考虑时间轴
if (xAxisType === 'category') {
option.layout = 'horizontal';
categories = xAxisModel.getCategories();
addOrdinal = true;
}
else if (yAxisType === 'category') {
option.layout = 'vertical';
categories = yAxisModel.getCategories();
addOrdinal = true;
}
else {
option.layout = option.layout || 'horizontal';
}
this._baseAxisDim = option.layout === 'horizontal' ? 'x' : 'y';
var data = option.data;
var dimensions = this.dimensions = ['base'].concat(this.valueDimensions);
completeDimensions(dimensions, data);
var list = new List(dimensions, this);
list.initData(data, categories ? categories.slice() : null, function (dataItem, dimName, idx, dimIdx) {
var value = getItemValue(dataItem);
return addOrdinal ? (dimName === 'base' ? idx : value[dimIdx - 1]) : value[dimIdx];
});
return list;
},
/**
* Used by Gird.
* @param {string} axisDim 'x' or 'y'
* @return {Array.<string>} dimensions on the axis.
*/
coordDimToDataDim: function (axisDim) {
var dims = this.valueDimensions.slice();
var baseDim = ['base'];
var map = {
horizontal: {x: baseDim, y: dims},
vertical: {x: dims, y: baseDim}
};
return map[this.get('layout')][axisDim];
},
/**
* @override
* @param {string|number} dataDim
* @return {string} coord dimension
*/
dataDimToCoordDim: function (dataDim) {
var dim;
zrUtil.each(['x', 'y'], function (coordDim, index) {
var dataDims = this.coordDimToDataDim(coordDim);
if (zrUtil.indexOf(dataDims, dataDim) >= 0) {
dim = coordDim;
}
}, this);
return dim;
},
/**
* If horizontal, base axis is x, otherwise y.
* @override
*/
getBaseAxis: function () {
var dim = this._baseAxisDim;
return this.ecModel.getComponent(dim + 'Axis', this.get(dim + 'AxisIndex')).axis;
}
};
var viewMixin = {
init: function () {
/**
* Old data.
* @private
* @type {module:echarts/chart/helper/WhiskerBoxDraw}
*/
var whiskerBoxDraw = this._whiskerBoxDraw = new WhiskerBoxDraw(
this.getStyleUpdater()
);
this.group.add(whiskerBoxDraw.group);
},
render: function (seriesModel, ecModel, api) {
this._whiskerBoxDraw.updateData(seriesModel.getData());
},
remove: function (ecModel) {
this._whiskerBoxDraw.remove();
}
};
return {
seriesModelMixin: seriesModelMixin,
viewMixin: viewMixin
};
});