echarts 4.5.0 → 4.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/dist/echarts-en.common.js +1790 -774
- package/dist/echarts-en.common.min.js +1 -1
- package/dist/echarts-en.js +2029 -849
- package/dist/echarts-en.js.map +1 -1
- package/dist/echarts-en.min.js +1 -1
- package/dist/echarts-en.simple.js +1676 -691
- package/dist/echarts-en.simple.min.js +1 -1
- package/dist/echarts.common.js +1790 -774
- package/dist/echarts.common.min.js +1 -1
- package/dist/echarts.js +2029 -849
- package/dist/echarts.js.map +1 -1
- package/dist/echarts.min.js +1 -1
- package/dist/echarts.simple.js +1676 -691
- package/dist/echarts.simple.min.js +1 -1
- package/lib/chart/bar/BarView.js +11 -1
- package/lib/chart/bar/BaseBarSeries.js +3 -1
- package/lib/chart/effectScatter/EffectScatterSeries.js +3 -1
- package/lib/chart/funnel/FunnelSeries.js +15 -5
- package/lib/chart/gauge/GaugeSeries.js +0 -2
- package/lib/chart/graph/GraphSeries.js +9 -4
- package/lib/chart/graph/GraphView.js +28 -8
- package/lib/chart/heatmap/HeatmapView.js +4 -4
- package/lib/chart/helper/createListFromArray.js +14 -8
- package/lib/chart/helper/whiskerBoxCommon.js +22 -16
- package/lib/chart/line/LineSeries.js +3 -1
- package/lib/chart/line/LineView.js +8 -2
- package/lib/chart/map/MapSeries.js +8 -1
- package/lib/chart/pie/PieSeries.js +27 -6
- package/lib/chart/pie/PieView.js +1 -1
- package/lib/chart/pie/labelLayout.js +102 -19
- package/lib/chart/pie/pieLayout.js +19 -7
- package/lib/chart/radar/RadarSeries.js +3 -3
- package/lib/chart/sankey/SankeyView.js +28 -9
- package/lib/chart/scatter/ScatterSeries.js +3 -1
- package/lib/chart/themeRiver/ThemeRiverSeries.js +3 -3
- package/lib/chart/tree/TreeSeries.js +15 -1
- package/lib/component/axis/AngleAxisView.js +64 -7
- package/lib/component/axis/AxisBuilder.js +63 -24
- package/lib/component/axis/CartesianAxisView.js +55 -11
- package/lib/component/axis/RadiusAxisView.js +36 -4
- package/lib/component/dataZoom/SliderZoomView.js +4 -10
- package/lib/component/helper/BrushController.js +33 -43
- package/lib/component/legend/LegendModel.js +3 -3
- package/lib/component/legend/LegendView.js +17 -13
- package/lib/component/toolbox/ToolboxView.js +5 -1
- package/lib/component/toolbox/feature/MagicType.js +19 -14
- package/lib/coord/Axis.js +30 -2
- package/lib/coord/axisDefault.js +21 -2
- package/lib/data/DataDimensionInfo.js +157 -0
- package/lib/data/List.js +25 -19
- package/lib/data/Tree.js +2 -1
- package/lib/data/helper/completeDimensions.js +43 -32
- package/lib/data/helper/createDimensions.js +2 -0
- package/lib/data/helper/sourceHelper.js +214 -114
- package/lib/echarts.js +2 -2
- package/lib/layout/barGrid.js +2 -3
- package/lib/model/Series.js +3 -3
- package/lib/model/referHelper.js +40 -12
- package/lib/scale/Interval.js +87 -2
- package/lib/scale/Log.js +9 -2
- package/lib/scale/helper.js +1 -43
- package/lib/theme/dark.js +3 -0
- package/lib/util/graphic.js +1 -2
- package/lib/visual/LegendVisualProvider.js +75 -0
- package/lib/visual/dataColor.js +2 -12
- package/lib/visual/seriesColor.js +15 -7
- package/map/json/province/tianjin.json +1 -1
- package/package.json +3 -2
- package/src/chart/bar/BarView.js +12 -2
- package/src/chart/bar/BaseBarSeries.js +1 -1
- package/src/chart/effectScatter/EffectScatterSeries.js +1 -1
- package/src/chart/funnel/FunnelSeries.js +11 -4
- package/src/chart/gauge/GaugeSeries.js +0 -1
- package/src/chart/graph/GraphSeries.js +8 -3
- package/src/chart/graph/GraphView.js +26 -8
- package/src/chart/heatmap/HeatmapView.js +4 -4
- package/src/chart/helper/createListFromArray.js +13 -8
- package/src/chart/helper/whiskerBoxCommon.js +21 -16
- package/src/chart/line/LineSeries.js +1 -1
- package/src/chart/line/LineView.js +6 -1
- package/src/chart/map/MapSeries.js +5 -1
- package/src/chart/pie/PieSeries.js +26 -5
- package/src/chart/pie/PieView.js +1 -1
- package/src/chart/pie/labelLayout.js +114 -22
- package/src/chart/pie/pieLayout.js +20 -7
- package/src/chart/radar/RadarSeries.js +5 -3
- package/src/chart/sankey/SankeyView.js +26 -9
- package/src/chart/scatter/ScatterSeries.js +1 -1
- package/src/chart/themeRiver/ThemeRiverSeries.js +4 -3
- package/src/chart/tree/TreeSeries.js +12 -1
- package/src/component/axis/AngleAxisView.js +75 -7
- package/src/component/axis/AxisBuilder.js +78 -33
- package/src/component/axis/CartesianAxisView.js +58 -11
- package/src/component/axis/RadiusAxisView.js +37 -4
- package/src/component/dataZoom/SliderZoomView.js +4 -9
- package/src/component/helper/BrushController.js +40 -47
- package/src/component/legend/LegendModel.js +3 -3
- package/src/component/legend/LegendView.js +18 -12
- package/src/component/toolbox/ToolboxView.js +5 -0
- package/src/component/toolbox/feature/MagicType.js +18 -13
- package/src/coord/Axis.js +29 -2
- package/src/coord/axisDefault.js +25 -1
- package/src/data/DataDimensionInfo.js +135 -0
- package/src/data/List.js +29 -16
- package/src/data/Tree.js +3 -1
- package/src/data/helper/completeDimensions.js +49 -30
- package/src/data/helper/createDimensions.js +2 -0
- package/src/data/helper/sourceHelper.js +216 -124
- package/src/echarts.js +2 -2
- package/src/layout/barGrid.js +6 -3
- package/src/model/Series.js +3 -3
- package/src/model/referHelper.js +34 -11
- package/src/scale/Interval.js +84 -4
- package/src/scale/Log.js +9 -2
- package/src/scale/helper.js +1 -39
- package/src/theme/dark.js +3 -0
- package/src/util/graphic.js +1 -2
- package/src/visual/LegendVisualProvider.js +55 -0
- package/src/visual/dataColor.js +0 -13
- package/src/visual/seriesColor.js +13 -7
- package/theme/azul.js +163 -0
- package/theme/bee-inspired.js +178 -0
- package/theme/blue.js +178 -0
- package/theme/caravan.js +178 -0
- package/theme/carp.js +163 -0
- package/theme/cool.js +180 -0
- package/theme/dark-blue.js +168 -0
- package/theme/dark-bold.js +168 -0
- package/theme/dark-digerati.js +168 -0
- package/theme/dark-fresh-cut.js +168 -0
- package/theme/dark-mushroom.js +168 -0
- package/theme/dark.js +69 -62
- package/theme/eduardo.js +178 -0
- package/theme/forest.js +163 -0
- package/theme/fresh-cut.js +163 -0
- package/theme/fruit.js +178 -0
- package/theme/gray.js +220 -0
- package/theme/green.js +222 -0
- package/theme/helianthus.js +263 -0
- package/theme/infographic.js +72 -57
- package/theme/inspired.js +163 -0
- package/theme/jazz.js +163 -0
- package/theme/london.js +163 -0
- package/theme/macarons.js +80 -57
- package/theme/macarons2.js +251 -0
- package/theme/mint.js +155 -0
- package/theme/red-velvet.js +163 -0
- package/theme/red.js +225 -0
- package/theme/roma.js +55 -22
- package/theme/royal.js +163 -0
- package/theme/sakura.js +140 -0
- package/theme/shine.js +52 -45
- package/theme/tech-blue.js +180 -0
- package/theme/vintage.js +37 -23
|
@@ -27,10 +27,6 @@ var _model = require("../../util/model");
|
|
|
27
27
|
var makeInner = _model.makeInner;
|
|
28
28
|
var getDataItemValue = _model.getDataItemValue;
|
|
29
29
|
|
|
30
|
-
var _referHelper = require("../../model/referHelper");
|
|
31
|
-
|
|
32
|
-
var getCoordSysDefineBySeries = _referHelper.getCoordSysDefineBySeries;
|
|
33
|
-
|
|
34
30
|
var _util = require("zrender/lib/core/util");
|
|
35
31
|
|
|
36
32
|
var createHashMap = _util.createHashMap;
|
|
@@ -74,6 +70,15 @@ var SERIES_LAYOUT_BY_ROW = _sourceType.SERIES_LAYOUT_BY_ROW;
|
|
|
74
70
|
* specific language governing permissions and limitations
|
|
75
71
|
* under the License.
|
|
76
72
|
*/
|
|
73
|
+
// The result of `guessOrdinal`.
|
|
74
|
+
var BE_ORDINAL = {
|
|
75
|
+
Must: 1,
|
|
76
|
+
// Encounter string but not '-' and not number-like.
|
|
77
|
+
Might: 2,
|
|
78
|
+
// Encounter string but number-like.
|
|
79
|
+
Not: 3 // Other cases
|
|
80
|
+
|
|
81
|
+
};
|
|
77
82
|
var inner = makeInner();
|
|
78
83
|
/**
|
|
79
84
|
* @see {module:echarts/data/Source}
|
|
@@ -196,14 +201,7 @@ function prepareSource(seriesModel) {
|
|
|
196
201
|
dimensionsDefine = dimensionsDefine || datasetOption.dimensions;
|
|
197
202
|
}
|
|
198
203
|
|
|
199
|
-
var completeResult = completeBySourceData(data, sourceFormat, seriesLayoutBy, sourceHeader, dimensionsDefine);
|
|
200
|
-
|
|
201
|
-
var encodeDefine = seriesOption.encode;
|
|
202
|
-
|
|
203
|
-
if (!encodeDefine && datasetModel) {
|
|
204
|
-
encodeDefine = makeDefaultEncode(seriesModel, datasetModel, data, sourceFormat, seriesLayoutBy, completeResult);
|
|
205
|
-
}
|
|
206
|
-
|
|
204
|
+
var completeResult = completeBySourceData(data, sourceFormat, seriesLayoutBy, sourceHeader, dimensionsDefine);
|
|
207
205
|
inner(seriesModel).source = new Source({
|
|
208
206
|
data: data,
|
|
209
207
|
fromDataset: fromDataset,
|
|
@@ -212,7 +210,8 @@ function prepareSource(seriesModel) {
|
|
|
212
210
|
dimensionsDefine: completeResult.dimensionsDefine,
|
|
213
211
|
startIndex: completeResult.startIndex,
|
|
214
212
|
dimensionsDetectCount: completeResult.dimensionsDetectCount,
|
|
215
|
-
|
|
213
|
+
// Note: dataset option does not have `encode`.
|
|
214
|
+
encodeDefine: seriesOption.encode
|
|
216
215
|
});
|
|
217
216
|
} // return {startIndex, dimensionsDefine, dimensionsCount}
|
|
218
217
|
|
|
@@ -226,7 +225,6 @@ function completeBySourceData(data, sourceFormat, seriesLayoutBy, sourceHeader,
|
|
|
226
225
|
|
|
227
226
|
var dimensionsDetectCount;
|
|
228
227
|
var startIndex;
|
|
229
|
-
var findPotentialName;
|
|
230
228
|
|
|
231
229
|
if (sourceFormat === SOURCE_FORMAT_ARRAY_ROWS) {
|
|
232
230
|
// Rule: Most of the first line are string: it is header.
|
|
@@ -260,12 +258,10 @@ function completeBySourceData(data, sourceFormat, seriesLayoutBy, sourceHeader,
|
|
|
260
258
|
} else if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS) {
|
|
261
259
|
if (!dimensionsDefine) {
|
|
262
260
|
dimensionsDefine = objectRowsCollectDimensions(data);
|
|
263
|
-
findPotentialName = true;
|
|
264
261
|
}
|
|
265
262
|
} else if (sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) {
|
|
266
263
|
if (!dimensionsDefine) {
|
|
267
264
|
dimensionsDefine = [];
|
|
268
|
-
findPotentialName = true;
|
|
269
265
|
each(data, function (colArr, key) {
|
|
270
266
|
dimensionsDefine.push(key);
|
|
271
267
|
});
|
|
@@ -275,22 +271,10 @@ function completeBySourceData(data, sourceFormat, seriesLayoutBy, sourceHeader,
|
|
|
275
271
|
dimensionsDetectCount = isArray(value0) && value0.length || 1;
|
|
276
272
|
} else if (sourceFormat === SOURCE_FORMAT_TYPED_ARRAY) {}
|
|
277
273
|
|
|
278
|
-
var potentialNameDimIndex;
|
|
279
|
-
|
|
280
|
-
if (findPotentialName) {
|
|
281
|
-
each(dimensionsDefine, function (dim, idx) {
|
|
282
|
-
if ((isObject(dim) ? dim.name : dim) === 'name') {
|
|
283
|
-
potentialNameDimIndex = idx;
|
|
284
|
-
}
|
|
285
|
-
});
|
|
286
|
-
}
|
|
287
|
-
|
|
288
274
|
return {
|
|
289
275
|
startIndex: startIndex,
|
|
290
276
|
dimensionsDefine: normalizeDimensionsDefine(dimensionsDefine),
|
|
291
|
-
dimensionsDetectCount: dimensionsDetectCount
|
|
292
|
-
potentialNameDimIndex: potentialNameDimIndex // TODO: potentialIdDimIdx
|
|
293
|
-
|
|
277
|
+
dimensionsDetectCount: dimensionsDetectCount
|
|
294
278
|
};
|
|
295
279
|
} // Consider dimensions defined like ['A', 'price', 'B', 'price', 'C', 'price'],
|
|
296
280
|
// which is reasonable. But dimension name is duplicated.
|
|
@@ -370,91 +354,191 @@ function objectRowsCollectDimensions(data) {
|
|
|
370
354
|
});
|
|
371
355
|
return dimensions;
|
|
372
356
|
}
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* [The strategy of the arrengment of data dimensions for dataset]:
|
|
360
|
+
* "value way": all axes are non-category axes. So series one by one take
|
|
361
|
+
* several (the number is coordSysDims.length) dimensions from dataset.
|
|
362
|
+
* The result of data arrengment of data dimensions like:
|
|
363
|
+
* | ser0_x | ser0_y | ser1_x | ser1_y | ser2_x | ser2_y |
|
|
364
|
+
* "category way": at least one axis is category axis. So the the first data
|
|
365
|
+
* dimension is always mapped to the first category axis and shared by
|
|
366
|
+
* all of the series. The other data dimensions are taken by series like
|
|
367
|
+
* "value way" does.
|
|
368
|
+
* The result of data arrengment of data dimensions like:
|
|
369
|
+
* | ser_shared_x | ser0_y | ser1_y | ser2_y |
|
|
370
|
+
*
|
|
371
|
+
* @param {Array.<Object|string>} coordDimensions [{name: <string>, type: <string>, dimsDef: <Array>}, ...]
|
|
372
|
+
* @param {module:model/Series} seriesModel
|
|
373
|
+
* @param {module:data/Source} source
|
|
374
|
+
* @return {Object} encode Never be `null/undefined`.
|
|
375
|
+
*/
|
|
376
376
|
|
|
377
377
|
|
|
378
|
-
function
|
|
379
|
-
var
|
|
380
|
-
var
|
|
381
|
-
|
|
378
|
+
function makeSeriesEncodeForAxisCoordSys(coordDimensions, seriesModel, source) {
|
|
379
|
+
var encode = {};
|
|
380
|
+
var datasetModel = getDatasetModel(seriesModel); // Currently only make default when using dataset, util more reqirements occur.
|
|
381
|
+
|
|
382
|
+
if (!datasetModel || !coordDimensions) {
|
|
383
|
+
return encode;
|
|
384
|
+
}
|
|
382
385
|
|
|
383
386
|
var encodeItemName = [];
|
|
384
387
|
var encodeSeriesName = [];
|
|
385
|
-
var
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
if (coordSysDefine && cSeriesMap.get(seriesType) != null) {
|
|
396
|
-
var ecModel = seriesModel.ecModel;
|
|
397
|
-
var datasetMap = inner(ecModel).datasetMap;
|
|
398
|
-
var key = datasetModel.uid + '_' + seriesLayoutBy;
|
|
399
|
-
var datasetRecord = datasetMap.get(key) || datasetMap.set(key, {
|
|
400
|
-
categoryWayDim: 1,
|
|
401
|
-
valueWayDim: 0
|
|
402
|
-
}); // TODO
|
|
403
|
-
// Auto detect first time axis and do arrangement.
|
|
404
|
-
|
|
405
|
-
each(coordSysDefine.coordSysDims, function (coordDim) {
|
|
406
|
-
// In value way.
|
|
407
|
-
if (coordSysDefine.firstCategoryDimIndex == null) {
|
|
408
|
-
var dataDim = datasetRecord.valueWayDim++;
|
|
409
|
-
encode[coordDim] = dataDim; // ??? TODO give a better default series name rule?
|
|
410
|
-
// especially when encode x y specified.
|
|
411
|
-
// consider: when mutiple series share one dimension
|
|
412
|
-
// category axis, series name should better use
|
|
413
|
-
// the other dimsion name. On the other hand, use
|
|
414
|
-
// both dimensions name.
|
|
415
|
-
|
|
416
|
-
encodeSeriesName.push(dataDim); // encodeTooltip.push(dataDim);
|
|
417
|
-
// encodeLabel.push(dataDim);
|
|
418
|
-
} // In category way, category axis.
|
|
419
|
-
else if (coordSysDefine.categoryAxisMap.get(coordDim)) {
|
|
420
|
-
encode[coordDim] = 0;
|
|
421
|
-
encodeItemName.push(0);
|
|
422
|
-
} // In category way, non-category axis.
|
|
423
|
-
else {
|
|
424
|
-
var dataDim = datasetRecord.categoryWayDim++;
|
|
425
|
-
encode[coordDim] = dataDim; // encodeTooltip.push(dataDim);
|
|
426
|
-
// encodeLabel.push(dataDim);
|
|
427
|
-
|
|
428
|
-
encodeSeriesName.push(dataDim);
|
|
429
|
-
}
|
|
388
|
+
var ecModel = seriesModel.ecModel;
|
|
389
|
+
var datasetMap = inner(ecModel).datasetMap;
|
|
390
|
+
var key = datasetModel.uid + '_' + source.seriesLayoutBy;
|
|
391
|
+
var baseCategoryDimIndex;
|
|
392
|
+
var categoryWayValueDimStart;
|
|
393
|
+
coordDimensions = coordDimensions.slice();
|
|
394
|
+
each(coordDimensions, function (coordDimInfo, coordDimIdx) {
|
|
395
|
+
!isObject(coordDimInfo) && (coordDimensions[coordDimIdx] = {
|
|
396
|
+
name: coordDimInfo
|
|
430
397
|
});
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
398
|
+
|
|
399
|
+
if (coordDimInfo.type === 'ordinal' && baseCategoryDimIndex == null) {
|
|
400
|
+
baseCategoryDimIndex = coordDimIdx;
|
|
401
|
+
categoryWayValueDimStart = getDataDimCountOnCoordDim(coordDimensions[coordDimIdx]);
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
encode[coordDimInfo.name] = [];
|
|
405
|
+
});
|
|
406
|
+
var datasetRecord = datasetMap.get(key) || datasetMap.set(key, {
|
|
407
|
+
categoryWayDim: categoryWayValueDimStart,
|
|
408
|
+
valueWayDim: 0
|
|
409
|
+
}); // TODO
|
|
410
|
+
// Auto detect first time axis and do arrangement.
|
|
411
|
+
|
|
412
|
+
each(coordDimensions, function (coordDimInfo, coordDimIdx) {
|
|
413
|
+
var coordDimName = coordDimInfo.name;
|
|
414
|
+
var count = getDataDimCountOnCoordDim(coordDimInfo); // In value way.
|
|
415
|
+
|
|
416
|
+
if (baseCategoryDimIndex == null) {
|
|
417
|
+
var start = datasetRecord.valueWayDim;
|
|
418
|
+
pushDim(encode[coordDimName], start, count);
|
|
419
|
+
pushDim(encodeSeriesName, start, count);
|
|
420
|
+
datasetRecord.valueWayDim += count; // ??? TODO give a better default series name rule?
|
|
421
|
+
// especially when encode x y specified.
|
|
422
|
+
// consider: when mutiple series share one dimension
|
|
423
|
+
// category axis, series name should better use
|
|
424
|
+
// the other dimsion name. On the other hand, use
|
|
425
|
+
// both dimensions name.
|
|
426
|
+
} // In category way, the first category axis.
|
|
427
|
+
else if (baseCategoryDimIndex === coordDimIdx) {
|
|
428
|
+
pushDim(encode[coordDimName], 0, count);
|
|
429
|
+
pushDim(encodeItemName, 0, count);
|
|
430
|
+
} // In category way, the other axis.
|
|
431
|
+
else {
|
|
432
|
+
var start = datasetRecord.categoryWayDim;
|
|
433
|
+
pushDim(encode[coordDimName], start, count);
|
|
434
|
+
pushDim(encodeSeriesName, start, count);
|
|
435
|
+
datasetRecord.categoryWayDim += count;
|
|
441
436
|
}
|
|
437
|
+
});
|
|
438
|
+
|
|
439
|
+
function pushDim(dimIdxArr, idxFrom, idxCount) {
|
|
440
|
+
for (var i = 0; i < idxCount; i++) {
|
|
441
|
+
dimIdxArr.push(idxFrom + i);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
function getDataDimCountOnCoordDim(coordDimInfo) {
|
|
446
|
+
var dimsDef = coordDimInfo.dimsDef;
|
|
447
|
+
return dimsDef ? dimsDef.length : 1;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
encodeItemName.length && (encode.itemName = encodeItemName);
|
|
451
|
+
encodeSeriesName.length && (encode.seriesName = encodeSeriesName);
|
|
452
|
+
return encode;
|
|
453
|
+
}
|
|
454
|
+
/**
|
|
455
|
+
* Work for data like [{name: ..., value: ...}, ...].
|
|
456
|
+
*
|
|
457
|
+
* @param {module:model/Series} seriesModel
|
|
458
|
+
* @param {module:data/Source} source
|
|
459
|
+
* @return {Object} encode Never be `null/undefined`.
|
|
460
|
+
*/
|
|
461
|
+
|
|
462
|
+
|
|
463
|
+
function makeSeriesEncodeForNameBased(seriesModel, source, dimCount) {
|
|
464
|
+
var encode = {};
|
|
465
|
+
var datasetModel = getDatasetModel(seriesModel); // Currently only make default when using dataset, util more reqirements occur.
|
|
466
|
+
|
|
467
|
+
if (!datasetModel) {
|
|
468
|
+
return encode;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
var sourceFormat = source.sourceFormat;
|
|
472
|
+
var dimensionsDefine = source.dimensionsDefine;
|
|
473
|
+
var potentialNameDimIndex;
|
|
474
|
+
|
|
475
|
+
if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS || sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) {
|
|
476
|
+
each(dimensionsDefine, function (dim, idx) {
|
|
477
|
+
if ((isObject(dim) ? dim.name : dim) === 'name') {
|
|
478
|
+
potentialNameDimIndex = idx;
|
|
442
479
|
}
|
|
480
|
+
});
|
|
481
|
+
} // idxResult: {v, n}.
|
|
482
|
+
|
|
483
|
+
|
|
484
|
+
var idxResult = function () {
|
|
485
|
+
var idxRes0 = {};
|
|
486
|
+
var idxRes1 = {};
|
|
487
|
+
var guessRecords = []; // 5 is an experience value.
|
|
443
488
|
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
489
|
+
for (var i = 0, len = Math.min(5, dimCount); i < len; i++) {
|
|
490
|
+
var guessResult = doGuessOrdinal(source.data, sourceFormat, source.seriesLayoutBy, dimensionsDefine, source.startIndex, i);
|
|
491
|
+
guessRecords.push(guessResult);
|
|
492
|
+
var isPureNumber = guessResult === BE_ORDINAL.Not; // [Strategy of idxRes0]: find the first BE_ORDINAL.Not as the value dim,
|
|
493
|
+
// and then find a name dim with the priority:
|
|
494
|
+
// "BE_ORDINAL.Might|BE_ORDINAL.Must" > "other dim" > "the value dim itself".
|
|
448
495
|
|
|
449
|
-
|
|
450
|
-
|
|
496
|
+
if (isPureNumber && idxRes0.v == null && i !== potentialNameDimIndex) {
|
|
497
|
+
idxRes0.v = i;
|
|
451
498
|
}
|
|
452
|
-
} // encodeTooltip.length && (encode.tooltip = encodeTooltip);
|
|
453
|
-
// encodeLabel.length && (encode.label = encodeLabel);
|
|
454
499
|
|
|
500
|
+
if (idxRes0.n == null || idxRes0.n === idxRes0.v || !isPureNumber && guessRecords[idxRes0.n] === BE_ORDINAL.Not) {
|
|
501
|
+
idxRes0.n = i;
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
if (fulfilled(idxRes0) && guessRecords[idxRes0.n] !== BE_ORDINAL.Not) {
|
|
505
|
+
return idxRes0;
|
|
506
|
+
} // [Strategy of idxRes1]: if idxRes0 not satisfied (that is, no BE_ORDINAL.Not),
|
|
507
|
+
// find the first BE_ORDINAL.Might as the value dim,
|
|
508
|
+
// and then find a name dim with the priority:
|
|
509
|
+
// "other dim" > "the value dim itself".
|
|
510
|
+
// That is for backward compat: number-like (e.g., `'3'`, `'55'`) can be
|
|
511
|
+
// treated as number.
|
|
512
|
+
|
|
513
|
+
|
|
514
|
+
if (!isPureNumber) {
|
|
515
|
+
if (guessResult === BE_ORDINAL.Might && idxRes1.v == null && i !== potentialNameDimIndex) {
|
|
516
|
+
idxRes1.v = i;
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
if (idxRes1.n == null || idxRes1.n === idxRes1.v) {
|
|
520
|
+
idxRes1.n = i;
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
function fulfilled(idxResult) {
|
|
526
|
+
return idxResult.v != null && idxResult.n != null;
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
return fulfilled(idxRes0) ? idxRes0 : fulfilled(idxRes1) ? idxRes1 : null;
|
|
530
|
+
}();
|
|
531
|
+
|
|
532
|
+
if (idxResult) {
|
|
533
|
+
encode.value = idxResult.v; // `potentialNameDimIndex` has highest priority.
|
|
534
|
+
|
|
535
|
+
var nameDimIndex = potentialNameDimIndex != null ? potentialNameDimIndex : idxResult.n; // By default, label use itemName in charts.
|
|
536
|
+
// So we dont set encodeLabel here.
|
|
537
|
+
|
|
538
|
+
encode.itemName = [nameDimIndex];
|
|
539
|
+
encode.seriesName = [nameDimIndex];
|
|
540
|
+
}
|
|
455
541
|
|
|
456
|
-
encodeItemName.length && (encode.itemName = encodeItemName);
|
|
457
|
-
encodeSeriesName.length && (encode.seriesName = encodeSeriesName);
|
|
458
542
|
return encode;
|
|
459
543
|
}
|
|
460
544
|
/**
|
|
@@ -482,13 +566,14 @@ function getDatasetModel(seriesModel) {
|
|
|
482
566
|
*
|
|
483
567
|
* @param {module:echars/data/Source} source
|
|
484
568
|
* @param {number} dimIndex
|
|
485
|
-
* @return {
|
|
569
|
+
* @return {BE_ORDINAL} guess result.
|
|
486
570
|
*/
|
|
487
571
|
|
|
488
572
|
|
|
489
573
|
function guessOrdinal(source, dimIndex) {
|
|
490
574
|
return doGuessOrdinal(source.data, source.sourceFormat, source.seriesLayoutBy, source.dimensionsDefine, source.startIndex, dimIndex);
|
|
491
575
|
} // dimIndex may be overflow source data.
|
|
576
|
+
// return {BE_ORDINAL}
|
|
492
577
|
|
|
493
578
|
|
|
494
579
|
function doGuessOrdinal(data, sourceFormat, seriesLayoutBy, dimensionsDefine, startIndex, dimIndex) {
|
|
@@ -497,16 +582,27 @@ function doGuessOrdinal(data, sourceFormat, seriesLayoutBy, dimensionsDefine, st
|
|
|
497
582
|
var maxLoop = 5;
|
|
498
583
|
|
|
499
584
|
if (isTypedArray(data)) {
|
|
500
|
-
return
|
|
585
|
+
return BE_ORDINAL.Not;
|
|
501
586
|
} // When sourceType is 'objectRows' or 'keyedColumns', dimensionsDefine
|
|
502
587
|
// always exists in source.
|
|
503
588
|
|
|
504
589
|
|
|
505
590
|
var dimName;
|
|
591
|
+
var dimType;
|
|
506
592
|
|
|
507
593
|
if (dimensionsDefine) {
|
|
508
|
-
|
|
509
|
-
|
|
594
|
+
var dimDefItem = dimensionsDefine[dimIndex];
|
|
595
|
+
|
|
596
|
+
if (isObject(dimDefItem)) {
|
|
597
|
+
dimName = dimDefItem.name;
|
|
598
|
+
dimType = dimDefItem.type;
|
|
599
|
+
} else if (isString(dimDefItem)) {
|
|
600
|
+
dimName = dimDefItem;
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
if (dimType != null) {
|
|
605
|
+
return dimType === 'ordinal' ? BE_ORDINAL.Must : BE_ORDINAL.Not;
|
|
510
606
|
}
|
|
511
607
|
|
|
512
608
|
if (sourceFormat === SOURCE_FORMAT_ARRAY_ROWS) {
|
|
@@ -529,7 +625,7 @@ function doGuessOrdinal(data, sourceFormat, seriesLayoutBy, dimensionsDefine, st
|
|
|
529
625
|
}
|
|
530
626
|
} else if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS) {
|
|
531
627
|
if (!dimName) {
|
|
532
|
-
return;
|
|
628
|
+
return BE_ORDINAL.Not;
|
|
533
629
|
}
|
|
534
630
|
|
|
535
631
|
for (var i = 0; i < data.length && i < maxLoop; i++) {
|
|
@@ -541,13 +637,13 @@ function doGuessOrdinal(data, sourceFormat, seriesLayoutBy, dimensionsDefine, st
|
|
|
541
637
|
}
|
|
542
638
|
} else if (sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) {
|
|
543
639
|
if (!dimName) {
|
|
544
|
-
return;
|
|
640
|
+
return BE_ORDINAL.Not;
|
|
545
641
|
}
|
|
546
642
|
|
|
547
643
|
var sample = data[dimName];
|
|
548
644
|
|
|
549
645
|
if (!sample || isTypedArray(sample)) {
|
|
550
|
-
return
|
|
646
|
+
return BE_ORDINAL.Not;
|
|
551
647
|
}
|
|
552
648
|
|
|
553
649
|
for (var i = 0; i < sample.length && i < maxLoop; i++) {
|
|
@@ -561,7 +657,7 @@ function doGuessOrdinal(data, sourceFormat, seriesLayoutBy, dimensionsDefine, st
|
|
|
561
657
|
var val = getDataItemValue(item);
|
|
562
658
|
|
|
563
659
|
if (!isArray(val)) {
|
|
564
|
-
return
|
|
660
|
+
return BE_ORDINAL.Not;
|
|
565
661
|
}
|
|
566
662
|
|
|
567
663
|
if ((result = detectValue(val[dimIndex])) != null) {
|
|
@@ -571,20 +667,24 @@ function doGuessOrdinal(data, sourceFormat, seriesLayoutBy, dimensionsDefine, st
|
|
|
571
667
|
}
|
|
572
668
|
|
|
573
669
|
function detectValue(val) {
|
|
574
|
-
// Consider usage convenience, '1', '2' will be treated as "number".
|
|
670
|
+
var beStr = isString(val); // Consider usage convenience, '1', '2' will be treated as "number".
|
|
575
671
|
// `isFinit('')` get `true`.
|
|
672
|
+
|
|
576
673
|
if (val != null && isFinite(val) && val !== '') {
|
|
577
|
-
return
|
|
578
|
-
} else if (
|
|
579
|
-
return
|
|
674
|
+
return beStr ? BE_ORDINAL.Might : BE_ORDINAL.Not;
|
|
675
|
+
} else if (beStr && val !== '-') {
|
|
676
|
+
return BE_ORDINAL.Must;
|
|
580
677
|
}
|
|
581
678
|
}
|
|
582
679
|
|
|
583
|
-
return
|
|
680
|
+
return BE_ORDINAL.Not;
|
|
584
681
|
}
|
|
585
682
|
|
|
683
|
+
exports.BE_ORDINAL = BE_ORDINAL;
|
|
586
684
|
exports.detectSourceFormat = detectSourceFormat;
|
|
587
685
|
exports.getSource = getSource;
|
|
588
686
|
exports.resetSourceDefaulter = resetSourceDefaulter;
|
|
589
687
|
exports.prepareSource = prepareSource;
|
|
688
|
+
exports.makeSeriesEncodeForAxisCoordSys = makeSeriesEncodeForAxisCoordSys;
|
|
689
|
+
exports.makeSeriesEncodeForNameBased = makeSeriesEncodeForNameBased;
|
|
590
690
|
exports.guessOrdinal = guessOrdinal;
|
package/lib/echarts.js
CHANGED
|
@@ -101,9 +101,9 @@ var each = zrUtil.each;
|
|
|
101
101
|
var isFunction = zrUtil.isFunction;
|
|
102
102
|
var isObject = zrUtil.isObject;
|
|
103
103
|
var parseClassType = ComponentModel.parseClassType;
|
|
104
|
-
var version = '4.
|
|
104
|
+
var version = '4.6.0';
|
|
105
105
|
var dependencies = {
|
|
106
|
-
zrender: '4.
|
|
106
|
+
zrender: '4.2.0'
|
|
107
107
|
};
|
|
108
108
|
var TEST_FRAME_REMAIN_TIME = 1;
|
|
109
109
|
var PRIORITY_PROCESSOR_FILTER = 1000;
|
package/lib/layout/barGrid.js
CHANGED
|
@@ -263,7 +263,6 @@ function doCalBarWidthAndOffset(seriesInfoList) {
|
|
|
263
263
|
// will be shared by series. Consider that they have default values,
|
|
264
264
|
// only the attributes set on the last series will work.
|
|
265
265
|
// Do not change this fact unless there will be a break change.
|
|
266
|
-
// TODO
|
|
267
266
|
|
|
268
267
|
var barWidth = seriesInfo.barWidth;
|
|
269
268
|
|
|
@@ -317,7 +316,7 @@ function doCalBarWidthAndOffset(seriesInfoList) {
|
|
|
317
316
|
|
|
318
317
|
if (finalWidth !== autoWidth) {
|
|
319
318
|
column.width = finalWidth;
|
|
320
|
-
remainedWidth -= finalWidth;
|
|
319
|
+
remainedWidth -= finalWidth + barGapPercent * finalWidth;
|
|
321
320
|
autoWidthCount--;
|
|
322
321
|
}
|
|
323
322
|
} else {
|
|
@@ -336,7 +335,7 @@ function doCalBarWidthAndOffset(seriesInfoList) {
|
|
|
336
335
|
}
|
|
337
336
|
|
|
338
337
|
column.width = finalWidth;
|
|
339
|
-
remainedWidth -= finalWidth;
|
|
338
|
+
remainedWidth -= finalWidth + barGapPercent * finalWidth;
|
|
340
339
|
autoWidthCount--;
|
|
341
340
|
}
|
|
342
341
|
}); // Recalculate width again
|
package/lib/model/Series.js
CHANGED
|
@@ -95,11 +95,11 @@ var SeriesModel = ComponentModel.extend({
|
|
|
95
95
|
defaultOption: null,
|
|
96
96
|
|
|
97
97
|
/**
|
|
98
|
-
*
|
|
99
|
-
* @type {
|
|
98
|
+
* legend visual provider to the legend component
|
|
99
|
+
* @type {Object}
|
|
100
100
|
*/
|
|
101
101
|
// PENDING
|
|
102
|
-
|
|
102
|
+
legendVisualProvider: null,
|
|
103
103
|
|
|
104
104
|
/**
|
|
105
105
|
* Access path of color for visual
|
package/lib/model/referHelper.js
CHANGED
|
@@ -56,7 +56,8 @@ var each = _util.each;
|
|
|
56
56
|
// check: "modelHelper" of tooltip and "BrushTargetManager".
|
|
57
57
|
|
|
58
58
|
/**
|
|
59
|
-
* @
|
|
59
|
+
* @class
|
|
60
|
+
* For example:
|
|
60
61
|
* {
|
|
61
62
|
* coordSysName: 'cartesian2d',
|
|
62
63
|
* coordSysDims: ['x', 'y', ...],
|
|
@@ -68,19 +69,46 @@ var each = _util.each;
|
|
|
68
69
|
* x: xAxisModel,
|
|
69
70
|
* y: undefined
|
|
70
71
|
* }),
|
|
71
|
-
* //
|
|
72
|
+
* // The index of the first category axis in `coordSysDims`.
|
|
73
|
+
* // `null/undefined` means no category axis exists.
|
|
72
74
|
* firstCategoryDimIndex: 1,
|
|
73
75
|
* // To replace user specified encode.
|
|
74
76
|
* }
|
|
75
77
|
*/
|
|
76
|
-
function
|
|
78
|
+
function CoordSysInfo(coordSysName) {
|
|
79
|
+
/**
|
|
80
|
+
* @type {string}
|
|
81
|
+
*/
|
|
82
|
+
this.coordSysName = coordSysName;
|
|
83
|
+
/**
|
|
84
|
+
* @type {Array.<string>}
|
|
85
|
+
*/
|
|
86
|
+
|
|
87
|
+
this.coordSysDims = [];
|
|
88
|
+
/**
|
|
89
|
+
* @type {module:zrender/core/util#HashMap}
|
|
90
|
+
*/
|
|
91
|
+
|
|
92
|
+
this.axisMap = createHashMap();
|
|
93
|
+
/**
|
|
94
|
+
* @type {module:zrender/core/util#HashMap}
|
|
95
|
+
*/
|
|
96
|
+
|
|
97
|
+
this.categoryAxisMap = createHashMap();
|
|
98
|
+
/**
|
|
99
|
+
* @type {number}
|
|
100
|
+
*/
|
|
101
|
+
|
|
102
|
+
this.firstCategoryDimIndex = null;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* @return {module:model/referHelper#CoordSysInfo}
|
|
106
|
+
*/
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
function getCoordSysInfoBySeries(seriesModel) {
|
|
77
110
|
var coordSysName = seriesModel.get('coordinateSystem');
|
|
78
|
-
var result =
|
|
79
|
-
coordSysName: coordSysName,
|
|
80
|
-
coordSysDims: [],
|
|
81
|
-
axisMap: createHashMap(),
|
|
82
|
-
categoryAxisMap: createHashMap()
|
|
83
|
-
};
|
|
111
|
+
var result = new CoordSysInfo(coordSysName);
|
|
84
112
|
var fetch = fetchers[coordSysName];
|
|
85
113
|
|
|
86
114
|
if (fetch) {
|
|
@@ -104,7 +132,7 @@ var fetchers = {
|
|
|
104
132
|
|
|
105
133
|
if (isCategory(yAxisModel)) {
|
|
106
134
|
categoryAxisMap.set('y', yAxisModel);
|
|
107
|
-
result.firstCategoryDimIndex = 1;
|
|
135
|
+
result.firstCategoryDimIndex == null & (result.firstCategoryDimIndex = 1);
|
|
108
136
|
}
|
|
109
137
|
},
|
|
110
138
|
singleAxis: function (seriesModel, result, axisMap, categoryAxisMap) {
|
|
@@ -132,7 +160,7 @@ var fetchers = {
|
|
|
132
160
|
|
|
133
161
|
if (isCategory(angleAxisModel)) {
|
|
134
162
|
categoryAxisMap.set('angle', angleAxisModel);
|
|
135
|
-
result.firstCategoryDimIndex = 1;
|
|
163
|
+
result.firstCategoryDimIndex == null && (result.firstCategoryDimIndex = 1);
|
|
136
164
|
}
|
|
137
165
|
},
|
|
138
166
|
geo: function (seriesModel, result, axisMap, categoryAxisMap) {
|
|
@@ -159,4 +187,4 @@ function isCategory(axisModel) {
|
|
|
159
187
|
return axisModel.get('type') === 'category';
|
|
160
188
|
}
|
|
161
189
|
|
|
162
|
-
exports.
|
|
190
|
+
exports.getCoordSysInfoBySeries = getCoordSysInfoBySeries;
|