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
@@ -5,29 +5,96 @@
5
5
  var numberUtil = require('../util/number');
6
6
  var parsePercent = numberUtil.parsePercent;
7
7
 
8
+ var STACK_PREFIX = '__ec_stack_';
9
+
8
10
  function getSeriesStackId(seriesModel) {
9
- return seriesModel.get('stack') || '__ec_stack_' + seriesModel.seriesIndex;
11
+ return seriesModel.get('stack') || STACK_PREFIX + seriesModel.seriesIndex;
10
12
  }
11
13
 
12
14
  function getAxisKey(axis) {
13
15
  return axis.dim + axis.index;
14
16
  }
15
17
 
16
- function calBarWidthAndOffset(barSeries, api) {
17
- // Columns info on each category axis. Key is cartesian name
18
- var columnsMap = {};
18
+ /**
19
+ * @param {Object} opt
20
+ * @param {module:echarts/coord/Axis} opt.axis Only support category axis currently.
21
+ * @param {number} opt.count Positive interger.
22
+ * @param {number} [opt.barWidth]
23
+ * @param {number} [opt.barMaxWidth]
24
+ * @param {number} [opt.barGap]
25
+ * @param {number} [opt.barCategoryGap]
26
+ * @return {Object} {width, offset, offsetCenter} If axis.type is not 'category', return undefined.
27
+ */
28
+ function getLayoutOnAxis(opt, api) {
29
+ var params = [];
30
+ var baseAxis = opt.axis;
31
+ var axisKey = 'axis0';
32
+
33
+ if (baseAxis.type !== 'category') {
34
+ return;
35
+ }
36
+ var bandWidth = baseAxis.getBandWidth();
37
+
38
+ for (var i = 0; i < opt.count || 0; i++) {
39
+ params.push(zrUtil.defaults({
40
+ bandWidth: bandWidth,
41
+ axisKey: axisKey,
42
+ stackId: STACK_PREFIX + i
43
+ }, opt));
44
+ }
45
+ var widthAndOffsets = doCalBarWidthAndOffset(params, api);
46
+
47
+ var result = [];
48
+ for (var i = 0; i < opt.count; i++) {
49
+ var item = widthAndOffsets[axisKey][STACK_PREFIX + i];
50
+ item.offsetCenter = item.offset + item.width / 2;
51
+ result.push(item);
52
+ }
19
53
 
20
- zrUtil.each(barSeries, function (seriesModel, idx) {
54
+ return result;
55
+ }
56
+
57
+ function calBarWidthAndOffset(barSeries, api) {
58
+ var seriesInfoList = zrUtil.map(barSeries, function (seriesModel) {
21
59
  var data = seriesModel.getData();
22
60
  var cartesian = seriesModel.coordinateSystem;
23
-
24
61
  var baseAxis = cartesian.getBaseAxis();
25
62
  var axisExtent = baseAxis.getExtent();
26
63
  var bandWidth = baseAxis.type === 'category'
27
64
  ? baseAxis.getBandWidth()
28
65
  : (Math.abs(axisExtent[1] - axisExtent[0]) / data.count());
29
66
 
30
- var columnsOnAxis = columnsMap[getAxisKey(baseAxis)] || {
67
+ var barWidth = parsePercent(
68
+ seriesModel.get('barWidth'), bandWidth
69
+ );
70
+ var barMaxWidth = parsePercent(
71
+ seriesModel.get('barMaxWidth'), bandWidth
72
+ );
73
+ var barGap = seriesModel.get('barGap');
74
+ var barCategoryGap = seriesModel.get('barCategoryGap');
75
+
76
+ return {
77
+ bandWidth: bandWidth,
78
+ barWidth: barWidth,
79
+ barMaxWidth: barMaxWidth,
80
+ barGap: barGap,
81
+ barCategoryGap: barCategoryGap,
82
+ axisKey: getAxisKey(baseAxis),
83
+ stackId: getSeriesStackId(seriesModel)
84
+ };
85
+ });
86
+
87
+ return doCalBarWidthAndOffset(seriesInfoList, api);
88
+ }
89
+
90
+ function doCalBarWidthAndOffset(seriesInfoList, api) {
91
+ // Columns info on each category axis. Key is cartesian name
92
+ var columnsMap = {};
93
+
94
+ zrUtil.each(seriesInfoList, function (seriesInfo, idx) {
95
+ var axisKey = seriesInfo.axisKey;
96
+ var bandWidth = seriesInfo.bandWidth;
97
+ var columnsOnAxis = columnsMap[axisKey] || {
31
98
  bandWidth: bandWidth,
32
99
  remainedWidth: bandWidth,
33
100
  autoWidthCount: 0,
@@ -36,9 +103,9 @@
36
103
  stacks: {}
37
104
  };
38
105
  var stacks = columnsOnAxis.stacks;
39
- columnsMap[getAxisKey(baseAxis)] = columnsOnAxis;
106
+ columnsMap[axisKey] = columnsOnAxis;
40
107
 
41
- var stackId = getSeriesStackId(seriesModel);
108
+ var stackId = seriesInfo.stackId;
42
109
 
43
110
  if (!stacks[stackId]) {
44
111
  columnsOnAxis.autoWidthCount++;
@@ -48,29 +115,24 @@
48
115
  maxWidth: 0
49
116
  };
50
117
 
51
- var barWidth = parsePercent(
52
- seriesModel.get('barWidth'), bandWidth
53
- );
54
- var barMaxWidth = parsePercent(
55
- seriesModel.get('barMaxWidth'), bandWidth
56
- );
57
- var barGap = seriesModel.get('barGap');
58
- var barCategoryGap = seriesModel.get('barCategoryGap');
59
-
60
118
  // Caution: In a single coordinate system, these barGrid attributes
61
119
  // will be shared by series. Consider that they have default values,
62
120
  // only the attributes set on the last series will work.
63
121
  // Do not change this fact unless there will be a break change.
64
122
 
65
123
  // TODO
124
+ var barWidth = seriesInfo.barWidth;
66
125
  if (barWidth && !stacks[stackId].width) {
67
126
  barWidth = Math.min(columnsOnAxis.remainedWidth, barWidth);
68
127
  stacks[stackId].width = barWidth;
69
128
  columnsOnAxis.remainedWidth -= barWidth;
70
129
  }
71
130
 
131
+ var barMaxWidth = seriesInfo.barMaxWidth;
72
132
  barMaxWidth && (stacks[stackId].maxWidth = barMaxWidth);
133
+ var barGap = seriesInfo.barGap;
73
134
  (barGap != null) && (columnsOnAxis.gap = barGap);
135
+ var barCategoryGap = seriesInfo.barCategoryGap;
74
136
  (barCategoryGap != null) && (columnsOnAxis.categoryGap = barCategoryGap);
75
137
  });
76
138
 
@@ -160,6 +222,11 @@
160
222
 
161
223
  ecModel.eachSeriesByType(seriesType, function (seriesModel) {
162
224
 
225
+ // Check series coordinate, do layout for cartesian2d only
226
+ if (seriesModel.coordinateSystem.type !== 'cartesian2d') {
227
+ return;
228
+ }
229
+
163
230
  var data = seriesModel.getData();
164
231
  var cartesian = seriesModel.coordinateSystem;
165
232
  var baseAxis = cartesian.getBaseAxis();
@@ -246,4 +313,6 @@
246
313
  }, this);
247
314
  }
248
315
 
316
+ barLayoutGrid.getLayoutOnAxis = getLayoutOnAxis;
317
+
249
318
  module.exports = barLayoutGrid;
@@ -0,0 +1,286 @@
1
+ 'use strict';
2
+
3
+
4
+ var zrUtil = require('zrender/lib/core/util');
5
+ var parsePercent = require('../util/number').parsePercent;
6
+
7
+ function getSeriesStackId(seriesModel) {
8
+ return seriesModel.get('stack')
9
+ || '__ec_stack_' + seriesModel.seriesIndex;
10
+ }
11
+
12
+ function getAxisKey(axis) {
13
+ return axis.dim;
14
+ }
15
+
16
+ /**
17
+ * @param {string} seriesType
18
+ * @param {module:echarts/model/Global} ecModel
19
+ * @param {module:echarts/ExtensionAPI} api
20
+ */
21
+ function barLayoutPolar(seriesType, ecModel, api) {
22
+
23
+ var width = api.getWidth();
24
+ var height = api.getHeight();
25
+
26
+ var lastStackCoords = {};
27
+ var lastStackCoordsOrigin = {};
28
+
29
+ var barWidthAndOffset = calRadialBar(
30
+ zrUtil.filter(
31
+ ecModel.getSeriesByType(seriesType),
32
+ function (seriesModel) {
33
+ return !ecModel.isSeriesFiltered(seriesModel)
34
+ && seriesModel.coordinateSystem
35
+ && seriesModel.coordinateSystem.type === 'polar';
36
+ }
37
+ )
38
+ );
39
+
40
+ ecModel.eachSeriesByType(seriesType, function (seriesModel) {
41
+ // Check series coordinate, do layout for polar only
42
+ if (seriesModel.coordinateSystem.type !== 'polar') {
43
+ return;
44
+ }
45
+
46
+ var data = seriesModel.getData();
47
+ var polar = seriesModel.coordinateSystem;
48
+ var angleAxis = polar.getAngleAxis();
49
+ var baseAxis = polar.getBaseAxis();
50
+
51
+ var stackId = getSeriesStackId(seriesModel);
52
+ var columnLayoutInfo
53
+ = barWidthAndOffset[getAxisKey(baseAxis)][stackId];
54
+ var columnOffset = columnLayoutInfo.offset;
55
+ var columnWidth = columnLayoutInfo.width;
56
+ var valueAxis = polar.getOtherAxis(baseAxis);
57
+
58
+ var center = seriesModel.get('center') || ['50%', '50%'];
59
+ var cx = parsePercent(center[0], width);
60
+ var cy = parsePercent(center[1], height);
61
+
62
+ var barMinHeight = seriesModel.get('barMinHeight') || 0;
63
+ var barMinAngle = seriesModel.get('barMinAngle') || 0;
64
+
65
+ var valueAxisStart = valueAxis.getExtent()[0];
66
+ var valueMax = valueAxis.model.get('max');
67
+ var valueMin = valueAxis.model.get('min');
68
+
69
+ var coords = polar.dataToPoints(data);
70
+ lastStackCoords[stackId] = lastStackCoords[stackId] || [];
71
+ lastStackCoordsOrigin[stackId] = lastStackCoordsOrigin[stackId] || []; // Fix #4243
72
+
73
+ data.each(valueAxis.dim, function (value, idx) {
74
+ if (isNaN(value)) {
75
+ return;
76
+ }
77
+
78
+ if (!lastStackCoords[stackId][idx]) {
79
+ lastStackCoords[stackId][idx] = {
80
+ p: valueAxisStart, // Positive stack
81
+ n: valueAxisStart // Negative stack
82
+ };
83
+ lastStackCoordsOrigin[stackId][idx] = {
84
+ p: valueAxisStart, // Positive stack
85
+ n: valueAxisStart // Negative stack
86
+ };
87
+ }
88
+ var sign = value >= 0 ? 'p' : 'n';
89
+ var coord = polar.pointToCoord(coords[idx]);
90
+
91
+ var lastCoordOrigin = lastStackCoordsOrigin[stackId][idx][sign];
92
+ var r0;
93
+ var r;
94
+ var startAngle;
95
+ var endAngle;
96
+
97
+ if (valueAxis.dim === 'radius') {
98
+ // radial sector
99
+ r0 = lastCoordOrigin;
100
+ r = coord[0];
101
+ startAngle = (-coord[1] + columnOffset) * Math.PI / 180;
102
+ endAngle = startAngle + columnWidth * Math.PI / 180;
103
+
104
+ if (Math.abs(r) < barMinHeight) {
105
+ r = r0 + (r < 0 ? -1 : 1) * barMinHeight;
106
+ }
107
+
108
+ lastStackCoordsOrigin[stackId][idx][sign] = r;
109
+ }
110
+ else {
111
+ // tangential sector
112
+ r0 = coord[0] + columnOffset;
113
+ r = r0 + columnWidth;
114
+
115
+ // clamp data if min or max is defined for valueAxis
116
+ if (valueMax != null) {
117
+ value = Math.min(value, valueMax);
118
+ }
119
+ if (valueMin != null) {
120
+ value = Math.max(value, valueMin);
121
+ }
122
+
123
+ var angle = angleAxis.dataToAngle(value);
124
+ if (Math.abs(angle - lastCoordOrigin) < barMinAngle) {
125
+ angle = lastCoordOrigin - (value < 0 ? -1 : 1)
126
+ * barMinAngle;
127
+ }
128
+
129
+ startAngle = -lastCoordOrigin * Math.PI / 180;
130
+ endAngle = -angle * Math.PI / 180;
131
+
132
+ // if the previous stack is at the end of the ring,
133
+ // add a round to differentiate it from origin
134
+ var extent = angleAxis.getExtent();
135
+ var stackCoord = angle;
136
+ if (stackCoord === extent[0] && value > 0) {
137
+ stackCoord = extent[1];
138
+ }
139
+ else if (stackCoord === extent[1] && value < 0) {
140
+ stackCoord = extent[0];
141
+ }
142
+ lastStackCoordsOrigin[stackId][idx][sign] = stackCoord;
143
+ }
144
+
145
+ data.setItemLayout(idx, {
146
+ cx: cx,
147
+ cy: cy,
148
+ r0: r0,
149
+ r: r,
150
+ startAngle: startAngle,
151
+ endAngle: endAngle
152
+ });
153
+
154
+ }, true);
155
+
156
+ }, this);
157
+
158
+ }
159
+
160
+ /**
161
+ * Calculate bar width and offset for radial bar charts
162
+ */
163
+ function calRadialBar(barSeries, api) {
164
+ // Columns info on each category axis. Key is polar name
165
+ var columnsMap = {};
166
+
167
+ zrUtil.each(barSeries, function (seriesModel, idx) {
168
+ var data = seriesModel.getData();
169
+ var polar = seriesModel.coordinateSystem;
170
+
171
+ var baseAxis = polar.getBaseAxis();
172
+
173
+ var axisExtent = baseAxis.getExtent();
174
+ var bandWidth = baseAxis.type === 'category'
175
+ ? baseAxis.getBandWidth()
176
+ : (Math.abs(axisExtent[1] - axisExtent[0]) / data.count());
177
+
178
+ var columnsOnAxis = columnsMap[getAxisKey(baseAxis)] || {
179
+ bandWidth: bandWidth,
180
+ remainedWidth: bandWidth,
181
+ autoWidthCount: 0,
182
+ categoryGap: '20%',
183
+ gap: '30%',
184
+ stacks: {}
185
+ };
186
+ var stacks = columnsOnAxis.stacks;
187
+ columnsMap[getAxisKey(baseAxis)] = columnsOnAxis;
188
+
189
+ var stackId = getSeriesStackId(seriesModel);
190
+
191
+ if (!stacks[stackId]) {
192
+ columnsOnAxis.autoWidthCount++;
193
+ }
194
+ stacks[stackId] = stacks[stackId] || {
195
+ width: 0,
196
+ maxWidth: 0
197
+ };
198
+
199
+ var barWidth = parsePercent(
200
+ seriesModel.get('barWidth'),
201
+ bandWidth
202
+ );
203
+ var barMaxWidth = parsePercent(
204
+ seriesModel.get('barMaxWidth'),
205
+ bandWidth
206
+ );
207
+ var barGap = seriesModel.get('barGap');
208
+ var barCategoryGap = seriesModel.get('barCategoryGap');
209
+
210
+ if (barWidth && !stacks[stackId].width) {
211
+ barWidth = Math.min(columnsOnAxis.remainedWidth, barWidth);
212
+ stacks[stackId].width = barWidth;
213
+ columnsOnAxis.remainedWidth -= barWidth;
214
+ }
215
+
216
+ barMaxWidth && (stacks[stackId].maxWidth = barMaxWidth);
217
+ (barGap != null) && (columnsOnAxis.gap = barGap);
218
+ (barCategoryGap != null) && (columnsOnAxis.categoryGap = barCategoryGap);
219
+ });
220
+
221
+
222
+ var result = {};
223
+
224
+ zrUtil.each(columnsMap, function (columnsOnAxis, coordSysName) {
225
+
226
+ result[coordSysName] = {};
227
+
228
+ var stacks = columnsOnAxis.stacks;
229
+ var bandWidth = columnsOnAxis.bandWidth;
230
+ var categoryGap = parsePercent(columnsOnAxis.categoryGap, bandWidth);
231
+ var barGapPercent = parsePercent(columnsOnAxis.gap, 1);
232
+
233
+ var remainedWidth = columnsOnAxis.remainedWidth;
234
+ var autoWidthCount = columnsOnAxis.autoWidthCount;
235
+ var autoWidth = (remainedWidth - categoryGap)
236
+ / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);
237
+ autoWidth = Math.max(autoWidth, 0);
238
+
239
+ // Find if any auto calculated bar exceeded maxBarWidth
240
+ zrUtil.each(stacks, function (column, stack) {
241
+ var maxWidth = column.maxWidth;
242
+ if (maxWidth && maxWidth < autoWidth) {
243
+ maxWidth = Math.min(maxWidth, remainedWidth);
244
+ if (column.width) {
245
+ maxWidth = Math.min(maxWidth, column.width);
246
+ }
247
+ remainedWidth -= maxWidth;
248
+ column.width = maxWidth;
249
+ autoWidthCount--;
250
+ }
251
+ });
252
+
253
+ // Recalculate width again
254
+ autoWidth = (remainedWidth - categoryGap)
255
+ / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);
256
+ autoWidth = Math.max(autoWidth, 0);
257
+
258
+ var widthSum = 0;
259
+ var lastColumn;
260
+ zrUtil.each(stacks, function (column, idx) {
261
+ if (!column.width) {
262
+ column.width = autoWidth;
263
+ }
264
+ lastColumn = column;
265
+ widthSum += column.width * (1 + barGapPercent);
266
+ });
267
+ if (lastColumn) {
268
+ widthSum -= lastColumn.width * barGapPercent;
269
+ }
270
+
271
+ var offset = -widthSum / 2;
272
+ zrUtil.each(stacks, function (column, stackId) {
273
+ result[coordSysName][stackId] = result[coordSysName][stackId] || {
274
+ offset: offset,
275
+ width: column.width
276
+ };
277
+
278
+ offset += column.width * (1 + barGapPercent);
279
+ });
280
+ });
281
+
282
+ return result;
283
+ }
284
+
285
+ module.exports = barLayoutPolar;
286
+
@@ -5,23 +5,29 @@
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
  };