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.
Files changed (190) hide show
  1. package/LICENSE +21 -18
  2. package/dist/echarts.common.js +10072 -9330
  3. package/dist/echarts.common.min.js +13 -13
  4. package/dist/echarts.js +13084 -11412
  5. package/dist/echarts.min.js +22 -21
  6. package/dist/echarts.simple.js +9454 -8889
  7. package/dist/echarts.simple.min.js +9 -10
  8. package/index.js +1 -0
  9. package/lib/chart/bar/BarView.js +141 -49
  10. package/lib/chart/bar/BaseBarSeries.js +2 -6
  11. package/lib/chart/bar.js +1 -0
  12. package/lib/chart/boxplot/BoxplotSeries.js +1 -1
  13. package/lib/chart/boxplot/boxplotLayout.js +23 -7
  14. package/lib/chart/candlestick/CandlestickSeries.js +1 -21
  15. package/lib/chart/candlestick/candlestickLayout.js +23 -7
  16. package/lib/chart/custom.js +442 -0
  17. package/lib/chart/graph/categoryVisual.js +3 -2
  18. package/lib/chart/heatmap/HeatmapView.js +75 -73
  19. package/lib/chart/helper/Symbol.js +8 -31
  20. package/lib/chart/helper/createListFromArray.js +15 -10
  21. package/lib/chart/helper/labelHelper.js +48 -0
  22. package/lib/chart/helper/whiskerBoxCommon.js +25 -44
  23. package/lib/chart/map/mapDataStatistic.js +9 -8
  24. package/lib/chart/pie/pieLayout.js +25 -17
  25. package/lib/chart/radar/RadarSeries.js +1 -1
  26. package/lib/chart/scatter/ScatterSeries.js +2 -3
  27. package/lib/chart/themeRiver/ThemeRiverSeries.js +6 -5
  28. package/lib/chart/themeRiver/themeRiverVisual.js +1 -1
  29. package/lib/chart/treemap/TreemapSeries.js +3 -3
  30. package/lib/component/axisPointer/BaseAxisPointer.js +7 -6
  31. package/lib/component/axisPointer/axisTrigger.js +62 -51
  32. package/lib/component/axisPointer.js +1 -2
  33. package/lib/component/calendar/CalendarView.js +5 -5
  34. package/lib/component/dataZoom/AxisProxy.js +76 -13
  35. package/lib/component/dataZoom/DataZoomModel.js +21 -5
  36. package/lib/component/dataZoom/InsideZoomModel.js +4 -1
  37. package/lib/component/dataZoom/InsideZoomView.js +16 -26
  38. package/lib/component/dataZoom/SliderZoomView.js +63 -26
  39. package/lib/component/dataZoom/roams.js +8 -3
  40. package/lib/component/graphic.js +13 -12
  41. package/lib/component/helper/BrushTargetManager.js +5 -5
  42. package/lib/component/helper/MapDraw.js +3 -3
  43. package/lib/component/helper/RoamController.js +43 -20
  44. package/lib/component/helper/brushHelper.js +2 -13
  45. package/lib/component/helper/selectableMixin.js +7 -7
  46. package/lib/component/helper/sliderMove.js +65 -36
  47. package/lib/component/legend/LegendView.js +6 -6
  48. package/lib/component/legend/legendAction.js +1 -1
  49. package/lib/component/marker/MarkAreaView.js +3 -6
  50. package/lib/component/marker/MarkLineView.js +3 -5
  51. package/lib/component/marker/MarkPointView.js +3 -5
  52. package/lib/component/marker/MarkerView.js +10 -12
  53. package/lib/component/polar.js +5 -0
  54. package/lib/component/timeline/SliderTimelineView.js +1 -1
  55. package/lib/component/toolbox/feature/DataZoom.js +14 -1
  56. package/lib/component/tooltip/TooltipView.js +3 -3
  57. package/lib/component/visualMap/ContinuousView.js +6 -4
  58. package/lib/coord/Axis.js +34 -2
  59. package/lib/coord/axisDefault.js +2 -1
  60. package/lib/coord/axisHelper.js +6 -25
  61. package/lib/coord/axisModelCommonMixin.js +1 -1
  62. package/lib/coord/calendar/Calendar.js +14 -17
  63. package/lib/coord/calendar/prepareCustom.js +31 -0
  64. package/lib/coord/cartesian/Axis2D.js +0 -12
  65. package/lib/coord/cartesian/Cartesian2D.js +1 -0
  66. package/lib/coord/cartesian/Grid.js +5 -2
  67. package/lib/coord/cartesian/prepareCustom.js +36 -0
  68. package/lib/coord/geo/Geo.js +9 -14
  69. package/lib/coord/geo/GeoModel.js +5 -5
  70. package/lib/coord/geo/geoCreator.js +3 -3
  71. package/lib/coord/geo/prepareCustom.js +36 -0
  72. package/lib/coord/parallel/Parallel.js +12 -11
  73. package/lib/coord/polar/Polar.js +2 -1
  74. package/lib/coord/polar/prepareCustom.js +53 -0
  75. package/lib/coord/single/Single.js +9 -8
  76. package/lib/coord/single/SingleAxis.js +0 -27
  77. package/lib/coord/single/prepareCustom.js +33 -0
  78. package/lib/data/DataDiffer.js +2 -1
  79. package/lib/data/Graph.js +11 -7
  80. package/lib/data/List.js +58 -19
  81. package/lib/data/helper/completeDimensions.js +184 -23
  82. package/lib/echarts.js +38 -33
  83. package/lib/helper.js +1 -8
  84. package/lib/layout/barGrid.js +87 -18
  85. package/lib/layout/barPolar.js +286 -0
  86. package/lib/layout/points.js +22 -16
  87. package/lib/model/Global.js +34 -31
  88. package/lib/model/Series.js +41 -29
  89. package/lib/model/mixin/colorPalette.js +2 -1
  90. package/lib/model/mixin/textStyle.js +7 -13
  91. package/lib/scale/Interval.js +21 -14
  92. package/lib/scale/Log.js +5 -7
  93. package/lib/scale/Time.js +13 -7
  94. package/lib/scale/helper.js +5 -1
  95. package/lib/util/format.js +12 -0
  96. package/lib/util/graphic.js +53 -1
  97. package/lib/util/model.js +63 -7
  98. package/map/js/world.js +1 -1
  99. package/map/json/world.json +1 -1
  100. package/package.json +3 -3
  101. package/src/chart/bar/BarView.js +141 -49
  102. package/src/chart/bar/BaseBarSeries.js +2 -6
  103. package/src/chart/bar.js +1 -0
  104. package/src/chart/boxplot/BoxplotSeries.js +1 -1
  105. package/src/chart/boxplot/boxplotLayout.js +23 -7
  106. package/src/chart/candlestick/CandlestickSeries.js +1 -21
  107. package/src/chart/candlestick/candlestickLayout.js +23 -7
  108. package/src/chart/custom.js +442 -0
  109. package/src/chart/graph/categoryVisual.js +3 -2
  110. package/src/chart/heatmap/HeatmapView.js +75 -73
  111. package/src/chart/helper/Symbol.js +8 -31
  112. package/src/chart/helper/createListFromArray.js +15 -10
  113. package/src/chart/helper/labelHelper.js +49 -0
  114. package/src/chart/helper/whiskerBoxCommon.js +25 -44
  115. package/src/chart/map/mapDataStatistic.js +9 -8
  116. package/src/chart/pie/pieLayout.js +25 -17
  117. package/src/chart/radar/RadarSeries.js +1 -1
  118. package/src/chart/scatter/ScatterSeries.js +2 -3
  119. package/src/chart/themeRiver/ThemeRiverSeries.js +6 -5
  120. package/src/chart/themeRiver/themeRiverVisual.js +1 -1
  121. package/src/chart/treemap/TreemapSeries.js +3 -3
  122. package/src/component/axisPointer/BaseAxisPointer.js +7 -6
  123. package/src/component/axisPointer/axisTrigger.js +62 -51
  124. package/src/component/axisPointer.js +1 -2
  125. package/src/component/calendar/CalendarView.js +5 -5
  126. package/src/component/dataZoom/AxisProxy.js +76 -13
  127. package/src/component/dataZoom/DataZoomModel.js +21 -5
  128. package/src/component/dataZoom/InsideZoomModel.js +4 -1
  129. package/src/component/dataZoom/InsideZoomView.js +16 -26
  130. package/src/component/dataZoom/SliderZoomView.js +63 -26
  131. package/src/component/dataZoom/roams.js +8 -3
  132. package/src/component/graphic.js +13 -12
  133. package/src/component/helper/BrushTargetManager.js +5 -5
  134. package/src/component/helper/MapDraw.js +3 -3
  135. package/src/component/helper/RoamController.js +43 -20
  136. package/src/component/helper/brushHelper.js +2 -13
  137. package/src/component/helper/selectableMixin.js +7 -7
  138. package/src/component/helper/sliderMove.js +65 -36
  139. package/src/component/legend/LegendView.js +6 -6
  140. package/src/component/legend/legendAction.js +1 -1
  141. package/src/component/marker/MarkAreaView.js +3 -6
  142. package/src/component/marker/MarkLineView.js +3 -5
  143. package/src/component/marker/MarkPointView.js +3 -5
  144. package/src/component/marker/MarkerView.js +10 -12
  145. package/src/component/polar.js +5 -0
  146. package/src/component/timeline/SliderTimelineView.js +1 -1
  147. package/src/component/toolbox/feature/DataZoom.js +14 -1
  148. package/src/component/tooltip/TooltipView.js +3 -3
  149. package/src/component/visualMap/ContinuousView.js +6 -4
  150. package/src/coord/Axis.js +34 -2
  151. package/src/coord/axisDefault.js +2 -1
  152. package/src/coord/axisHelper.js +6 -25
  153. package/src/coord/axisModelCommonMixin.js +1 -1
  154. package/src/coord/calendar/Calendar.js +14 -17
  155. package/src/coord/calendar/prepareCustom.js +32 -0
  156. package/src/coord/cartesian/Axis2D.js +0 -12
  157. package/src/coord/cartesian/Cartesian2D.js +1 -0
  158. package/src/coord/cartesian/Grid.js +5 -2
  159. package/src/coord/cartesian/prepareCustom.js +37 -0
  160. package/src/coord/geo/Geo.js +9 -14
  161. package/src/coord/geo/GeoModel.js +5 -5
  162. package/src/coord/geo/geoCreator.js +3 -3
  163. package/src/coord/geo/prepareCustom.js +37 -0
  164. package/src/coord/parallel/Parallel.js +12 -11
  165. package/src/coord/polar/Polar.js +2 -1
  166. package/src/coord/polar/prepareCustom.js +54 -0
  167. package/src/coord/single/Single.js +9 -8
  168. package/src/coord/single/SingleAxis.js +0 -27
  169. package/src/coord/single/prepareCustom.js +34 -0
  170. package/src/data/DataDiffer.js +2 -1
  171. package/src/data/Graph.js +11 -7
  172. package/src/data/List.js +58 -19
  173. package/src/data/helper/completeDimensions.js +184 -23
  174. package/src/echarts.js +38 -33
  175. package/src/helper.js +1 -8
  176. package/src/layout/barGrid.js +87 -18
  177. package/src/layout/barPolar.js +287 -0
  178. package/src/layout/points.js +22 -16
  179. package/src/model/Global.js +34 -31
  180. package/src/model/Series.js +41 -29
  181. package/src/model/mixin/colorPalette.js +2 -1
  182. package/src/model/mixin/textStyle.js +7 -13
  183. package/src/scale/Interval.js +21 -14
  184. package/src/scale/Log.js +5 -7
  185. package/src/scale/Time.js +13 -7
  186. package/src/scale/helper.js +5 -1
  187. package/src/util/format.js +12 -0
  188. package/src/util/graphic.js +53 -1
  189. package/src/util/model.js +63 -7
  190. package/src/coord/cartesian/axisLabelInterval.js +0 -26
