diff --git a/public/data/custom-aggregate-scatter-bar.js b/public/data/custom-aggregate-scatter-bar.js
new file mode 100644
index 0000000..840a7c2
--- /dev/null
+++ b/public/data/custom-aggregate-scatter-bar.js
@@ -0,0 +1,209 @@
+/*
+title: Aggregate Morphing Between Scatter and Bar
+category: custom
+titleCN: 聚合分割形变（散点图 - 柱状图）
+difficulty: 9
+*/
+
+
+var SCATTER_COLORS = [
+    '#5470c6',
+    '#91cc75',
+    '#fac858',
+    '#ee6666',
+    '#73c0de',
+    '#3ba272',
+    '#fc8452',
+    '#9a60b4',
+    '#ea7ccc'
+];
+var BAR_COLOR = '#37A2DA';
+var ANIMATION_DURATION_UPDATE = 1500;
+
+var RAW_DATA = [[1425139200000,34,0.13,2,"MD","ZD","P0"],[1425225600000,28,0.71,1.5,"MB","ZD","P1"],[1425312000000,23,0.9,2.8,"MA","ZC","P2"],[1425398400000,21,0.58,6,"MB","ZC","P3"],[1425484800000,14,0.1,1.6,"MC","ZA","P4"],[1425571200000,21,0.6,7.7,"MC","ZA","P5"],[1425657600000,23,0.31,2.6,"MC","ZC","P6"],[1425744000000,34,0.74,2.4,"MD","ZE","P7"],[1425830400000,14,0.59,2.3,"MB","ZD","P8"],[1425916800000,18,0.85,5.1,"MB","ZB","P9"],[1426003200000,36,0.96,1.2,"MC","ZC","P10"],[1426089600000,18,0.28,2.5,"MA","ZC","P11"],[1426176000000,20,0.62,6,"MB","ZD","P12"],[1426262400000,32,0.79,1.7,"MB","ZA","P13"],[1426348800000,17,0.58,4.4,"MD","ZB","P14"],[1426435200000,23,0.77,3,"MB","ZA","P15"],[1426521600000,39,0.87,4.6,"MC","ZA","P16"],[1426608000000,15,0.7,6,"MB","ZC","P17"],[1426694400000,21,0.94,2.7,"MB","ZD","P18"],[1426780800000,28,0.48,4.5,"MC","ZC","P19"],[1426867200000,31,0.49,9.8,"MA","ZC","P20"],[1426953600000,27,0.87,7.7,"MB","ZB","P21"],[1427040000000,27,0.82,5.5,"MC","ZB","P22"],[1427126400000,11,0.53,2.7,"MD","ZC","P23"],[1427212800000,13,0.7,7.6,"MB","ZD","P24"],[1427299200000,39,0.99,4.8,"MB","ZD","P25"],[1427385600000,32,0.91,2.1,"MB","ZE","P26"],[1427472000000,20,0.97,5,"MB","ZA","P27"],[1427558400000,36,0.01,8.9,"MB","ZD","P28"],[1427644800000,22,0.08,9.2,"MB","ZE","P29"],[1427731200000,21,0.36,3.1,"MD","ZC","P30"],[1427817600000,11,0.15,5.8,"MD","ZB","P31"],[1427904000000,39,0.02,1.4,"MC","ZD","P32"],[1427990400000,20,0.86,8.7,"MB","ZD","P33"],[1428076800000,23,0.24,7.2,"MD","ZB","P34"],[1428163200000,12,0.06,2,"MD","ZB","P35"],[1428249600000,36,0.42,8.2,"MA","ZB","P36"],[1428336000000,17,0.48,7.5,"MB","ZC","P37"],[1428422400000,19,0.12,6.6,"MB","ZB","P38"],[1428508800000,39,0.58,3.1,"MC","ZE","P39"],[1428595200000,10,0.18,6.6,"MC","ZD","P40"],[1428681600000,22,0.28,2.1,"MB","ZE","P41"],[1428768000000,27,0.33,1.9,"MC","ZB","P42"],[1428854400000,37,0.46,9.4,"MD","ZE","P43"],[1428940800000,18,0.96,5.5,"MB","ZA","P44"],[1429027200000,11,0.61,8.2,"MD","ZC","P45"],[1429113600000,15,0.88,4.6,"MD","ZA","P46"],[1429200000000,38,0.89,7.2,"MD","ZC","P47"],[1429286400000,20,0.39,5.4,"MB","ZB","P48"],[1429372800000,30,0.71,5.5,"MA","ZA","P49"]];
+
+
+
+$.when(
+    $.getScript('https://cdn.jsdelivr.net/npm/echarts-simple-transform@1.0.0/dist/ecSimpleTransform.min.js')
+).done(function () {
+
+    init();
+
+    var currentIsBar = false;
+    setScatterOption();
+
+    setInterval(function () {
+        if (currentIsBar) {
+            currentIsBar = false;
+            setScatterOption();
+        }
+        else {
+            currentIsBar = true;
+            setBarOption();
+        }
+    }, 3000);
+
+});
+
+
+
+function init() {
+
+    echarts.registerTransform(ecSimpleTransform.aggregate);
+
+    var baseOption = {
+        dataset: [{
+            id: 'raw_dataset',
+            dimensions: ['DATE', 'COUNT', 'PRICE', 'WEIGHT', 'M_TAG', 'Z_TAG', 'ID'],
+            source: RAW_DATA
+        }, {
+            id: 'mTagSum_dataset',
+            fromDatasetId: 'raw_dataset',
+            transform: {
+                type: 'ecSimpleTransform:aggregate',
+                config: {
+                    resultDimensions: [
+                        { from: 'COUNT', method: 'sum' },
+                        { from: 'PRICE', method: 'sum' },
+                        { from: 'WEIGHT', method: 'sum' },
+                        { from: 'M_TAG' }
+                    ],
+                    groupBy: 'M_TAG'
+                }
+            }
+        }],
+        tooltip: {}
+    };
+
+    myChart.setOption(baseOption, { lazyUpdate: true });
+}
+
+function setScatterOption() {
+    var option = {
+        grid: {
+            containLabel: true
+        },
+        xAxis: {
+            name: 'PRICE'
+        },
+        yAxis: {
+            name: 'COUNT'
+        },
+        series: {
+            type: 'custom',
+            coordinateSystem: 'cartesian2d',
+            animationDurationUpdate: ANIMATION_DURATION_UPDATE,
+            datasetId: 'raw_dataset',
+            encode: {
+                itemName: 'ID',
+                x: 'PRICE',
+                y: 'COUNT',
+                tooltip: ['PRICE', 'COUNT', 'WEIGHT']
+            },
+            renderItem: function (params, api) {
+                var pos = api.coord([
+                    api.value('PRICE'),
+                    api.value('COUNT')
+                ]);
+                var color = getFromPalette(
+                    api.value('Z_TAG'),
+                    SCATTER_COLORS
+                );
+                return {
+                    type: 'circle',
+                    morph: true,
+                    shape: {
+                        cx: pos[0],
+                        cy: pos[1],
+                        r: 10
+                    },
+                    style: {
+                        fill: color
+                    },
+                    transition: ['shape', 'style']
+                };
+            }
+        }
+    };
+
+    myChart.setOption(option, {
+        replaceMerge: ['xAxis', 'yAxis'],
+        transition: {
+            from: { seriesIndex: 0, dimension: 'M_TAG' },
+            to: { seriesIndex: 0, dimension: 'M_TAG' }
+        }
+    });
+}
+
+function setBarOption() {
+    var option = {
+        grid: {
+            containLabel: true
+        },
+        xAxis: {
+            type: 'category'
+        },
+        yAxis: {
+        },
+        series: {
+            type: 'custom',
+            coordinateSystem: 'cartesian2d',
+            animationDurationUpdate: ANIMATION_DURATION_UPDATE,
+            datasetId: 'mTagSum_dataset',
+            encode: {
+                x: 'M_TAG',
+                y: 'COUNT',
+                tooltip: ['M_TAG', 'COUNT', 'WEIGHT']
+            },
+            renderItem: function (params, api) {
+                var mTagVal = api.value('M_TAG');
+                var ataVal = api.value('COUNT');
+                var tarPos = api.coord([mTagVal, ataVal]);
+                var zeroPos = api.coord([mTagVal, 0]);
+                var size = api.size([mTagVal, ataVal]);
+                var width = size[0] * 0.4;
+                return {
+                    type: 'rect',
+                    morph: true,
+                    shape: {
+                        x: tarPos[0] - width / 2,
+                        y: tarPos[1],
+                        height: zeroPos[1] - tarPos[1],
+                        width: width,
+                    },
+                    style: {
+                        fill: BAR_COLOR
+                    },
+                    transition: ['shape', 'style']
+                };
+            }
+        }
+    };
+
+    myChart.setOption(option, {
+        replaceMerge: ['xAxis', 'yAxis', 'viusalMap'],
+        transition: {
+            from: { seriesIndex: 0, dimension: 'M_TAG' },
+            to: { seriesIndex: 0, dimension: 'M_TAG' }
+        }
+    });
+}
+
+
+function getFromPalette(value, palette) {
+    if (!palette.__colorMap) {
+        palette.__colorMap = {};
+    }
+    if (palette.__colorIdx == null) {
+        palette.__colorIdx = 0;
+    }
+    if (!palette.__colorMap[value]) {
+        palette.__colorMap[value] = palette[palette.__colorIdx];
+        palette.__colorIdx++;
+        if (palette.__colorIdx >= palette.length) {
+            palette.__colorIdx = 0;
+        }
+    }
+    return palette.__colorMap[value];
+}
diff --git a/public/data/custom-aggregate-scatter-cluster.js b/public/data/custom-aggregate-scatter-cluster.js
new file mode 100644
index 0000000..03c3078
--- /dev/null
+++ b/public/data/custom-aggregate-scatter-cluster.js
@@ -0,0 +1,214 @@
+/*
+title: Aggregate Morphing Between Scatter Clustering
+category: custom
+titleCN: 聚合分割形变（散点图聚类）
+difficulty: 10
+*/
+
+
+var CLUSTER_COLORS = [
+    '#cc5664', '#9bd6ec', '#ea946e', '#8acaaa', '#f1ec64', '#ee8686', '#a48dc1', '#5da6bc', '#b9dcae'
+];
+var ANIMATION_DURATION_UPDATE = 1500;
+
+var RAW_DATA = [[1425139200000,34,0.13,2,"MD","ZD","P0"],[1425225600000,28,0.71,1.5,"MB","ZD","P1"],[1425312000000,23,0.9,2.8,"MA","ZC","P2"],[1425398400000,21,0.58,6,"MB","ZC","P3"],[1425484800000,14,0.1,1.6,"MC","ZA","P4"],[1425571200000,21,0.6,7.7,"MC","ZA","P5"],[1425657600000,23,0.31,2.6,"MC","ZC","P6"],[1425744000000,34,0.74,2.4,"MD","ZE","P7"],[1425830400000,14,0.59,2.3,"MB","ZD","P8"],[1425916800000,18,0.85,5.1,"MB","ZB","P9"],[1426003200000,36,0.96,1.2,"MC","ZC","P10"],[1426089600000,18,0.28,2.5,"MA","ZC","P11"],[1426176000000,20,0.62,6,"MB","ZD","P12"],[1426262400000,32,0.79,1.7,"MB","ZA","P13"],[1426348800000,17,0.58,4.4,"MD","ZB","P14"],[1426435200000,23,0.77,3,"MB","ZA","P15"],[1426521600000,39,0.87,4.6,"MC","ZA","P16"],[1426608000000,15,0.7,6,"MB","ZC","P17"],[1426694400000,21,0.94,2.7,"MB","ZD","P18"],[1426780800000,28,0.48,4.5,"MC","ZC","P19"],[1426867200000,31,0.49,9.8,"MA","ZC","P20"],[1426953600000,27,0.87,7.7,"MB","ZB","P21"],[1427040000000,27,0.82,5.5,"MC","ZB","P22"],[1427126400000,11,0.53,2.7,"MD","ZC","P23"],[1427212800000,13,0.7,7.6,"MB","ZD","P24"],[1427299200000,39,0.99,4.8,"MB","ZD","P25"],[1427385600000,32,0.91,2.1,"MB","ZE","P26"],[1427472000000,20,0.97,5,"MB","ZA","P27"],[1427558400000,36,0.01,8.9,"MB","ZD","P28"],[1427644800000,22,0.08,9.2,"MB","ZE","P29"],[1427731200000,21,0.36,3.1,"MD","ZC","P30"],[1427817600000,11,0.15,5.8,"MD","ZB","P31"],[1427904000000,39,0.02,1.4,"MC","ZD","P32"],[1427990400000,20,0.86,8.7,"MB","ZD","P33"],[1428076800000,23,0.24,7.2,"MD","ZB","P34"],[1428163200000,12,0.06,2,"MD","ZB","P35"],[1428249600000,36,0.42,8.2,"MA","ZB","P36"],[1428336000000,17,0.48,7.5,"MB","ZC","P37"],[1428422400000,19,0.12,6.6,"MB","ZB","P38"],[1428508800000,39,0.58,3.1,"MC","ZE","P39"],[1428595200000,10,0.18,6.6,"MC","ZD","P40"],[1428681600000,22,0.28,2.1,"MB","ZE","P41"],[1428768000000,27,0.33,1.9,"MC","ZB","P42"],[1428854400000,37,0.46,9.4,"MD","ZE","P43"],[1428940800000,18,0.96,5.5,"MB","ZA","P44"],[1429027200000,11,0.61,8.2,"MD","ZC","P45"],[1429113600000,15,0.88,4.6,"MD","ZA","P46"],[1429200000000,38,0.89,7.2,"MD","ZC","P47"],[1429286400000,20,0.39,5.4,"MB","ZB","P48"],[1429372800000,30,0.71,5.5,"MA","ZA","P49"]];
+var RAW_DATA_DIMENSIONS = ['DATE', 'COUNT', 'PRICE', 'WEIGHT', 'M_TAG', 'Z_TAG', 'ID'];
+
+
+
+$.when(
+    $.getScript('https://cdn.jsdelivr.net/npm/echarts-stat@1.2.0/dist/ecStat.min.js'),
+    $.getScript('https://cdn.jsdelivr.net/npm/echarts-simple-transform@1.0.0/dist/ecSimpleTransform.min.js')
+).done(function () {
+
+    init();
+
+    var currentIsClustered = false;
+    setRawScatterOption();
+
+    setInterval(function () {
+        if (currentIsClustered) {
+            currentIsClustered = false;
+            setRawScatterOption();
+        }
+        else {
+            currentIsClustered = true;
+            setClusteredScatterOption();
+        }
+    }, 3000);
+
+});
+
+
+
+function init() {
+
+    echarts.registerTransform(ecSimpleTransform.aggregate);
+    echarts.registerTransform(ecStat.transform.clustering);
+
+    var baseOption = {
+        dataset: [{
+            id: 'raw_dataset',
+            dimensions: RAW_DATA_DIMENSIONS,
+            source: RAW_DATA
+        }, {
+            id: 'raw_clustered_dataset',
+            fromDatasetId: 'raw_dataset',
+            transform: {
+                type: 'ecStat:clustering',
+                print: true,
+                config: {
+                    clusterCount: 4,
+                    dimensions: ['COUNT', 'PRICE'],
+                    outputClusterIndexDimension: {
+                        index: RAW_DATA_DIMENSIONS.length,
+                        name: 'CLUSTER_IDX'
+                    },
+                    outputCentroidDimensions: [{
+                        index: RAW_DATA_DIMENSIONS.length + 1,
+                        name: 'CLUSTER_CENTER_COUNT'
+                    }, {
+                        index: RAW_DATA_DIMENSIONS.length + 2,
+                        name: 'CLUSTER_CENTER_PRICE'
+                    }]
+                }
+            }
+        }, {
+            id: 'raw_cluster_centers_dataset',
+            fromDatasetId: 'raw_clustered_dataset',
+            transform: {
+                type: 'ecSimpleTransform:aggregate',
+                print: true,
+                config: {
+                    resultDimensions: [
+                        { from: 'COUNT', method: 'count' },
+                        { from: 'CLUSTER_CENTER_COUNT', method: 'first' },
+                        { from: 'CLUSTER_CENTER_PRICE', method: 'first' },
+                        { from: 'CLUSTER_IDX' }
+                    ],
+                    groupBy: 'CLUSTER_IDX'
+                }
+            }
+        }],
+        tooltip: {}
+    };
+
+    myChart.setOption(baseOption, { lazyUpdate: true });
+}
+
+function setRawScatterOption() {
+    var option = {
+        grid: {
+            containLabel: true
+        },
+        xAxis: {
+            name: 'PRICE'
+        },
+        yAxis: {
+            name: 'COUNT'
+        },
+        series: {
+            type: 'custom',
+            coordinateSystem: 'cartesian2d',
+            animationDurationUpdate: ANIMATION_DURATION_UPDATE,
+            datasetId: 'raw_clustered_dataset',
+            encode: {
+                itemName: 'ID',
+                x: 'PRICE',
+                y: 'COUNT',
+                tooltip: ['PRICE', 'COUNT', 'WEIGHT']
+            },
+            renderItem: function (params, api) {
+                var pos = api.coord([
+                    api.value('PRICE'),
+                    api.value('COUNT')
+                ]);
+                return {
+                    type: 'circle',
+                    morph: true,
+                    shape: {
+                        cx: pos[0],
+                        cy: pos[1],
+                        r: 10
+                    },
+                    style: {
+                        fill: '#5470c6'
+                    },
+                    transition: ['shape', 'style']
+                };
+            }
+        }
+    };
+
+    myChart.setOption(option, {
+        replaceMerge: ['xAxis', 'yAxis'],
+        transition: {
+            from: { seriesIndex: 0, dimension: 'CLUSTER_IDX' },
+            to: { seriesIndex: 0, dimension: 'CLUSTER_IDX', dividingMethod: 'duplicate' }
+        }
+    });
+}
+
+function setClusteredScatterOption() {
+    var option = {
+        grid: {
+            containLabel: true
+        },
+        xAxis: {
+            name: 'PRICE'
+        },
+        yAxis: {
+            name: 'COUNT'
+        },
+        series: {
+            type: 'custom',
+            coordinateSystem: 'cartesian2d',
+            animationDurationUpdate: ANIMATION_DURATION_UPDATE,
+            datasetId: 'raw_cluster_centers_dataset',
+            encode: {
+                x: 'CLUSTER_CENTER_PRICE',
+                y: 'CLUSTER_CENTER_COUNT',
+                tooltip: ['CLUSTER_CENTER_PRICE', 'CLUSTER_CENTER_COUNT']
+            },
+            renderItem: function (params, api) {
+                var context = params.context;
+                if (!context.layout) {
+                    context.layout = true;
+                    context.totalCount = 0;
+                    for (var i = 0; i < params.dataInsideLength; i++) {
+                        context.totalCount += api.value('COUNT', i);
+                    }
+                }
+
+                var pos = api.coord([
+                    api.value('CLUSTER_CENTER_PRICE'),
+                    api.value('CLUSTER_CENTER_COUNT')
+                ]);
+                var count = api.value('COUNT');
+                var radius = count / context.totalCount * 100 + 10;
+                return {
+                    type: 'circle',
+                    morph: true,
+                    shape: {
+                        cx: pos[0],
+                        cy: pos[1],
+                        r: radius,
+                    },
+                    style: {
+                        // fill: CONTENT_COLOR,
+                        fill: CLUSTER_COLORS[params.dataIndex]
+                    },
+                    transition: ['shape', 'style']
+                };
+            }
+        }
+    };
+
+    myChart.setOption(option, {
+        replaceMerge: ['xAxis', 'yAxis'],
+        transition: {
+            from: { seriesIndex: 0, dimension: 'CLUSTER_IDX' },
+            to: { seriesIndex: 0, dimension: 'CLUSTER_IDX', dividingMethod: 'duplicate' }
+        }
+    });
+}
diff --git a/public/data/custom-aggregate-scatter-pie.js b/public/data/custom-aggregate-scatter-pie.js
new file mode 100644
index 0000000..6c7a155
--- /dev/null
+++ b/public/data/custom-aggregate-scatter-pie.js
@@ -0,0 +1,189 @@
+/*
+title: Aggregate Morphing Between Scatter and Pie
+category: custom
+titleCN: 聚合分割形变（散点图 - 饼图）
+difficulty: 9
+*/
+
+
+var PIE_COLORS = [
+    '#e06343', '#37a354', '#b55dba', '#b5bd48', '#8378EA', '#96BFFF'
+];
+var ANIMATION_DURATION_UPDATE = 1500;
+
+var RAW_DATA = [[1425139200000,34,0.13,2,"MD","ZD","P0"],[1425225600000,28,0.71,1.5,"MB","ZD","P1"],[1425312000000,23,0.9,2.8,"MA","ZC","P2"],[1425398400000,21,0.58,6,"MB","ZC","P3"],[1425484800000,14,0.1,1.6,"MC","ZA","P4"],[1425571200000,21,0.6,7.7,"MC","ZA","P5"],[1425657600000,23,0.31,2.6,"MC","ZC","P6"],[1425744000000,34,0.74,2.4,"MD","ZE","P7"],[1425830400000,14,0.59,2.3,"MB","ZD","P8"],[1425916800000,18,0.85,5.1,"MB","ZB","P9"],[1426003200000,36,0.96,1.2,"MC","ZC","P10"],[1426089600000,18,0.28,2.5,"MA","ZC","P11"],[1426176000000,20,0.62,6,"MB","ZD","P12"],[1426262400000,32,0.79,1.7,"MB","ZA","P13"],[1426348800000,17,0.58,4.4,"MD","ZB","P14"],[1426435200000,23,0.77,3,"MB","ZA","P15"],[1426521600000,39,0.87,4.6,"MC","ZA","P16"],[1426608000000,15,0.7,6,"MB","ZC","P17"],[1426694400000,21,0.94,2.7,"MB","ZD","P18"],[1426780800000,28,0.48,4.5,"MC","ZC","P19"],[1426867200000,31,0.49,9.8,"MA","ZC","P20"],[1426953600000,27,0.87,7.7,"MB","ZB","P21"],[1427040000000,27,0.82,5.5,"MC","ZB","P22"],[1427126400000,11,0.53,2.7,"MD","ZC","P23"],[1427212800000,13,0.7,7.6,"MB","ZD","P24"],[1427299200000,39,0.99,4.8,"MB","ZD","P25"],[1427385600000,32,0.91,2.1,"MB","ZE","P26"],[1427472000000,20,0.97,5,"MB","ZA","P27"],[1427558400000,36,0.01,8.9,"MB","ZD","P28"],[1427644800000,22,0.08,9.2,"MB","ZE","P29"],[1427731200000,21,0.36,3.1,"MD","ZC","P30"],[1427817600000,11,0.15,5.8,"MD","ZB","P31"],[1427904000000,39,0.02,1.4,"MC","ZD","P32"],[1427990400000,20,0.86,8.7,"MB","ZD","P33"],[1428076800000,23,0.24,7.2,"MD","ZB","P34"],[1428163200000,12,0.06,2,"MD","ZB","P35"],[1428249600000,36,0.42,8.2,"MA","ZB","P36"],[1428336000000,17,0.48,7.5,"MB","ZC","P37"],[1428422400000,19,0.12,6.6,"MB","ZB","P38"],[1428508800000,39,0.58,3.1,"MC","ZE","P39"],[1428595200000,10,0.18,6.6,"MC","ZD","P40"],[1428681600000,22,0.28,2.1,"MB","ZE","P41"],[1428768000000,27,0.33,1.9,"MC","ZB","P42"],[1428854400000,37,0.46,9.4,"MD","ZE","P43"],[1428940800000,18,0.96,5.5,"MB","ZA","P44"],[1429027200000,11,0.61,8.2,"MD","ZC","P45"],[1429113600000,15,0.88,4.6,"MD","ZA","P46"],[1429200000000,38,0.89,7.2,"MD","ZC","P47"],[1429286400000,20,0.39,5.4,"MB","ZB","P48"],[1429372800000,30,0.71,5.5,"MA","ZA","P49"]];
+
+
+
+$.when(
+    $.getScript('https://cdn.jsdelivr.net/npm/echarts-simple-transform@1.0.0/dist/ecSimpleTransform.min.js')
+).done(function () {
+
+    init();
+
+    var currentIsPie = false;
+    setScatterOption();
+
+    setInterval(function () {
+        if (currentIsPie) {
+            currentIsPie = false;
+            setScatterOption();
+        }
+        else {
+            currentIsPie = true;
+            setPieOption();
+        }
+    }, 3000);
+
+});
+
+
+
+function init() {
+
+    echarts.registerTransform(ecSimpleTransform.aggregate);
+
+    var baseOption = {
+        dataset: [{
+            id: 'raw_dataset',
+            dimensions: ['DATE', 'COUNT', 'PRICE', 'WEIGHT', 'M_TAG', 'Z_TAG', 'ID'],
+            source: RAW_DATA
+        }, {
+            id: 'mTagSum_dataset',
+            fromDatasetId: 'raw_dataset',
+            transform: {
+                type: 'ecSimpleTransform:aggregate',
+                config: {
+                    resultDimensions: [
+                        { from: 'COUNT', method: 'sum' },
+                        { from: 'PRICE', method: 'sum' },
+                        { from: 'WEIGHT', method: 'sum' },
+                        { from: 'M_TAG' }
+                    ],
+                    groupBy: 'M_TAG'
+                }
+            }
+        }],
+        tooltip: {}
+    };
+
+    myChart.setOption(baseOption, { lazyUpdate: true });
+}
+
+function setScatterOption() {
+    var option = {
+        grid: {
+            containLabel: true
+        },
+        xAxis: {
+            name: 'PRICE'
+        },
+        yAxis: {
+            name: 'COUNT'
+        },
+        series: {
+            type: 'custom',
+            coordinateSystem: 'cartesian2d',
+            animationDurationUpdate: ANIMATION_DURATION_UPDATE,
+            datasetId: 'raw_dataset',
+            encode: {
+                itemName: 'ID',
+                x: 'PRICE',
+                y: 'COUNT',
+                tooltip: ['PRICE', 'COUNT', 'WEIGHT']
+            },
+            renderItem: function (params, api) {
+                var pos = api.coord([
+                    api.value('PRICE'),
+                    api.value('COUNT')
+                ]);
+                return {
+                    type: 'circle',
+                    morph: true,
+                    shape: {
+                        cx: pos[0],
+                        cy: pos[1],
+                        r: 10
+                    },
+                    style: {
+                        fill: '#5470c6'
+                    },
+                    transition: ['shape', 'style']
+                };
+            }
+        }
+    };
+
+    myChart.setOption(option, {
+        replaceMerge: ['xAxis', 'yAxis'],
+        transition: {
+            from: { seriesIndex: 0, dimension: 'M_TAG' },
+            to: { seriesIndex: 0, dimension: 'M_TAG' }
+        }
+    });
+}
+
+function setPieOption() {
+    var option = {
+        series: {
+            type: 'custom',
+            coordinateSystem: 'none',
+            animationDurationUpdate: ANIMATION_DURATION_UPDATE,
+            datasetId: 'mTagSum_dataset',
+            encode: {
+                itemName: 'ID',
+                value: 'COUNT',
+                tooltip: ['PRICE', 'COUNT', 'WEIGHT']
+            },
+            renderItem: function (params, api) {
+                var context = params.context;
+                if (!context.layout) {
+                    context.layout = true;
+                    var totalValue = 0;
+                    for (var i = 0; i < params.dataInsideLength; i++) {
+                        totalValue += api.value('COUNT', i);
+                    }
+                    var angles = [];
+                    var colors = [];
+                    var currentAngle = -Math.PI / 2;
+                    for (var i = 0; i < params.dataInsideLength; i++) {
+                        colors.push(PIE_COLORS[i]);
+                        var angle = api.value('COUNT', i) / totalValue * Math.PI * 2;
+                        angles.push([currentAngle, angle + currentAngle - 0.01]);
+                        currentAngle += angle;
+                    }
+                    context.angles = angles;
+                    context.colors = colors;
+                }
+
+                var width = myChart.getWidth();
+                var height = myChart.getHeight();
+                return {
+                    type: 'sector',
+                    morph: true,
+                    shape: {
+                        cx: width / 2,
+                        cy: height / 2,
+                        r: Math.min(width, height) / 3,
+                        r0: Math.min(width, height) / 5,
+                        startAngle: context.angles[params.dataIndex][0],
+                        endAngle: context.angles[params.dataIndex][1],
+                        clockwise: true
+                    },
+                    style: {
+                        fill: context.colors[params.dataIndex]
+                    },
+                    transition: ['shape', 'style']
+                };
+            }
+        }
+    };
+
+    myChart.setOption(option, {
+        replaceMerge: ['xAxis', 'yAxis', 'viusalMap'],
+        transition: {
+            from: { seriesIndex: 0, dimension: 'M_TAG' },
+            to: { seriesIndex: 0, dimension: 'M_TAG' }
+        }
+    });
+}
