echarts 3.5.4 → 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -18
- package/dist/echarts.common.js +10072 -9330
- package/dist/echarts.common.min.js +13 -13
- package/dist/echarts.js +13084 -11412
- package/dist/echarts.min.js +22 -21
- package/dist/echarts.simple.js +9454 -8889
- package/dist/echarts.simple.min.js +9 -10
- package/index.js +1 -0
- package/lib/chart/bar/BarView.js +141 -49
- package/lib/chart/bar/BaseBarSeries.js +2 -6
- package/lib/chart/bar.js +1 -0
- package/lib/chart/boxplot/BoxplotSeries.js +1 -1
- package/lib/chart/boxplot/boxplotLayout.js +23 -7
- package/lib/chart/candlestick/CandlestickSeries.js +1 -21
- package/lib/chart/candlestick/candlestickLayout.js +23 -7
- package/lib/chart/custom.js +442 -0
- package/lib/chart/graph/categoryVisual.js +3 -2
- package/lib/chart/heatmap/HeatmapView.js +75 -73
- package/lib/chart/helper/Symbol.js +8 -31
- package/lib/chart/helper/createListFromArray.js +15 -10
- package/lib/chart/helper/labelHelper.js +48 -0
- package/lib/chart/helper/whiskerBoxCommon.js +25 -44
- package/lib/chart/map/mapDataStatistic.js +9 -8
- package/lib/chart/pie/pieLayout.js +25 -17
- package/lib/chart/radar/RadarSeries.js +1 -1
- package/lib/chart/scatter/ScatterSeries.js +2 -3
- package/lib/chart/themeRiver/ThemeRiverSeries.js +6 -5
- package/lib/chart/themeRiver/themeRiverVisual.js +1 -1
- package/lib/chart/treemap/TreemapSeries.js +3 -3
- package/lib/component/axisPointer/BaseAxisPointer.js +7 -6
- package/lib/component/axisPointer/axisTrigger.js +62 -51
- package/lib/component/axisPointer.js +1 -2
- package/lib/component/calendar/CalendarView.js +5 -5
- package/lib/component/dataZoom/AxisProxy.js +76 -13
- package/lib/component/dataZoom/DataZoomModel.js +21 -5
- package/lib/component/dataZoom/InsideZoomModel.js +4 -1
- package/lib/component/dataZoom/InsideZoomView.js +16 -26
- package/lib/component/dataZoom/SliderZoomView.js +63 -26
- package/lib/component/dataZoom/roams.js +8 -3
- package/lib/component/graphic.js +13 -12
- package/lib/component/helper/BrushTargetManager.js +5 -5
- package/lib/component/helper/MapDraw.js +3 -3
- package/lib/component/helper/RoamController.js +43 -20
- package/lib/component/helper/brushHelper.js +2 -13
- package/lib/component/helper/selectableMixin.js +7 -7
- package/lib/component/helper/sliderMove.js +65 -36
- package/lib/component/legend/LegendView.js +6 -6
- package/lib/component/legend/legendAction.js +1 -1
- package/lib/component/marker/MarkAreaView.js +3 -6
- package/lib/component/marker/MarkLineView.js +3 -5
- package/lib/component/marker/MarkPointView.js +3 -5
- package/lib/component/marker/MarkerView.js +10 -12
- package/lib/component/polar.js +5 -0
- package/lib/component/timeline/SliderTimelineView.js +1 -1
- package/lib/component/toolbox/feature/DataZoom.js +14 -1
- package/lib/component/tooltip/TooltipView.js +3 -3
- package/lib/component/visualMap/ContinuousView.js +6 -4
- package/lib/coord/Axis.js +34 -2
- package/lib/coord/axisDefault.js +2 -1
- package/lib/coord/axisHelper.js +6 -25
- package/lib/coord/axisModelCommonMixin.js +1 -1
- package/lib/coord/calendar/Calendar.js +14 -17
- package/lib/coord/calendar/prepareCustom.js +31 -0
- package/lib/coord/cartesian/Axis2D.js +0 -12
- package/lib/coord/cartesian/Cartesian2D.js +1 -0
- package/lib/coord/cartesian/Grid.js +5 -2
- package/lib/coord/cartesian/prepareCustom.js +36 -0
- package/lib/coord/geo/Geo.js +9 -14
- package/lib/coord/geo/GeoModel.js +5 -5
- package/lib/coord/geo/geoCreator.js +3 -3
- package/lib/coord/geo/prepareCustom.js +36 -0
- package/lib/coord/parallel/Parallel.js +12 -11
- package/lib/coord/polar/Polar.js +2 -1
- package/lib/coord/polar/prepareCustom.js +53 -0
- package/lib/coord/single/Single.js +9 -8
- package/lib/coord/single/SingleAxis.js +0 -27
- package/lib/coord/single/prepareCustom.js +33 -0
- package/lib/data/DataDiffer.js +2 -1
- package/lib/data/Graph.js +11 -7
- package/lib/data/List.js +58 -19
- package/lib/data/helper/completeDimensions.js +184 -23
- package/lib/echarts.js +38 -33
- package/lib/helper.js +1 -8
- package/lib/layout/barGrid.js +87 -18
- package/lib/layout/barPolar.js +286 -0
- package/lib/layout/points.js +22 -16
- package/lib/model/Global.js +34 -31
- package/lib/model/Series.js +41 -29
- package/lib/model/mixin/colorPalette.js +2 -1
- package/lib/model/mixin/textStyle.js +7 -13
- package/lib/scale/Interval.js +21 -14
- package/lib/scale/Log.js +5 -7
- package/lib/scale/Time.js +13 -7
- package/lib/scale/helper.js +5 -1
- package/lib/util/format.js +12 -0
- package/lib/util/graphic.js +53 -1
- package/lib/util/model.js +63 -7
- package/map/js/world.js +1 -1
- package/map/json/world.json +1 -1
- package/package.json +3 -3
- package/src/chart/bar/BarView.js +141 -49
- package/src/chart/bar/BaseBarSeries.js +2 -6
- package/src/chart/bar.js +1 -0
- package/src/chart/boxplot/BoxplotSeries.js +1 -1
- package/src/chart/boxplot/boxplotLayout.js +23 -7
- package/src/chart/candlestick/CandlestickSeries.js +1 -21
- package/src/chart/candlestick/candlestickLayout.js +23 -7
- package/src/chart/custom.js +442 -0
- package/src/chart/graph/categoryVisual.js +3 -2
- package/src/chart/heatmap/HeatmapView.js +75 -73
- package/src/chart/helper/Symbol.js +8 -31
- package/src/chart/helper/createListFromArray.js +15 -10
- package/src/chart/helper/labelHelper.js +49 -0
- package/src/chart/helper/whiskerBoxCommon.js +25 -44
- package/src/chart/map/mapDataStatistic.js +9 -8
- package/src/chart/pie/pieLayout.js +25 -17
- package/src/chart/radar/RadarSeries.js +1 -1
- package/src/chart/scatter/ScatterSeries.js +2 -3
- package/src/chart/themeRiver/ThemeRiverSeries.js +6 -5
- package/src/chart/themeRiver/themeRiverVisual.js +1 -1
- package/src/chart/treemap/TreemapSeries.js +3 -3
- package/src/component/axisPointer/BaseAxisPointer.js +7 -6
- package/src/component/axisPointer/axisTrigger.js +62 -51
- package/src/component/axisPointer.js +1 -2
- package/src/component/calendar/CalendarView.js +5 -5
- package/src/component/dataZoom/AxisProxy.js +76 -13
- package/src/component/dataZoom/DataZoomModel.js +21 -5
- package/src/component/dataZoom/InsideZoomModel.js +4 -1
- package/src/component/dataZoom/InsideZoomView.js +16 -26
- package/src/component/dataZoom/SliderZoomView.js +63 -26
- package/src/component/dataZoom/roams.js +8 -3
- package/src/component/graphic.js +13 -12
- package/src/component/helper/BrushTargetManager.js +5 -5
- package/src/component/helper/MapDraw.js +3 -3
- package/src/component/helper/RoamController.js +43 -20
- package/src/component/helper/brushHelper.js +2 -13
- package/src/component/helper/selectableMixin.js +7 -7
- package/src/component/helper/sliderMove.js +65 -36
- package/src/component/legend/LegendView.js +6 -6
- package/src/component/legend/legendAction.js +1 -1
- package/src/component/marker/MarkAreaView.js +3 -6
- package/src/component/marker/MarkLineView.js +3 -5
- package/src/component/marker/MarkPointView.js +3 -5
- package/src/component/marker/MarkerView.js +10 -12
- package/src/component/polar.js +5 -0
- package/src/component/timeline/SliderTimelineView.js +1 -1
- package/src/component/toolbox/feature/DataZoom.js +14 -1
- package/src/component/tooltip/TooltipView.js +3 -3
- package/src/component/visualMap/ContinuousView.js +6 -4
- package/src/coord/Axis.js +34 -2
- package/src/coord/axisDefault.js +2 -1
- package/src/coord/axisHelper.js +6 -25
- package/src/coord/axisModelCommonMixin.js +1 -1
- package/src/coord/calendar/Calendar.js +14 -17
- package/src/coord/calendar/prepareCustom.js +32 -0
- package/src/coord/cartesian/Axis2D.js +0 -12
- package/src/coord/cartesian/Cartesian2D.js +1 -0
- package/src/coord/cartesian/Grid.js +5 -2
- package/src/coord/cartesian/prepareCustom.js +37 -0
- package/src/coord/geo/Geo.js +9 -14
- package/src/coord/geo/GeoModel.js +5 -5
- package/src/coord/geo/geoCreator.js +3 -3
- package/src/coord/geo/prepareCustom.js +37 -0
- package/src/coord/parallel/Parallel.js +12 -11
- package/src/coord/polar/Polar.js +2 -1
- package/src/coord/polar/prepareCustom.js +54 -0
- package/src/coord/single/Single.js +9 -8
- package/src/coord/single/SingleAxis.js +0 -27
- package/src/coord/single/prepareCustom.js +34 -0
- package/src/data/DataDiffer.js +2 -1
- package/src/data/Graph.js +11 -7
- package/src/data/List.js +58 -19
- package/src/data/helper/completeDimensions.js +184 -23
- package/src/echarts.js +38 -33
- package/src/helper.js +1 -8
- package/src/layout/barGrid.js +87 -18
- package/src/layout/barPolar.js +287 -0
- package/src/layout/points.js +22 -16
- package/src/model/Global.js +34 -31
- package/src/model/Series.js +41 -29
- package/src/model/mixin/colorPalette.js +2 -1
- package/src/model/mixin/textStyle.js +7 -13
- package/src/scale/Interval.js +21 -14
- package/src/scale/Log.js +5 -7
- package/src/scale/Time.js +13 -7
- package/src/scale/helper.js +5 -1
- package/src/util/format.js +12 -0
- package/src/util/graphic.js +53 -1
- package/src/util/model.js +63 -7
- package/src/coord/cartesian/axisLabelInterval.js +0 -26
package/src/layout/barGrid.js
CHANGED
|
@@ -6,29 +6,96 @@ define(function(require) {
|
|
|
6
6
|
var numberUtil = require('../util/number');
|
|
7
7
|
var parsePercent = numberUtil.parsePercent;
|
|
8
8
|
|
|
9
|
+
var STACK_PREFIX = '__ec_stack_';
|
|
10
|
+
|
|
9
11
|
function getSeriesStackId(seriesModel) {
|
|
10
|
-
return seriesModel.get('stack') ||
|
|
12
|
+
return seriesModel.get('stack') || STACK_PREFIX + seriesModel.seriesIndex;
|
|
11
13
|
}
|
|
12
14
|
|
|
13
15
|
function getAxisKey(axis) {
|
|
14
16
|
return axis.dim + axis.index;
|
|
15
17
|
}
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
/**
|
|
20
|
+
* @param {Object} opt
|
|
21
|
+
* @param {module:echarts/coord/Axis} opt.axis Only support category axis currently.
|
|
22
|
+
* @param {number} opt.count Positive interger.
|
|
23
|
+
* @param {number} [opt.barWidth]
|
|
24
|
+
* @param {number} [opt.barMaxWidth]
|
|
25
|
+
* @param {number} [opt.barGap]
|
|
26
|
+
* @param {number} [opt.barCategoryGap]
|
|
27
|
+
* @return {Object} {width, offset, offsetCenter} If axis.type is not 'category', return undefined.
|
|
28
|
+
*/
|
|
29
|
+
function getLayoutOnAxis(opt, api) {
|
|
30
|
+
var params = [];
|
|
31
|
+
var baseAxis = opt.axis;
|
|
32
|
+
var axisKey = 'axis0';
|
|
33
|
+
|
|
34
|
+
if (baseAxis.type !== 'category') {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
var bandWidth = baseAxis.getBandWidth();
|
|
38
|
+
|
|
39
|
+
for (var i = 0; i < opt.count || 0; i++) {
|
|
40
|
+
params.push(zrUtil.defaults({
|
|
41
|
+
bandWidth: bandWidth,
|
|
42
|
+
axisKey: axisKey,
|
|
43
|
+
stackId: STACK_PREFIX + i
|
|
44
|
+
}, opt));
|
|
45
|
+
}
|
|
46
|
+
var widthAndOffsets = doCalBarWidthAndOffset(params, api);
|
|
47
|
+
|
|
48
|
+
var result = [];
|
|
49
|
+
for (var i = 0; i < opt.count; i++) {
|
|
50
|
+
var item = widthAndOffsets[axisKey][STACK_PREFIX + i];
|
|
51
|
+
item.offsetCenter = item.offset + item.width / 2;
|
|
52
|
+
result.push(item);
|
|
53
|
+
}
|
|
20
54
|
|
|
21
|
-
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function calBarWidthAndOffset(barSeries, api) {
|
|
59
|
+
var seriesInfoList = zrUtil.map(barSeries, function (seriesModel) {
|
|
22
60
|
var data = seriesModel.getData();
|
|
23
61
|
var cartesian = seriesModel.coordinateSystem;
|
|
24
|
-
|
|
25
62
|
var baseAxis = cartesian.getBaseAxis();
|
|
26
63
|
var axisExtent = baseAxis.getExtent();
|
|
27
64
|
var bandWidth = baseAxis.type === 'category'
|
|
28
65
|
? baseAxis.getBandWidth()
|
|
29
66
|
: (Math.abs(axisExtent[1] - axisExtent[0]) / data.count());
|
|
30
67
|
|
|
31
|
-
var
|
|
68
|
+
var barWidth = parsePercent(
|
|
69
|
+
seriesModel.get('barWidth'), bandWidth
|
|
70
|
+
);
|
|
71
|
+
var barMaxWidth = parsePercent(
|
|
72
|
+
seriesModel.get('barMaxWidth'), bandWidth
|
|
73
|
+
);
|
|
74
|
+
var barGap = seriesModel.get('barGap');
|
|
75
|
+
var barCategoryGap = seriesModel.get('barCategoryGap');
|
|
76
|
+
|
|
77
|
+
return {
|
|
78
|
+
bandWidth: bandWidth,
|
|
79
|
+
barWidth: barWidth,
|
|
80
|
+
barMaxWidth: barMaxWidth,
|
|
81
|
+
barGap: barGap,
|
|
82
|
+
barCategoryGap: barCategoryGap,
|
|
83
|
+
axisKey: getAxisKey(baseAxis),
|
|
84
|
+
stackId: getSeriesStackId(seriesModel)
|
|
85
|
+
};
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
return doCalBarWidthAndOffset(seriesInfoList, api);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function doCalBarWidthAndOffset(seriesInfoList, api) {
|
|
92
|
+
// Columns info on each category axis. Key is cartesian name
|
|
93
|
+
var columnsMap = {};
|
|
94
|
+
|
|
95
|
+
zrUtil.each(seriesInfoList, function (seriesInfo, idx) {
|
|
96
|
+
var axisKey = seriesInfo.axisKey;
|
|
97
|
+
var bandWidth = seriesInfo.bandWidth;
|
|
98
|
+
var columnsOnAxis = columnsMap[axisKey] || {
|
|
32
99
|
bandWidth: bandWidth,
|
|
33
100
|
remainedWidth: bandWidth,
|
|
34
101
|
autoWidthCount: 0,
|
|
@@ -37,9 +104,9 @@ define(function(require) {
|
|
|
37
104
|
stacks: {}
|
|
38
105
|
};
|
|
39
106
|
var stacks = columnsOnAxis.stacks;
|
|
40
|
-
columnsMap[
|
|
107
|
+
columnsMap[axisKey] = columnsOnAxis;
|
|
41
108
|
|
|
42
|
-
var stackId =
|
|
109
|
+
var stackId = seriesInfo.stackId;
|
|
43
110
|
|
|
44
111
|
if (!stacks[stackId]) {
|
|
45
112
|
columnsOnAxis.autoWidthCount++;
|
|
@@ -49,29 +116,24 @@ define(function(require) {
|
|
|
49
116
|
maxWidth: 0
|
|
50
117
|
};
|
|
51
118
|
|
|
52
|
-
var barWidth = parsePercent(
|
|
53
|
-
seriesModel.get('barWidth'), bandWidth
|
|
54
|
-
);
|
|
55
|
-
var barMaxWidth = parsePercent(
|
|
56
|
-
seriesModel.get('barMaxWidth'), bandWidth
|
|
57
|
-
);
|
|
58
|
-
var barGap = seriesModel.get('barGap');
|
|
59
|
-
var barCategoryGap = seriesModel.get('barCategoryGap');
|
|
60
|
-
|
|
61
119
|
// Caution: In a single coordinate system, these barGrid attributes
|
|
62
120
|
// will be shared by series. Consider that they have default values,
|
|
63
121
|
// only the attributes set on the last series will work.
|
|
64
122
|
// Do not change this fact unless there will be a break change.
|
|
65
123
|
|
|
66
124
|
// TODO
|
|
125
|
+
var barWidth = seriesInfo.barWidth;
|
|
67
126
|
if (barWidth && !stacks[stackId].width) {
|
|
68
127
|
barWidth = Math.min(columnsOnAxis.remainedWidth, barWidth);
|
|
69
128
|
stacks[stackId].width = barWidth;
|
|
70
129
|
columnsOnAxis.remainedWidth -= barWidth;
|
|
71
130
|
}
|
|
72
131
|
|
|
132
|
+
var barMaxWidth = seriesInfo.barMaxWidth;
|
|
73
133
|
barMaxWidth && (stacks[stackId].maxWidth = barMaxWidth);
|
|
134
|
+
var barGap = seriesInfo.barGap;
|
|
74
135
|
(barGap != null) && (columnsOnAxis.gap = barGap);
|
|
136
|
+
var barCategoryGap = seriesInfo.barCategoryGap;
|
|
75
137
|
(barCategoryGap != null) && (columnsOnAxis.categoryGap = barCategoryGap);
|
|
76
138
|
});
|
|
77
139
|
|
|
@@ -161,6 +223,11 @@ define(function(require) {
|
|
|
161
223
|
|
|
162
224
|
ecModel.eachSeriesByType(seriesType, function (seriesModel) {
|
|
163
225
|
|
|
226
|
+
// Check series coordinate, do layout for cartesian2d only
|
|
227
|
+
if (seriesModel.coordinateSystem.type !== 'cartesian2d') {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
|
|
164
231
|
var data = seriesModel.getData();
|
|
165
232
|
var cartesian = seriesModel.coordinateSystem;
|
|
166
233
|
var baseAxis = cartesian.getBaseAxis();
|
|
@@ -247,5 +314,7 @@ define(function(require) {
|
|
|
247
314
|
}, this);
|
|
248
315
|
}
|
|
249
316
|
|
|
317
|
+
barLayoutGrid.getLayoutOnAxis = getLayoutOnAxis;
|
|
318
|
+
|
|
250
319
|
return barLayoutGrid;
|
|
251
320
|
});
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
define(function (require) {
|
|
2
|
+
|
|
3
|
+
'use strict';
|
|
4
|
+
|
|
5
|
+
var zrUtil = require('zrender/core/util');
|
|
6
|
+
var parsePercent = require('../util/number').parsePercent;
|
|
7
|
+
|
|
8
|
+
function getSeriesStackId(seriesModel) {
|
|
9
|
+
return seriesModel.get('stack')
|
|
10
|
+
|| '__ec_stack_' + seriesModel.seriesIndex;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function getAxisKey(axis) {
|
|
14
|
+
return axis.dim;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @param {string} seriesType
|
|
19
|
+
* @param {module:echarts/model/Global} ecModel
|
|
20
|
+
* @param {module:echarts/ExtensionAPI} api
|
|
21
|
+
*/
|
|
22
|
+
function barLayoutPolar(seriesType, ecModel, api) {
|
|
23
|
+
|
|
24
|
+
var width = api.getWidth();
|
|
25
|
+
var height = api.getHeight();
|
|
26
|
+
|
|
27
|
+
var lastStackCoords = {};
|
|
28
|
+
var lastStackCoordsOrigin = {};
|
|
29
|
+
|
|
30
|
+
var barWidthAndOffset = calRadialBar(
|
|
31
|
+
zrUtil.filter(
|
|
32
|
+
ecModel.getSeriesByType(seriesType),
|
|
33
|
+
function (seriesModel) {
|
|
34
|
+
return !ecModel.isSeriesFiltered(seriesModel)
|
|
35
|
+
&& seriesModel.coordinateSystem
|
|
36
|
+
&& seriesModel.coordinateSystem.type === 'polar';
|
|
37
|
+
}
|
|
38
|
+
)
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
ecModel.eachSeriesByType(seriesType, function (seriesModel) {
|
|
42
|
+
// Check series coordinate, do layout for polar only
|
|
43
|
+
if (seriesModel.coordinateSystem.type !== 'polar') {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
var data = seriesModel.getData();
|
|
48
|
+
var polar = seriesModel.coordinateSystem;
|
|
49
|
+
var angleAxis = polar.getAngleAxis();
|
|
50
|
+
var baseAxis = polar.getBaseAxis();
|
|
51
|
+
|
|
52
|
+
var stackId = getSeriesStackId(seriesModel);
|
|
53
|
+
var columnLayoutInfo
|
|
54
|
+
= barWidthAndOffset[getAxisKey(baseAxis)][stackId];
|
|
55
|
+
var columnOffset = columnLayoutInfo.offset;
|
|
56
|
+
var columnWidth = columnLayoutInfo.width;
|
|
57
|
+
var valueAxis = polar.getOtherAxis(baseAxis);
|
|
58
|
+
|
|
59
|
+
var center = seriesModel.get('center') || ['50%', '50%'];
|
|
60
|
+
var cx = parsePercent(center[0], width);
|
|
61
|
+
var cy = parsePercent(center[1], height);
|
|
62
|
+
|
|
63
|
+
var barMinHeight = seriesModel.get('barMinHeight') || 0;
|
|
64
|
+
var barMinAngle = seriesModel.get('barMinAngle') || 0;
|
|
65
|
+
|
|
66
|
+
var valueAxisStart = valueAxis.getExtent()[0];
|
|
67
|
+
var valueMax = valueAxis.model.get('max');
|
|
68
|
+
var valueMin = valueAxis.model.get('min');
|
|
69
|
+
|
|
70
|
+
var coords = polar.dataToPoints(data);
|
|
71
|
+
lastStackCoords[stackId] = lastStackCoords[stackId] || [];
|
|
72
|
+
lastStackCoordsOrigin[stackId] = lastStackCoordsOrigin[stackId] || []; // Fix #4243
|
|
73
|
+
|
|
74
|
+
data.each(valueAxis.dim, function (value, idx) {
|
|
75
|
+
if (isNaN(value)) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (!lastStackCoords[stackId][idx]) {
|
|
80
|
+
lastStackCoords[stackId][idx] = {
|
|
81
|
+
p: valueAxisStart, // Positive stack
|
|
82
|
+
n: valueAxisStart // Negative stack
|
|
83
|
+
};
|
|
84
|
+
lastStackCoordsOrigin[stackId][idx] = {
|
|
85
|
+
p: valueAxisStart, // Positive stack
|
|
86
|
+
n: valueAxisStart // Negative stack
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
var sign = value >= 0 ? 'p' : 'n';
|
|
90
|
+
var coord = polar.pointToCoord(coords[idx]);
|
|
91
|
+
|
|
92
|
+
var lastCoordOrigin = lastStackCoordsOrigin[stackId][idx][sign];
|
|
93
|
+
var r0;
|
|
94
|
+
var r;
|
|
95
|
+
var startAngle;
|
|
96
|
+
var endAngle;
|
|
97
|
+
|
|
98
|
+
if (valueAxis.dim === 'radius') {
|
|
99
|
+
// radial sector
|
|
100
|
+
r0 = lastCoordOrigin;
|
|
101
|
+
r = coord[0];
|
|
102
|
+
startAngle = (-coord[1] + columnOffset) * Math.PI / 180;
|
|
103
|
+
endAngle = startAngle + columnWidth * Math.PI / 180;
|
|
104
|
+
|
|
105
|
+
if (Math.abs(r) < barMinHeight) {
|
|
106
|
+
r = r0 + (r < 0 ? -1 : 1) * barMinHeight;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
lastStackCoordsOrigin[stackId][idx][sign] = r;
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
// tangential sector
|
|
113
|
+
r0 = coord[0] + columnOffset;
|
|
114
|
+
r = r0 + columnWidth;
|
|
115
|
+
|
|
116
|
+
// clamp data if min or max is defined for valueAxis
|
|
117
|
+
if (valueMax != null) {
|
|
118
|
+
value = Math.min(value, valueMax);
|
|
119
|
+
}
|
|
120
|
+
if (valueMin != null) {
|
|
121
|
+
value = Math.max(value, valueMin);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
var angle = angleAxis.dataToAngle(value);
|
|
125
|
+
if (Math.abs(angle - lastCoordOrigin) < barMinAngle) {
|
|
126
|
+
angle = lastCoordOrigin - (value < 0 ? -1 : 1)
|
|
127
|
+
* barMinAngle;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
startAngle = -lastCoordOrigin * Math.PI / 180;
|
|
131
|
+
endAngle = -angle * Math.PI / 180;
|
|
132
|
+
|
|
133
|
+
// if the previous stack is at the end of the ring,
|
|
134
|
+
// add a round to differentiate it from origin
|
|
135
|
+
var extent = angleAxis.getExtent();
|
|
136
|
+
var stackCoord = angle;
|
|
137
|
+
if (stackCoord === extent[0] && value > 0) {
|
|
138
|
+
stackCoord = extent[1];
|
|
139
|
+
}
|
|
140
|
+
else if (stackCoord === extent[1] && value < 0) {
|
|
141
|
+
stackCoord = extent[0];
|
|
142
|
+
}
|
|
143
|
+
lastStackCoordsOrigin[stackId][idx][sign] = stackCoord;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
data.setItemLayout(idx, {
|
|
147
|
+
cx: cx,
|
|
148
|
+
cy: cy,
|
|
149
|
+
r0: r0,
|
|
150
|
+
r: r,
|
|
151
|
+
startAngle: startAngle,
|
|
152
|
+
endAngle: endAngle
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
}, true);
|
|
156
|
+
|
|
157
|
+
}, this);
|
|
158
|
+
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Calculate bar width and offset for radial bar charts
|
|
163
|
+
*/
|
|
164
|
+
function calRadialBar(barSeries, api) {
|
|
165
|
+
// Columns info on each category axis. Key is polar name
|
|
166
|
+
var columnsMap = {};
|
|
167
|
+
|
|
168
|
+
zrUtil.each(barSeries, function (seriesModel, idx) {
|
|
169
|
+
var data = seriesModel.getData();
|
|
170
|
+
var polar = seriesModel.coordinateSystem;
|
|
171
|
+
|
|
172
|
+
var baseAxis = polar.getBaseAxis();
|
|
173
|
+
|
|
174
|
+
var axisExtent = baseAxis.getExtent();
|
|
175
|
+
var bandWidth = baseAxis.type === 'category'
|
|
176
|
+
? baseAxis.getBandWidth()
|
|
177
|
+
: (Math.abs(axisExtent[1] - axisExtent[0]) / data.count());
|
|
178
|
+
|
|
179
|
+
var columnsOnAxis = columnsMap[getAxisKey(baseAxis)] || {
|
|
180
|
+
bandWidth: bandWidth,
|
|
181
|
+
remainedWidth: bandWidth,
|
|
182
|
+
autoWidthCount: 0,
|
|
183
|
+
categoryGap: '20%',
|
|
184
|
+
gap: '30%',
|
|
185
|
+
stacks: {}
|
|
186
|
+
};
|
|
187
|
+
var stacks = columnsOnAxis.stacks;
|
|
188
|
+
columnsMap[getAxisKey(baseAxis)] = columnsOnAxis;
|
|
189
|
+
|
|
190
|
+
var stackId = getSeriesStackId(seriesModel);
|
|
191
|
+
|
|
192
|
+
if (!stacks[stackId]) {
|
|
193
|
+
columnsOnAxis.autoWidthCount++;
|
|
194
|
+
}
|
|
195
|
+
stacks[stackId] = stacks[stackId] || {
|
|
196
|
+
width: 0,
|
|
197
|
+
maxWidth: 0
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
var barWidth = parsePercent(
|
|
201
|
+
seriesModel.get('barWidth'),
|
|
202
|
+
bandWidth
|
|
203
|
+
);
|
|
204
|
+
var barMaxWidth = parsePercent(
|
|
205
|
+
seriesModel.get('barMaxWidth'),
|
|
206
|
+
bandWidth
|
|
207
|
+
);
|
|
208
|
+
var barGap = seriesModel.get('barGap');
|
|
209
|
+
var barCategoryGap = seriesModel.get('barCategoryGap');
|
|
210
|
+
|
|
211
|
+
if (barWidth && !stacks[stackId].width) {
|
|
212
|
+
barWidth = Math.min(columnsOnAxis.remainedWidth, barWidth);
|
|
213
|
+
stacks[stackId].width = barWidth;
|
|
214
|
+
columnsOnAxis.remainedWidth -= barWidth;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
barMaxWidth && (stacks[stackId].maxWidth = barMaxWidth);
|
|
218
|
+
(barGap != null) && (columnsOnAxis.gap = barGap);
|
|
219
|
+
(barCategoryGap != null) && (columnsOnAxis.categoryGap = barCategoryGap);
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
var result = {};
|
|
224
|
+
|
|
225
|
+
zrUtil.each(columnsMap, function (columnsOnAxis, coordSysName) {
|
|
226
|
+
|
|
227
|
+
result[coordSysName] = {};
|
|
228
|
+
|
|
229
|
+
var stacks = columnsOnAxis.stacks;
|
|
230
|
+
var bandWidth = columnsOnAxis.bandWidth;
|
|
231
|
+
var categoryGap = parsePercent(columnsOnAxis.categoryGap, bandWidth);
|
|
232
|
+
var barGapPercent = parsePercent(columnsOnAxis.gap, 1);
|
|
233
|
+
|
|
234
|
+
var remainedWidth = columnsOnAxis.remainedWidth;
|
|
235
|
+
var autoWidthCount = columnsOnAxis.autoWidthCount;
|
|
236
|
+
var autoWidth = (remainedWidth - categoryGap)
|
|
237
|
+
/ (autoWidthCount + (autoWidthCount - 1) * barGapPercent);
|
|
238
|
+
autoWidth = Math.max(autoWidth, 0);
|
|
239
|
+
|
|
240
|
+
// Find if any auto calculated bar exceeded maxBarWidth
|
|
241
|
+
zrUtil.each(stacks, function (column, stack) {
|
|
242
|
+
var maxWidth = column.maxWidth;
|
|
243
|
+
if (maxWidth && maxWidth < autoWidth) {
|
|
244
|
+
maxWidth = Math.min(maxWidth, remainedWidth);
|
|
245
|
+
if (column.width) {
|
|
246
|
+
maxWidth = Math.min(maxWidth, column.width);
|
|
247
|
+
}
|
|
248
|
+
remainedWidth -= maxWidth;
|
|
249
|
+
column.width = maxWidth;
|
|
250
|
+
autoWidthCount--;
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
// Recalculate width again
|
|
255
|
+
autoWidth = (remainedWidth - categoryGap)
|
|
256
|
+
/ (autoWidthCount + (autoWidthCount - 1) * barGapPercent);
|
|
257
|
+
autoWidth = Math.max(autoWidth, 0);
|
|
258
|
+
|
|
259
|
+
var widthSum = 0;
|
|
260
|
+
var lastColumn;
|
|
261
|
+
zrUtil.each(stacks, function (column, idx) {
|
|
262
|
+
if (!column.width) {
|
|
263
|
+
column.width = autoWidth;
|
|
264
|
+
}
|
|
265
|
+
lastColumn = column;
|
|
266
|
+
widthSum += column.width * (1 + barGapPercent);
|
|
267
|
+
});
|
|
268
|
+
if (lastColumn) {
|
|
269
|
+
widthSum -= lastColumn.width * barGapPercent;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
var offset = -widthSum / 2;
|
|
273
|
+
zrUtil.each(stacks, function (column, stackId) {
|
|
274
|
+
result[coordSysName][stackId] = result[coordSysName][stackId] || {
|
|
275
|
+
offset: offset,
|
|
276
|
+
width: column.width
|
|
277
|
+
};
|
|
278
|
+
|
|
279
|
+
offset += column.width * (1 + barGapPercent);
|
|
280
|
+
});
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
return result;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
return barLayoutPolar;
|
|
287
|
+
});
|
package/src/layout/points.js
CHANGED
|
@@ -5,23 +5,29 @@ define(function (require) {
|
|
|
5
5
|
var data = seriesModel.getData();
|
|
6
6
|
var coordSys = seriesModel.coordinateSystem;
|
|
7
7
|
|
|
8
|
-
if (coordSys) {
|
|
9
|
-
|
|
8
|
+
if (!coordSys) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
var dims = [];
|
|
13
|
+
var coordDims = coordSys.dimensions;
|
|
14
|
+
for (var i = 0; i < coordDims.length; i++) {
|
|
15
|
+
dims.push(seriesModel.coordDimToDataDim(coordSys.dimensions[i])[0]);
|
|
16
|
+
}
|
|
10
17
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
18
|
+
if (dims.length === 1) {
|
|
19
|
+
data.each(dims[0], function (x, idx) {
|
|
20
|
+
// Also {Array.<number>}, not undefined to avoid if...else... statement
|
|
21
|
+
data.setItemLayout(idx, isNaN(x) ? [NaN, NaN] : coordSys.dataToPoint(x));
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
else if (dims.length === 2) {
|
|
25
|
+
data.each(dims, function (x, y, idx) {
|
|
26
|
+
// Also {Array.<number>}, not undefined to avoid if...else... statement
|
|
27
|
+
data.setItemLayout(
|
|
28
|
+
idx, (isNaN(x) || isNaN(y)) ? [NaN, NaN] : coordSys.dataToPoint([x, y])
|
|
29
|
+
);
|
|
30
|
+
}, true);
|
|
25
31
|
}
|
|
26
32
|
});
|
|
27
33
|
};
|