@@ -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') || '__ec_stack_' + seriesModel.seriesIndex;
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
- function calBarWidthAndOffset(barSeries, api) {
18
- // Columns info on each category axis. Key is cartesian name
19
- var columnsMap = {};
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
- zrUtil.each(barSeries, function (seriesModel, idx) {
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 columnsOnAxis = columnsMap[getAxisKey(baseAxis)] || {
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[getAxisKey(baseAxis)] = columnsOnAxis;
107
+ columnsMap[axisKey] = columnsOnAxis;
41
108
 
42
- var stackId = getSeriesStackId(seriesModel);
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
+ });
@@ -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
- var dims = coordSys.dimensions;
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
- if (dims.length === 1) {
12
- data.each(dims[0], function (x, idx) {
13
- // Also {Array.<number>}, not undefined to avoid if...else... statement
14
- data.setItemLayout(idx, isNaN(x) ? [NaN, NaN] : coordSys.dataToPoint(x));
15
- });
16
- }
17
- else if (dims.length === 2) {
18
- data.each(dims, function (x, y, idx) {
19
- // Also {Array.<number>}, not undefined to avoid if...else... statement
20
- data.setItemLayout(
21
- idx, (isNaN(x) || isNaN(y)) ? [NaN, NaN] : coordSys.dataToPoint([x, y])
22
- );
23
- }, true);
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
  };