echarts 4.5.0-rc.2 → 4.8.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/.github/pull_request_template.md +66 -0
- package/.github/workflows/nodejs.yml +12 -2
- package/CONTRIBUTING.md +16 -160
- package/NOTICE +1 -1
- package/README.md +2 -2
- package/dist/echarts-en.common.js +2808 -1188
- package/dist/echarts-en.common.min.js +1 -1
- package/dist/echarts-en.js +3559 -1437
- package/dist/echarts-en.js.map +1 -1
- package/dist/echarts-en.min.js +1 -1
- package/dist/echarts-en.simple.js +2453 -1002
- package/dist/echarts-en.simple.min.js +1 -1
- package/dist/echarts.common.js +2782 -1188
- package/dist/echarts.common.min.js +1 -1
- package/dist/echarts.js +3533 -1437
- package/dist/echarts.js.map +1 -1
- package/dist/echarts.min.js +1 -1
- package/dist/echarts.simple.js +2427 -1002
- package/dist/echarts.simple.min.js +1 -1
- package/dist/extension/bmap.js +336 -2
- package/dist/extension/bmap.js.map +1 -1
- package/dist/extension/bmap.min.js +1 -1
- package/extension/bmap/BMapView.js +6 -2
- package/extension-src/bmap/BMapView.js +3 -2
- package/lib/chart/bar/BarSeries.js +14 -1
- package/lib/chart/bar/BarView.js +161 -16
- package/lib/chart/bar/BaseBarSeries.js +3 -1
- package/lib/chart/candlestick/candlestickVisual.js +1 -1
- package/lib/chart/effectScatter/EffectScatterSeries.js +3 -1
- package/lib/chart/funnel/FunnelSeries.js +13 -5
- package/lib/chart/gauge/GaugeSeries.js +0 -2
- package/lib/chart/graph/GraphSeries.js +11 -5
- package/lib/chart/graph/GraphView.js +30 -12
- package/lib/chart/heatmap/HeatmapView.js +4 -4
- package/lib/chart/helper/EffectLine.js +23 -1
- package/lib/chart/helper/EffectSymbol.js +2 -1
- package/lib/chart/helper/Line.js +94 -33
- package/lib/chart/helper/LineDraw.js +5 -1
- package/lib/chart/helper/Symbol.js +1 -2
- package/lib/chart/helper/createClipPathFromCoordSys.js +4 -1
- package/lib/chart/helper/createListFromArray.js +14 -8
- package/lib/chart/helper/createRenderPlanner.js +6 -3
- package/lib/chart/helper/whiskerBoxCommon.js +22 -16
- package/lib/chart/line/LineSeries.js +3 -1
- package/lib/chart/line/LineView.js +41 -2
- package/lib/chart/map/MapSeries.js +11 -3
- package/lib/chart/pie/PieSeries.js +27 -6
- package/lib/chart/pie/PieView.js +22 -15
- package/lib/chart/pie/labelLayout.js +102 -19
- package/lib/chart/pie/pieLayout.js +19 -7
- package/lib/chart/radar/RadarSeries.js +23 -3
- package/lib/chart/sankey/SankeySeries.js +13 -1
- package/lib/chart/sankey/SankeyView.js +70 -32
- package/lib/chart/sankey/sankeyLayout.js +22 -3
- package/lib/chart/scatter/ScatterSeries.js +3 -1
- package/lib/chart/sunburst/SunburstPiece.js +1 -0
- package/lib/chart/sunburst/SunburstSeries.js +12 -7
- package/lib/chart/sunburst/SunburstView.js +5 -1
- package/lib/chart/themeRiver/ThemeRiverSeries.js +3 -3
- package/lib/chart/tree/TreeSeries.js +20 -3
- package/lib/chart/tree/TreeView.js +151 -25
- package/lib/chart/treemap/TreemapSeries.js +15 -3
- package/lib/chart/treemap/TreemapView.js +80 -38
- package/lib/component/axis/AngleAxisView.js +64 -7
- package/lib/component/axis/AxisBuilder.js +62 -24
- package/lib/component/axis/CartesianAxisView.js +52 -85
- package/lib/component/axis/RadiusAxisView.js +36 -4
- package/lib/component/axis/SingleAxisView.js +21 -6
- package/lib/component/axis/axisSplitHelper.js +132 -0
- package/lib/component/brush/BrushView.js +11 -1
- package/lib/component/brush/visualEncoding.js +13 -2
- package/lib/component/dataZoom/SliderZoomView.js +4 -10
- package/lib/component/helper/BrushController.js +33 -43
- package/lib/component/helper/MapDraw.js +30 -4
- package/lib/component/legend/LegendModel.js +3 -3
- package/lib/component/legend/LegendView.js +17 -13
- package/lib/component/legend/ScrollableLegendView.js +18 -18
- package/lib/component/marker/MarkLineModel.js +2 -1
- package/lib/component/marker/markerHelper.js +7 -4
- package/lib/component/title.js +6 -2
- package/lib/component/toolbox/ToolboxView.js +5 -1
- package/lib/component/toolbox/feature/MagicType.js +20 -14
- package/lib/component/toolbox/feature/SaveAsImage.js +2 -1
- package/lib/component/tooltip/TooltipContent.js +60 -23
- package/lib/component/tooltip/TooltipView.js +7 -8
- package/lib/component/visualMap/PiecewiseModel.js +3 -6
- package/lib/coord/Axis.js +30 -2
- package/lib/coord/View.js +9 -0
- package/lib/coord/axisDefault.js +21 -2
- package/lib/coord/axisHelper.js +22 -16
- package/lib/coord/calendar/Calendar.js +8 -4
- package/lib/coord/geo/geoJSONLoader.js +3 -2
- package/lib/coord/geo/geoSourceManager.js +3 -2
- package/lib/coord/geo/parseGeoJson.js +3 -2
- package/lib/coord/radar/Radar.js +5 -5
- package/lib/data/DataDimensionInfo.js +157 -0
- package/lib/data/List.js +25 -19
- package/lib/data/Tree.js +9 -19
- 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 +57 -34
- package/lib/langEN.js +26 -0
- package/lib/layout/barGrid.js +19 -13
- package/lib/layout/barPolar.js +0 -5
- package/lib/loading/default.js +43 -27
- package/lib/model/Series.js +4 -4
- 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/stream/Scheduler.js +9 -1
- package/lib/theme/dark.js +3 -0
- package/lib/util/format.js +19 -2
- package/lib/util/graphic.js +14 -12
- package/lib/visual/LegendVisualProvider.js +75 -0
- package/lib/visual/dataColor.js +2 -12
- package/lib/visual/seriesColor.js +15 -7
- package/lib/visual/symbol.js +12 -2
- package/map/js/china.js +1 -1
- package/map/js/province/chongqing.js +1 -1
- package/map/js/province/gansu.js +2 -2
- package/map/js/province/tianjin.js +1 -28
- package/map/json/china.json +1 -1
- package/map/json/province/chongqing.json +1 -1
- package/map/json/province/tianjin.json +1 -1
- package/package.json +11 -6
- package/src/chart/bar/BarSeries.js +15 -1
- package/src/chart/bar/BarView.js +162 -15
- package/src/chart/bar/BaseBarSeries.js +1 -1
- package/src/chart/candlestick/candlestickVisual.js +1 -1
- package/src/chart/effectScatter/EffectScatterSeries.js +1 -1
- package/src/chart/funnel/FunnelSeries.js +10 -4
- package/src/chart/gauge/GaugeSeries.js +0 -1
- package/src/chart/graph/GraphSeries.js +10 -4
- package/src/chart/graph/GraphView.js +28 -10
- package/src/chart/heatmap/HeatmapView.js +4 -4
- package/src/chart/helper/EffectLine.js +23 -1
- package/src/chart/helper/EffectSymbol.js +2 -1
- package/src/chart/helper/Line.js +84 -26
- package/src/chart/helper/LineDraw.js +5 -1
- package/src/chart/helper/Symbol.js +2 -2
- package/src/chart/helper/createClipPathFromCoordSys.js +4 -0
- package/src/chart/helper/createListFromArray.js +13 -8
- package/src/chart/helper/createRenderPlanner.js +5 -2
- package/src/chart/helper/whiskerBoxCommon.js +21 -16
- package/src/chart/line/LineSeries.js +1 -1
- package/src/chart/line/LineView.js +45 -1
- package/src/chart/map/MapSeries.js +8 -3
- package/src/chart/pie/PieSeries.js +26 -5
- package/src/chart/pie/PieView.js +20 -15
- package/src/chart/pie/labelLayout.js +114 -22
- package/src/chart/pie/pieLayout.js +20 -7
- package/src/chart/radar/RadarSeries.js +27 -3
- package/src/chart/sankey/SankeySeries.js +12 -1
- package/src/chart/sankey/SankeyView.js +75 -30
- package/src/chart/sankey/sankeyLayout.js +25 -5
- package/src/chart/scatter/ScatterSeries.js +1 -1
- package/src/chart/sunburst/SunburstPiece.js +2 -0
- package/src/chart/sunburst/SunburstSeries.js +12 -7
- package/src/chart/sunburst/SunburstView.js +2 -1
- package/src/chart/themeRiver/ThemeRiverSeries.js +4 -3
- package/src/chart/tree/TreeSeries.js +19 -6
- package/src/chart/tree/TreeView.js +155 -22
- package/src/chart/treemap/TreemapSeries.js +15 -5
- package/src/chart/treemap/TreemapView.js +77 -41
- package/src/component/axis/AngleAxisView.js +75 -7
- package/src/component/axis/AxisBuilder.js +77 -32
- package/src/component/axis/CartesianAxisView.js +47 -83
- package/src/component/axis/RadiusAxisView.js +37 -4
- package/src/component/axis/SingleAxisView.js +21 -4
- package/src/component/axis/axisSplitHelper.js +114 -0
- package/src/component/brush/BrushView.js +8 -1
- package/src/component/brush/visualEncoding.js +6 -3
- package/src/component/dataZoom/SliderZoomView.js +4 -9
- package/src/component/helper/BrushController.js +40 -47
- package/src/component/helper/MapDraw.js +27 -4
- package/src/component/legend/LegendModel.js +3 -3
- package/src/component/legend/LegendView.js +18 -12
- package/src/component/legend/ScrollableLegendView.js +18 -16
- package/src/component/marker/MarkLineModel.js +2 -1
- package/src/component/marker/markerHelper.js +8 -5
- package/src/component/title.js +3 -2
- package/src/component/toolbox/ToolboxView.js +5 -0
- package/src/component/toolbox/feature/MagicType.js +19 -13
- package/src/component/toolbox/feature/SaveAsImage.js +2 -1
- package/src/component/tooltip/TooltipContent.js +59 -22
- package/src/component/tooltip/TooltipView.js +10 -8
- package/src/component/visualMap/PiecewiseModel.js +5 -9
- package/src/coord/Axis.js +29 -2
- package/src/coord/View.js +10 -1
- package/src/coord/axisDefault.js +25 -1
- package/src/coord/axisHelper.js +26 -19
- package/src/coord/calendar/Calendar.js +12 -5
- package/src/coord/geo/geoJSONLoader.js +3 -2
- package/src/coord/geo/geoSourceManager.js +3 -2
- package/src/coord/geo/parseGeoJson.js +3 -2
- package/src/coord/radar/Radar.js +6 -8
- package/src/data/DataDimensionInfo.js +135 -0
- package/src/data/List.js +29 -16
- package/src/data/Tree.js +12 -17
- 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 +60 -36
- package/src/langEN.js +26 -0
- package/src/layout/barGrid.js +22 -10
- package/src/layout/barPolar.js +0 -4
- package/src/loading/default.js +46 -34
- package/src/model/Series.js +4 -4
- 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/stream/Scheduler.js +8 -0
- package/src/theme/dark.js +3 -0
- package/src/util/format.js +17 -1
- package/src/util/graphic.js +13 -11
- package/src/visual/LegendVisualProvider.js +55 -0
- package/src/visual/dataColor.js +0 -13
- package/src/visual/seriesColor.js +13 -7
- package/src/visual/symbol.js +11 -2
- 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.8.0';
|
|
105
105
|
var dependencies = {
|
|
106
|
-
zrender: '4.1
|
|
106
|
+
zrender: '4.3.1'
|
|
107
107
|
};
|
|
108
108
|
var TEST_FRAME_REMAIN_TIME = 1;
|
|
109
109
|
var PRIORITY_PROCESSOR_FILTER = 1000;
|
|
@@ -498,7 +498,7 @@ echartsProto.getRenderedCanvas = function (opts) {
|
|
|
498
498
|
*/
|
|
499
499
|
|
|
500
500
|
|
|
501
|
-
echartsProto.
|
|
501
|
+
echartsProto.getSvgDataURL = function () {
|
|
502
502
|
if (!env.svgSupported) {
|
|
503
503
|
return;
|
|
504
504
|
}
|
|
@@ -509,7 +509,7 @@ echartsProto.getSvgDataUrl = function () {
|
|
|
509
509
|
zrUtil.each(list, function (el) {
|
|
510
510
|
el.stopAnimation(true);
|
|
511
511
|
});
|
|
512
|
-
return zr.painter.
|
|
512
|
+
return zr.painter.toDataURL();
|
|
513
513
|
};
|
|
514
514
|
/**
|
|
515
515
|
* @return {string}
|
|
@@ -544,7 +544,7 @@ echartsProto.getDataURL = function (opts) {
|
|
|
544
544
|
}
|
|
545
545
|
});
|
|
546
546
|
});
|
|
547
|
-
var url = this._zr.painter.getType() === 'svg' ? this.
|
|
547
|
+
var url = this._zr.painter.getType() === 'svg' ? this.getSvgDataURL() : this.getRenderedCanvas(opts).toDataURL('image/' + (opts && opts.type || 'png'));
|
|
548
548
|
each(excludesComponentViews, function (view) {
|
|
549
549
|
view.group.ignore = false;
|
|
550
550
|
});
|
|
@@ -569,6 +569,7 @@ echartsProto.getConnectedDataURL = function (opts) {
|
|
|
569
569
|
return;
|
|
570
570
|
}
|
|
571
571
|
|
|
572
|
+
var isSvg = opts.type === 'svg';
|
|
572
573
|
var groupId = this.group;
|
|
573
574
|
var mathMin = Math.min;
|
|
574
575
|
var mathMax = Math.max;
|
|
@@ -583,7 +584,7 @@ echartsProto.getConnectedDataURL = function (opts) {
|
|
|
583
584
|
var dpr = opts && opts.pixelRatio || 1;
|
|
584
585
|
zrUtil.each(instances, function (chart, id) {
|
|
585
586
|
if (chart.group === groupId) {
|
|
586
|
-
var canvas = chart.getRenderedCanvas(zrUtil.clone(opts));
|
|
587
|
+
var canvas = isSvg ? chart.getZr().painter.getSvgDom().innerHTML : chart.getRenderedCanvas(zrUtil.clone(opts));
|
|
587
588
|
var boundingRect = chart.getDom().getBoundingClientRect();
|
|
588
589
|
left = mathMin(boundingRect.left, left);
|
|
589
590
|
top = mathMin(boundingRect.top, top);
|
|
@@ -603,36 +604,58 @@ echartsProto.getConnectedDataURL = function (opts) {
|
|
|
603
604
|
var width = right - left;
|
|
604
605
|
var height = bottom - top;
|
|
605
606
|
var targetCanvas = zrUtil.createCanvas();
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
x: 0,
|
|
614
|
-
y: 0,
|
|
615
|
-
width: width,
|
|
616
|
-
height: height
|
|
617
|
-
},
|
|
618
|
-
style: {
|
|
619
|
-
fill: opts.connectedBackgroundColor
|
|
620
|
-
}
|
|
621
|
-
}));
|
|
622
|
-
}
|
|
607
|
+
var zr = zrender.init(targetCanvas, {
|
|
608
|
+
renderer: isSvg ? 'svg' : 'canvas'
|
|
609
|
+
});
|
|
610
|
+
zr.resize({
|
|
611
|
+
width: width,
|
|
612
|
+
height: height
|
|
613
|
+
});
|
|
623
614
|
|
|
624
|
-
|
|
625
|
-
var
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
}
|
|
615
|
+
if (isSvg) {
|
|
616
|
+
var content = '';
|
|
617
|
+
each(canvasList, function (item) {
|
|
618
|
+
var x = item.left - left;
|
|
619
|
+
var y = item.top - top;
|
|
620
|
+
content += '<g transform="translate(' + x + ',' + y + ')">' + item.dom + '</g>';
|
|
631
621
|
});
|
|
632
|
-
zr.
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
622
|
+
zr.painter.getSvgRoot().innerHTML = content;
|
|
623
|
+
|
|
624
|
+
if (opts.connectedBackgroundColor) {
|
|
625
|
+
zr.painter.setBackgroundColor(opts.connectedBackgroundColor);
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
zr.refreshImmediately();
|
|
629
|
+
return zr.painter.toDataURL();
|
|
630
|
+
} else {
|
|
631
|
+
// Background between the charts
|
|
632
|
+
if (opts.connectedBackgroundColor) {
|
|
633
|
+
zr.add(new graphic.Rect({
|
|
634
|
+
shape: {
|
|
635
|
+
x: 0,
|
|
636
|
+
y: 0,
|
|
637
|
+
width: width,
|
|
638
|
+
height: height
|
|
639
|
+
},
|
|
640
|
+
style: {
|
|
641
|
+
fill: opts.connectedBackgroundColor
|
|
642
|
+
}
|
|
643
|
+
}));
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
each(canvasList, function (item) {
|
|
647
|
+
var img = new graphic.Image({
|
|
648
|
+
style: {
|
|
649
|
+
x: item.left * dpr - left,
|
|
650
|
+
y: item.top * dpr - top,
|
|
651
|
+
image: item.dom
|
|
652
|
+
}
|
|
653
|
+
});
|
|
654
|
+
zr.add(img);
|
|
655
|
+
});
|
|
656
|
+
zr.refreshImmediately();
|
|
657
|
+
return targetCanvas.toDataURL('image/' + (opts && opts.type || 'png'));
|
|
658
|
+
}
|
|
636
659
|
} else {
|
|
637
660
|
return this.getDataURL(opts);
|
|
638
661
|
}
|
package/lib/langEN.js
CHANGED
|
@@ -84,6 +84,32 @@ var _default = {
|
|
|
84
84
|
lang: ['Right Click to Save Image']
|
|
85
85
|
}
|
|
86
86
|
},
|
|
87
|
+
series: {
|
|
88
|
+
typeNames: {
|
|
89
|
+
pie: 'Pie chart',
|
|
90
|
+
bar: 'Bar chart',
|
|
91
|
+
line: 'Line chart',
|
|
92
|
+
scatter: 'Scatter plot',
|
|
93
|
+
effectScatter: 'Ripple scatter plot',
|
|
94
|
+
radar: 'Radar chart',
|
|
95
|
+
tree: 'Tree',
|
|
96
|
+
treemap: 'Treemap',
|
|
97
|
+
boxplot: 'Boxplot',
|
|
98
|
+
candlestick: 'Candlestick',
|
|
99
|
+
k: 'K line chart',
|
|
100
|
+
heatmap: 'Heat map',
|
|
101
|
+
map: 'Map',
|
|
102
|
+
parallel: 'Parallel coordinate map',
|
|
103
|
+
lines: 'Line graph',
|
|
104
|
+
graph: 'Relationship graph',
|
|
105
|
+
sankey: 'Sankey diagram',
|
|
106
|
+
funnel: 'Funnel chart',
|
|
107
|
+
gauge: 'Guage',
|
|
108
|
+
pictorialBar: 'Pictorial bar',
|
|
109
|
+
themeRiver: 'Theme River Map',
|
|
110
|
+
sunburst: 'Sunburst'
|
|
111
|
+
}
|
|
112
|
+
},
|
|
87
113
|
aria: {
|
|
88
114
|
general: {
|
|
89
115
|
withTitle: 'This is a chart about "{title}"',
|