| <!DOCTYPE html> | 
 | <!-- | 
 | Licensed to the Apache Software Foundation (ASF) under one | 
 | or more contributor license agreements.  See the NOTICE file | 
 | distributed with this work for additional information | 
 | regarding copyright ownership.  The ASF licenses this file | 
 | to you under the Apache License, Version 2.0 (the | 
 | "License"); you may not use this file except in compliance | 
 | with the License.  You may obtain a copy of the License at | 
 |  | 
 |    http://www.apache.org/licenses/LICENSE-2.0 | 
 |  | 
 | Unless required by applicable law or agreed to in writing, | 
 | software distributed under the License is distributed on an | 
 | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
 | KIND, either express or implied.  See the License for the | 
 | specific language governing permissions and limitations | 
 | under the License. | 
 | --> | 
 |  | 
 | <html> | 
 |     <head> | 
 |         <meta charset='utf-8'> | 
 |         <meta name="viewport" content="width=device-width, initial-scale=1" /> | 
 |         <script src="lib/simpleRequire.js"></script> | 
 |         <script src="lib/config.js"></script> | 
 |         <script src='lib/jquery.min.js'></script> | 
 |         <script src="../dist/echarts.js"></script> | 
 |         <script src="lib/testHelper.js"></script> | 
 |         <link rel="stylesheet" href="lib/reset.css" /> | 
 |     </head> | 
 |     <body> | 
 |         <style> | 
 |         </style> | 
 |  | 
 |         <div id="main0"></div> | 
 |  | 
 |  | 
 |  | 
 |         <script> | 
 |  | 
 |             function initRawData(count) { | 
 |                 var M_TAG_LIST = ['MA', 'MB', 'MC', 'MD']; | 
 |                 var Z_TAG_LIST = ['ZA', 'ZB', 'ZC', 'ZD', 'ZE']; | 
 |                 var data = []; | 
 |                 var currDate = +new Date(2015, 2, 1); | 
 |                 var ONE_DAY = 3600 * 24 * 1000; | 
 |                 for (var i = 0; i < count; i++, currDate += ONE_DAY) { | 
 |                     data.push([ | 
 |                         currDate, | 
 |                         makeRandomValue([10, 40], 0), | 
 |                         makeRandomValue([0.01, 0.99], 2), | 
 |                         makeRandomValue([1, 10], 1), | 
 |                         // makeRandomValue([1000, 9000], 0), | 
 |                         // makeRandomValue([1000, 9000], 0), | 
 |                         // makeRandomValue([10, 90], 0), | 
 |                         M_TAG_LIST[makeRandomValue([0, M_TAG_LIST.length - 1], 0)], | 
 |                         Z_TAG_LIST[makeRandomValue([0, Z_TAG_LIST.length - 1], 0)], | 
 |                         'P' + i, | 
 |                     ]); | 
 |                 } | 
 |  | 
 |                 function makeRandomValue(range, precision) { | 
 |                     return +( | 
 |                         Math.random() * (range[1] - range[0]) + range[0] | 
 |                     ).toFixed(precision); | 
 |                 } | 
 |  | 
 |                 return data; | 
 |             } | 
 |         </script> | 
 |  | 
 |  | 
 |  | 
 |         <script> | 
 |  | 
 |             require([ | 
 |                 'echarts', 'ecStat', 'ecSimpleTransform', 'ecSimpleOptionPlayer' | 
 |             ], function (echarts, ecStat, ecSimpleTransform, ecSimpleOptionPlayer) { | 
 |  | 
 |                 echarts.registerTransform(ecSimpleTransform.aggregate); | 
 |                 echarts.registerTransform(ecStat.transform.clustering); | 
 |  | 
 |  | 
 |                 const PIE_COLORS = [ | 
 |                     '#e06343', '#37a354', '#b55dba', '#b5bd48', '#8378EA', '#96BFFF' | 
 |                 ]; | 
 |                 const CLUSTER_COLORS = [ | 
 |                     '#cc5664', '#9bd6ec', '#ea946e', '#8acaaa', '#f1ec64', '#ee8686', '#a48dc1', '#5da6bc', '#b9dcae' | 
 |                 ]; | 
 |                 const Z_TAG_COLORS = [ | 
 |                     '#c23531', '#2f4554', '#61a0a8', '#d48265', '#91c7ae', '#749f83', | 
 |                     '#ca8622', '#bda29a', '#6e7074', '#546570', '#c4ccd3' | 
 |                 ]; | 
 |                 const Z_TAG_COLORS_2 = [ | 
 |                     '#51689b', '#ce5c5c', '#fbc357', '#8fbf8f', '#659d84', '#fb8e6a', '#c77288', '#786090', | 
 |                     '#91c4c5', '#6890ba' | 
 |                 ]; | 
 |                 const SYMBOL_PATHS = [ | 
 |                     'path://m67.25,28.9c27.42,-69.1 134.84,0 0,88.85c-134.84,-88.85 -27.42,-157.96 0,-88.85z', | 
 |                     'path://M16 0c-8.837 0-16 7.163-16 16s7.163 16 16 16 16-7.163 16-16-7.163-16-16-16zM22 8c1.105 0 2 1.343 2 3s-0.895 3-2 3-2-1.343-2-3 0.895-3 2-3zM10 8c1.105 0 2 1.343 2 3s-0.895 3-2 3-2-1.343-2-3 0.895-3 2-3zM16 28c-5.215 0-9.544-4.371-10-9.947 2.93 1.691 6.377 2.658 10 2.658s7.070-0.963 10-2.654c-0.455 5.576-4.785 9.942-10 9.942z', | 
 |                     'path://M16 0c-8.837 0-16 7.163-16 16s7.163 16 16 16c8.837 0 16-7.163 16-16s-7.163-16-16-16zM22 7.375c1.999 0 3.625 1.626 3.625 3.625 0 0.199-0.017 0.402-0.051 0.604-0.051 0.301-0.311 0.521-0.616 0.521s-0.566-0.22-0.616-0.522c-0.192-1.146-1.177-1.666-2.341-1.666s-2.149 0.52-2.341 1.666c-0.050 0.301-0.311 0.522-0.616 0.522-0 0 0 0-0 0-0.305 0-0.566-0.22-0.616-0.521-0.034-0.201-0.051-0.404-0.051-0.604 0-1.999 1.626-3.625 3.625-3.625zM10 7.375c1.999 0 3.625 1.626 3.625 3.625 0 0.199-0.017 0.402-0.051 0.604-0.051 0.301-0.311 0.521-0.616 0.521s-0.566-0.22-0.616-0.522c-0.193-1.146-1.177-1.666-2.341-1.666s-2.149 0.52-2.341 1.666c-0.051 0.301-0.311 0.522-0.616 0.522 0 0 0 0 0 0-0.305 0-0.566-0.22-0.616-0.521-0.034-0.201-0.051-0.404-0.051-0.604 0-1.999 1.626-3.625 3.625-3.625zM6 18h6v7.745c-3.44-0.894-6-4.035-6-7.745zM14 26v-8h4v8h-4zM20 25.745v-7.745h6c0 3.71-2.559 6.851-6 7.745z', | 
 |                     'path://M23.6 2c4.637 0 8.4 3.764 8.4 8.401 0 9.132-9.87 11.964-15.999 21.232-6.485-9.326-16.001-11.799-16.001-21.232 0-4.637 3.763-8.401 8.4-8.401 1.886 0 3.625 0.86 5.025 2.12l-2.425 3.88 7 4-4 10 11-12-7-4 1.934-2.901c1.107-0.68 2.35-1.099 3.665-1.099z', | 
 |                     'path://M237.062,81.761L237.062,81.761c-12.144-14.24-25.701-20.1-40.68-19.072 c-10.843,0.747-20.938,5.154-30.257,13.127c-9.51-5.843-19.8-9.227-30.859-10.366c0.521-3.197,1.46-6.306,2.85-9.363 c3.458-7.038,8.907-12.741,16.331-17.296c-5.609-3.384-11.227-6.799-16.854-10.279c-16.257,8.104-25.06,20.601-26.463,38.417 c-7.599,1.705-14.685,4.486-21.247,8.437c-9.164-7.677-18.996-11.917-29.496-12.632c-14.819-0.998-28.467,4.787-40.938,18.827 C6.445,96.182,0,114.867,0,136.242c-0.007,6.371,0.674,12.646,2.053,18.738c4.593,22.785,15.398,41.367,32.558,55.344 c15.43,12.773,29.901,18.023,43.362,16.981c7.074-0.561,13.624-3.977,19.685-10.192c10.534,5.49,20.391,8.217,29.561,8.203 c9.856-0.012,20.236-2.953,31.125-8.898c6.227,6.692,12.966,10.346,20.211,10.933c13.795,1.073,28.614-4.111,44.377-16.84 c17.49-14.104,28.043-32.79,31.796-55.485c0.836-5.624,1.272-11.292,1.272-16.966C255.998,115.814,249.707,96.601,237.062,81.761z  M54.795,97.7l40.661,14.496c-4.402,8.811-10.766,13.219-19.06,13.219c-2.542,0-4.917-0.419-7.122-1.274 C58.103,118.38,53.263,109.572,54.795,97.7z M150.613,185.396l-9.156-8.389l-7.619,12.951c-3.391,0.341-6.615,0.514-9.665,0.514 c-4.401,0-8.635-0.263-12.708-0.777l-8.634-14.973l-9.151,9.909c-4.91-2.717-9.15-5.856-12.708-9.413 c-8.81-8.295-13.384-17.959-13.727-28.97c2.877,1.692,7.427,3.461,13.675,5.308l10.636,13.629l9.44-9.852 c4.734,0.702,9.234,1.12,13.466,1.275l10.689,11.498l9.671-11.949c3.559-0.173,7.285-0.515,11.182-1.01l9.924,10.159l10.933-14.227 c5.931-1.351,11.196-2.798,15.771-4.323C179.747,163.538,169.068,176.414,150.613,185.396z M175.258,124.907 c-2.209,0.849-4.66,1.273-7.369,1.273c-8.134,0-14.489-4.415-19.052-13.224l40.905-14.477 C191.105,110.331,186.273,119.141,175.258,124.907z', | 
 |                     'path://M237.062,81.761L237.062,81.761c-12.144-14.24-25.701-20.1-40.68-19.072 c-10.843,0.747-20.938,5.154-30.257,13.127c-9.51-5.843-19.8-9.227-30.859-10.366c0.521-3.197,1.46-6.306,2.85-9.363 c3.458-7.038,8.907-12.741,16.331-17.296c-5.609-3.384-11.227-6.799-16.854-10.279c-16.257,8.104-25.06,20.601-26.463,38.417 c-7.599,1.705-14.685,4.486-21.247,8.437c-9.164-7.677-18.996-11.917-29.496-12.632c-14.819-0.998-28.467,4.787-40.938,18.827 C6.445,96.182,0,114.867,0,136.242c-0.007,6.371,0.674,12.646,2.053,18.738c4.593,22.785,15.398,41.367,32.558,55.344 c15.43,12.773,29.901,18.023,43.362,16.981c7.074-0.561,13.624-3.977,19.685-10.192c10.534,5.49,20.391,8.217,29.561,8.203 c9.856-0.012,20.236-2.953,31.125-8.898c6.227,6.692,12.966,10.346,20.211,10.933c13.795,1.073,28.614-4.111,44.377-16.84 c17.49-14.104,28.043-32.79,31.796-55.485c0.836-5.624,1.272-11.292,1.272-16.966C255.998,115.814,249.707,96.601,237.062,81.761z  M54.795,97.7l40.661,14.496c-4.402,8.811-10.766,13.219-19.06,13.219c-2.542,0-4.917-0.419-7.122-1.274 C58.103,118.38,53.263,109.572,54.795,97.7z M150.613,185.396l-9.156-8.389l-7.619,12.951c-3.391,0.341-6.615,0.514-9.665,0.514 c-4.401,0-8.635-0.263-12.708-0.777l-8.634-14.973l-9.151,9.909c-4.91-2.717-9.15-5.856-12.708-9.413 c-8.81-8.295-13.384-17.959-13.727-28.97c2.877,1.692,7.427,3.461,13.675,5.308l10.636,13.629l9.44-9.852 c4.734,0.702,9.234,1.12,13.466,1.275l10.689,11.498l9.671-11.949c3.559-0.173,7.285-0.515,11.182-1.01l9.924,10.159l10.933-14.227 c5.931-1.351,11.196-2.798,15.771-4.323C179.747,163.538,169.068,176.414,150.613,185.396z M175.258,124.907 c-2.209,0.849-4.66,1.273-7.369,1.273c-8.134,0-14.489-4.415-19.052-13.224l40.905-14.477 C191.105,110.331,186.273,119.141,175.258,124.907z' | 
 |                 ]; | 
 |                 var CONTENT_COLOR = '#37A2DA'; | 
 |                 var ANIMATION_DURATION_UPDATE = 1500; | 
 |  | 
 |  | 
 |                 // var rawData = initRawData(COUNT); | 
 |                 // console.log(JSON.stringify(rawData)); | 
 |                 var rawData = [[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', 'ATA', 'STE', 'CTZ', 'M_TAG', 'Z_TAG', 'ID']; | 
 |                 var M_TAG_SUM_DIMENSIONS = ['ATA', 'STE', 'CTZ', 'M_TAG']; | 
 |                 var RAW_CLUSTER_DIMENSIONS = ['DATE', 'ATA', 'STE', 'CTZ', 'M_TAG', 'Z_TAG', 'ID', 'CLUSTER_IDX', 'CLUSTER_CENTER_ATA', 'CLUSTER_CENTER_STE']; | 
 |                 var RAW_CLUSTER_CENTERS_DIMENSIONS = ['COUNT', 'CLUSTER_IDX', 'CLUSTER_CENTER_ATA', 'CLUSTER_CENTER_STE']; | 
 |  | 
 |  | 
 |                 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]; | 
 |                 } | 
 |  | 
 |  | 
 |  | 
 |                 var baseOption = { | 
 |                     dataset: [{ | 
 |                         id: 'raw', | 
 |                         dimensions: RAW_DATA_DIMENSIONS, | 
 |                         source: rawData | 
 |                     }, { | 
 |                         id: 'mTagSum', | 
 |                         fromDatasetId: 'raw', | 
 |                         transform: { | 
 |                             type: 'ecSimpleTransform:aggregate', | 
 |                             config: { | 
 |                                 resultDimensions: [ | 
 |                                     { from: 'ATA', method: 'sum' }, | 
 |                                     { from: 'STE', method: 'sum' }, | 
 |                                     { from: 'CTZ', method: 'sum' }, | 
 |                                     { from: 'M_TAG' } | 
 |                                 ], | 
 |                                 groupBy: 'M_TAG' | 
 |                             } | 
 |                         } | 
 |                     }, { | 
 |                         id: 'rawClusters', | 
 |                         fromDatasetId: 'raw', | 
 |                         transform: { | 
 |                             type: 'ecStat:clustering', | 
 |                             print: true, | 
 |                             config: { | 
 |                                 clusterCount: 4, | 
 |                                 dimensions: ['ATA', 'STE'], | 
 |                                 outputClusterIndexDimension: { | 
 |                                     index: RAW_CLUSTER_DIMENSIONS.indexOf('CLUSTER_IDX'), | 
 |                                     name: 'CLUSTER_IDX' | 
 |                                 }, | 
 |                                 outputCentroidDimensions: [{ | 
 |                                     index: RAW_CLUSTER_DIMENSIONS.indexOf('CLUSTER_CENTER_ATA'), | 
 |                                     name: 'CLUSTER_CENTER_ATA' | 
 |                                 }, { | 
 |                                     index: RAW_CLUSTER_DIMENSIONS.indexOf('CLUSTER_CENTER_STE'), | 
 |                                     name: 'CLUSTER_CENTER_STE' | 
 |                                 }] | 
 |                             } | 
 |                         } | 
 |                     }, { | 
 |                         id: 'rawClusterCenters', | 
 |                         fromDatasetId: 'rawClusters', | 
 |                         transform: { | 
 |                             type: 'ecSimpleTransform:aggregate', | 
 |                             print: true, | 
 |                             config: { | 
 |                                 resultDimensions: [ | 
 |                                     { name: 'COUNT', from: 'ATA', method: 'count' }, | 
 |                                     { from: 'CLUSTER_CENTER_ATA' }, | 
 |                                     { from: 'CLUSTER_CENTER_STE' }, | 
 |                                     { from: 'CLUSTER_IDX' } | 
 |                                 ], | 
 |                                 groupBy: 'CLUSTER_IDX' | 
 |                             } | 
 |                         } | 
 |                     }], | 
 |                     tooltip: {} | 
 |                 }; | 
 |  | 
 |  | 
 |                 var AXIS_STYLE = { | 
 |                     splitLine: { | 
 |                         lineStyle: { | 
 |                             color: '#333' | 
 |                         } | 
 |                     }, | 
 |                     axisLine: { | 
 |                         lineStyle: { | 
 |                             color: '#777' | 
 |                         } | 
 |                     }, | 
 |                     axisLabel: { | 
 |                         color: '#999', | 
 |                         fontSize: 20, | 
 |                         fontFamily: 'Lato' | 
 |                     } | 
 |                 }; | 
 |                 var BG_COLOR = '#000'; | 
 |  | 
 |  | 
 |  | 
 |                 function makeScatterOptionCreator(renderItem) { | 
 |                     return function () { | 
 |                         var datasetId = 'rawClusters'; | 
 |                         return { | 
 |                             datasetId: datasetId, | 
 |                             option: { | 
 |                                 backgroundColor: BG_COLOR, | 
 |                                 grid: { | 
 |                                     containLabel: true | 
 |                                 }, | 
 |                                 xAxis: { | 
 |                                     name: 'STE', | 
 |                                     ...AXIS_STYLE | 
 |                                 }, | 
 |                                 yAxis: { | 
 |                                     name: 'ATA', | 
 |                                     ...AXIS_STYLE | 
 |                                 }, | 
 |                                 dataZoom: [{ | 
 |                                     type: 'slider', | 
 |                                 }, { | 
 |                                     type: 'inside' | 
 |                                 }], | 
 |                                 series: { | 
 |                                     type: 'custom', | 
 |                                     coordinateSystem: 'cartesian2d', | 
 |                                     animationDurationUpdate: ANIMATION_DURATION_UPDATE, | 
 |                                     datasetId: datasetId, | 
 |                                     universalTransition: { | 
 |                                         enabled: true | 
 |                                     }, | 
 |                                     encode: { | 
 |                                         itemName: 'ID', | 
 |                                         x: 'STE', | 
 |                                         y: 'ATA', | 
 |                                         tooltip: ['STE', 'ATA'] | 
 |                                     }, | 
 |                                     renderItem: renderItem | 
 |                                 } | 
 |                             } | 
 |                         } | 
 |                     }; | 
 |                 } | 
 |  | 
 |  | 
 |                 var optionCreators = { | 
 |  | 
 |                     'Scatter_circle_ATA_STE': makeScatterOptionCreator( | 
 |                         function (params, api) { | 
 |                             var pos = api.coord([ | 
 |                                 api.value('STE'), | 
 |                                 api.value('ATA') | 
 |                             ]); | 
 |                             var zTagVal = api.value('Z_TAG'); | 
 |                             var color = getFromPalette(zTagVal, Z_TAG_COLORS); | 
 |                             var symbolPath = getFromPalette(zTagVal, SYMBOL_PATHS); | 
 |                             return { | 
 |                                 type: 'circle', | 
 |                                 shape: { | 
 |                                     cx: pos[0], | 
 |                                     cy: pos[1], | 
 |                                     r: 10 | 
 |                                 }, | 
 |                                 style: { | 
 |                                     fill: color | 
 |                                 }, | 
 |                                 transition: ['shape', 'style'] | 
 |                             }; | 
 |                         } | 
 |                     ), | 
 |  | 
 |                     'Scatter_singleSVG_ATA_STE': makeScatterOptionCreator( | 
 |                         function (params, api) { | 
 |                             var pos = api.coord([ | 
 |                                 api.value('STE'), | 
 |                                 api.value('ATA') | 
 |                             ]); | 
 |                             var zTagVal = api.value('Z_TAG'); | 
 |                             var color = getFromPalette(zTagVal, Z_TAG_COLORS); | 
 |                             var symbolPath = getFromPalette(zTagVal, SYMBOL_PATHS); | 
 |                             return { | 
 |                                 type: 'path', | 
 |                                 x: pos[0], | 
 |                                 y: pos[1], | 
 |                                 shape: { | 
 |                                     pathData: symbolPath, | 
 |                                     width: 40, | 
 |                                     height: 40 | 
 |                                 }, | 
 |                                 style: { | 
 |                                     fill: color | 
 |                                 }, | 
 |                                 transition: ['style'] | 
 |                             }; | 
 |                         } | 
 |                     ), | 
 |  | 
 |                     'Scatter_groupShape_ATA_STE': makeScatterOptionCreator( | 
 |                         function (params, api) { | 
 |                             var pos = api.coord([ | 
 |                                 api.value('STE'), | 
 |                                 api.value('ATA') | 
 |                             ]); | 
 |                             var zTagVal = api.value('Z_TAG'); | 
 |                             var color1 = getFromPalette(zTagVal, Z_TAG_COLORS); | 
 |                             var color2 = getFromPalette(zTagVal, Z_TAG_COLORS_2); | 
 |                             return { | 
 |                                 type: 'group', | 
 |                                 x: pos[0], | 
 |                                 y: pos[1], | 
 |                                 children: [{ | 
 |                                     type: 'polygon', | 
 |                                     shape: { | 
 |                                         points: [ | 
 |                                             [-40, -2], | 
 |                                             [40, -2], | 
 |                                             [0, -35] | 
 |                                         ] | 
 |                                     }, | 
 |                                     style: { | 
 |                                         fill: color1, | 
 |                                         stroke: '#333', | 
 |                                         lineWidth: 1 | 
 |                                     }, | 
 |                                     transition: ['shape', 'style'] | 
 |                                 }, { | 
 |                                     type: 'rect', | 
 |                                     shape: { | 
 |                                         x: -20, | 
 |                                         y: 0, | 
 |                                         width: 40, | 
 |                                         height: 30 | 
 |                                     }, | 
 |                                     style: { | 
 |                                         fill: color2, | 
 |                                         stroke: '#333', | 
 |                                         lineWidth: 1 | 
 |                                     }, | 
 |                                     transition: ['shape', 'style'] | 
 |                                 }] | 
 |                             }; | 
 |                         } | 
 |                     ), | 
 |  | 
 |                     'Bar_mSum_ATA': function () { | 
 |                         var datasetId = 'mTagSum' | 
 |                         return { | 
 |                             datasetId: datasetId, | 
 |                             option: { | 
 |                                 backgroundColor: BG_COLOR, | 
 |                                 grid: { | 
 |                                     containLabel: true | 
 |                                 }, | 
 |                                 xAxis: { | 
 |                                     type: 'category', | 
 |                                     ...AXIS_STYLE | 
 |                                 }, | 
 |                                 yAxis: { | 
 |                                     ...AXIS_STYLE | 
 |                                 }, | 
 |                                 dataZoom: [{ | 
 |                                     type: 'slider', | 
 |                                 }, { | 
 |                                     type: 'inside' | 
 |                                 }], | 
 |                                 series: { | 
 |                                     type: 'custom', | 
 |                                     coordinateSystem: 'cartesian2d', | 
 |                                     animationDurationUpdate: ANIMATION_DURATION_UPDATE, | 
 |                                     datasetId: datasetId, | 
 |                                     universalTransition: { | 
 |                                         enabled: true | 
 |                                     }, | 
 |                                     encode: { | 
 |                                         x: 'M_TAG', | 
 |                                         y: 'ATA', | 
 |                                         itemGroupId: 'M_TAG', | 
 |                                         tooltip: ['M_TAG', 'ATA'] | 
 |                                     }, | 
 |                                     renderItem: function (params, api) { | 
 |                                         var mTagVal = api.value('M_TAG'); | 
 |                                         var ataVal = api.value('ATA'); | 
 |                                         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', | 
 |                                             shape: { | 
 |                                                 x: tarPos[0] - width / 2, | 
 |                                                 y: tarPos[1], | 
 |                                                 height: zeroPos[1] - tarPos[1], | 
 |                                                 width: width, | 
 |                                             }, | 
 |                                             style: { | 
 |                                                 fill: CONTENT_COLOR, | 
 |                                                 stroke: '#555', | 
 |                                                 lineWidth: 0 | 
 |                                             }, | 
 |                                             transition: ['shape', 'style'] | 
 |                                         }; | 
 |                                     } | 
 |                                 } | 
 |                             } | 
 |                         }; | 
 |                     }, | 
 |  | 
 |                     'Pie_mSum_ATA': function () { | 
 |                         var datasetId = 'mTagSum'; | 
 |                         return { | 
 |                             datasetId: datasetId, | 
 |                             option: { | 
 |                                 backgroundColor: BG_COLOR, | 
 |                                 series: { | 
 |                                     type: 'custom', | 
 |                                     coordinateSystem: 'none', | 
 |                                     animationDurationUpdate: ANIMATION_DURATION_UPDATE, | 
 |                                     datasetId: datasetId, | 
 |                                     encode: { | 
 |                                         itemName: 'M_TAG', | 
 |                                         value: 'ATA', | 
 |                                         tooltip: 'ATA' | 
 |                                     }, | 
 |                                     universalTransition: { | 
 |                                         enabled: true | 
 |                                     }, | 
 |                                     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('ATA', 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('ATA', i) / totalValue * Math.PI * 2; | 
 |                                                 angles.push([currentAngle, angle + currentAngle - 0.01]); | 
 |                                                 currentAngle += angle; | 
 |                                             } | 
 |                                             context.angles = angles; | 
 |                                             context.colors = colors; | 
 |                                         } | 
 |  | 
 |                                         var width = chart.getWidth(); | 
 |                                         var height = chart.getHeight(); | 
 |                                         return { | 
 |                                             type: 'sector', | 
 |                                             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: CONTENT_COLOR, | 
 |                                                 fill: context.colors[params.dataIndex], | 
 |                                                 stroke: '#555', | 
 |                                                 lineWidth: 0, | 
 |                                                 strokeNoScale: true | 
 |                                             }, | 
 |                                             transition: ['shape', 'style'] | 
 |                                         }; | 
 |                                     } | 
 |                                 } | 
 |                             } | 
 |                         }; | 
 |                     }, | 
 |  | 
 |                     'Scatter_ATA_STE_Cluster_Center': function () { | 
 |                         var datasetId = 'rawClusterCenters'; | 
 |                         return { | 
 |                             datasetId: datasetId, | 
 |                             option: { | 
 |                                 backgroundColor: BG_COLOR, | 
 |                                 grid: { | 
 |                                     containLabel: true | 
 |                                 }, | 
 |                                 xAxis: { | 
 |                                     name: 'STE', | 
 |                                     ...AXIS_STYLE | 
 |                                 }, | 
 |                                 yAxis: { | 
 |                                     name: 'ATA', | 
 |                                     ...AXIS_STYLE | 
 |                                 }, | 
 |                                 dataZoom: [{ | 
 |                                     type: 'slider', | 
 |                                 }, { | 
 |                                     type: 'inside' | 
 |                                 }], | 
 |                                 series: { | 
 |                                     type: 'custom', | 
 |                                     coordinateSystem: 'cartesian2d', | 
 |                                     animationDurationUpdate: ANIMATION_DURATION_UPDATE, | 
 |                                     datasetId: datasetId, | 
 |                                     universalTransition: { | 
 |                                         enabled: true | 
 |                                     }, | 
 |                                     encode: { | 
 |                                         x: 'CLUSTER_CENTER_STE', | 
 |                                         y: 'CLUSTER_CENTER_ATA', | 
 |                                         itemGroupId: 'CLUSTER_IDX', | 
 |                                         tooltip: ['CLUSTER_CENTER_STE', 'CLUSTER_CENTER_ATA'] | 
 |                                     }, | 
 |                                     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_STE'), | 
 |                                             api.value('CLUSTER_CENTER_ATA') | 
 |                                         ]); | 
 |                                         var count = api.value('COUNT'); | 
 |                                         var radius = count / context.totalCount * 100 + 10; | 
 |                                         return { | 
 |                                             type: 'circle', | 
 |                                             shape: { | 
 |                                                 cx: pos[0], | 
 |                                                 cy: pos[1], | 
 |                                                 r: radius, | 
 |                                             }, | 
 |                                             style: { | 
 |                                                 // fill: CONTENT_COLOR, | 
 |                                                 fill: CLUSTER_COLORS[params.dataIndex], | 
 |                                                 stroke: '#555', | 
 |                                                 lineWidth: 0 | 
 |                                             }, | 
 |                                             transition: ['shape', 'style'] | 
 |                                         }; | 
 |                                     } | 
 |                                 } | 
 |                             } | 
 |                         }; | 
 |                     } | 
 |                 }; | 
 |  | 
 |  | 
 |  | 
 |                 var options = {}; | 
 |                 var buttons = []; | 
 |  | 
 |                 echarts.util.each(optionCreators, function (creator, key) { | 
 |                     var optionWrap = creator(); | 
 |                     options[key] = Object.assign({}, baseOption, optionWrap.option); | 
 |                     buttons.push({ | 
 |                         text: key, | 
 |                         onclick: function () { | 
 |                             chart.setOption(options[key], true); | 
 |                         } | 
 |                     }); | 
 |                 }); | 
 |  | 
 |                 var chart = testHelper.create(echarts, 'main0', { | 
 |                     title: [ | 
 |                         'Test: buttons, should morph animation combine/separate.', | 
 |                         'Test: click buttons **before animation finished**, should no blink.', | 
 |                         'Test: click buttons **twice**, should no blink.', | 
 |                         'Test: use dataZoom, the "update animation" should exist' | 
 |                     ], | 
 |                     option: options['Scatter_singleSVG_ATA_STE'], | 
 |                     lazyUpdate: true, | 
 |                     height: 600, | 
 |                     buttons: buttons.concat([{ | 
 |                         text: 'resizeToSmall', | 
 |                         onclick: function () { | 
 |                             chart.resize({ | 
 |                                 width: 300, | 
 |                                 height: 400 | 
 |                             }); | 
 |                         } | 
 |                     }, { | 
 |                         text: 'resizeToNormal', | 
 |                         onclick: function () { | 
 |                             chart.resize({ | 
 |                                 width: 'auto', | 
 |                                 height: 600 | 
 |                             }); | 
 |                         } | 
 |                     }]) | 
 |                 }); | 
 |  | 
 |             }); | 
 |  | 
 |         </script> | 
 |  | 
 |  | 
 |  | 
 |     </body> | 
 | </html> |