<!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">
        <script src="lib/esl.js"></script>
        <script src="lib/config.js"></script>
        <script src="lib/jquery.min.js"></script>
        <script src="lib/testHelper.js"></script>
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <link rel="stylesheet" href="lib/reset.css" />
    </head>
    <body>
        <style>
            .test-title {
                background: rgb(182, 120, 7);
                color: #fff;
            }
            .test-chart {
                height: 250px;
            }
        </style>





        <div id="layout0"></div>
        <div id="layout1"></div>
        <div id="layout2"></div>
        <div id="layout3"></div>
        <div id="layout4"></div>
        <div id="layout5"></div>
        <div id="layout6"></div>
        <div id="layout7"></div>
        <div id="layout7.5"></div>
        <div id="layout8"></div>
        <div id="layout9"></div>
        <div id="layout10"></div>
        <div id="layout11"></div>
        <div id="layout12"></div>







        <script>
            var arrayRows0 = [
                ['product', '2015', '2016', '2017'],
                ['Matcha Latte', 43.3, 85.8, 93.7],
                ['Milk Tea', 83.1, 73.4, 55.1],
                ['Cheese Cocoa', 86.4, 65.2, 82.5],
                ['Walnut Brownie', 72.4, 53.9, 39.1]
            ];

            var arrayRows1 = [
                ['product', '2012', '2013', '2014', '2015', '2016', '2017'],
                ['Matcha Latte', 41.1, 30.4, 65.1, 53.3, 83.8, 98.7],
                ['Milk Tea', 86.5, 92.1, 85.7, 83.1, 73.4, 55.1],
                ['Cheese Cocoa', 24.1, 67.2, 79.5, 86.4, 65.2, 82.5],
                ['Walnut Brownie', 55.2, 67.1, 69.2, 72.4, 53.9, 39.1]
            ];

            var arrayRowsNoColumnHeader = [
                ['Matcha Latte', 41.1, 30.4, 65.1, 53.3, 83.8, 98.7],
                ['Milk Tea', 86.5, 92.1, 85.7, 83.1, 73.4, 55.1],
                ['Cheese Cocoa', 24.1, 67.2, 79.5, 86.4, 65.2, 82.5],
                ['Walnut Brownie', 55.2, 67.1, 69.2, 72.4, 53.9, 39.1]
            ];

            var arrayRowsNoRowHeader = [
                ['2012', '2013', '2014', '2015', '2016', '2017'],
                [41.1, 30.4, 65.1, 53.3, 83.8, 98.7],
                [86.5, 92.1, 85.7, 83.1, 73.4, 55.1],
                [24.1, 67.2, 79.5, 86.4, 65.2, 82.5],
                [55.2, 67.1, 69.2, 72.4, 53.9, 39.1]
            ];

            var arrayRowsPairValueColumns = [
                ['2012', null, '2013', null, '2014', 'amount'],
                [41.1, 2585, 30.4, 2473, 65.1, 3418],
                [86.5, 2316, 92.1, 3255, 85.7, 2485],
                [24.1, 1532, 67.2, 1452, 79.5, 4689],
                [55.2, 5312, 67.1, 3266, 69.2, 1354]
            ];

            var errorData = [
                ['name', 'Price', 'Prime cost', 'Prime cost min', 'Prime cost max', 'Price min', 'Price max'],
                ['Blouse "Blue Viola"', 101.88, 99.75, 76.75, 116.75, 69.88, 119.88],
                ['Dress "Daisy"', 155.8, 144.03, 126.03, 156.03, 129.8, 188.8],
                ['Trousers "Cutesy Classic"', 203.25, 173.56, 151.56, 187.56, 183.25, 249.25],
                ['Dress "Morning Dew"', 256, 120.5, 98.5, 136.5, 236, 279],
                ['Turtleneck "Dark Chocolate"', 408.89, 294.75, 276.75, 316.75, 385.89, 427.89],
                ['Jumper "Early Spring"', 427.36, 430.24, 407.24, 452.24, 399.36, 461.36],
                ['Breeches "Summer Mood"', 356, 135.5, 123.5, 151.5, 333, 387],
                ['Dress "Mauve Chamomile"', 406, 95.5, 73.5, 111.5, 366, 429],
                ['Dress "Flying Tits"', 527.36, 503.24, 488.24, 525.24, 485.36, 551.36],
                ['Dress "Singing Nightingales"', 587.36, 543.24, 518.24, 555.24, 559.36, 624.36],
                ['Sundress "Cloudy weather"', 603.36, 407.24, 392.24, 419.24, 581.36, 627.36],
                ['Sundress "East motives"', 633.36, 477.24, 445.24, 487.24, 594.36, 652.36],
                ['Sweater "Cold morning"', 517.36, 437.24, 416.24, 454.24, 488.36, 565.36],
                ['Trousers "Lavender Fields"', 443.36, 387.24, 370.24, 413.24, 412.36, 484.36],
                ['Jumper "Coffee with Milk"', 543.36, 307.24, 288.24, 317.24, 509.36, 574.36],
                ['Blouse "Blooming Cactus"', 790.36, 277.24, 254.24, 295.24, 764.36, 818.36],
                ['Sweater "Fluffy Comfort"', 790.34, 678.34, 660.34, 690.34, 762.34, 824.34]
            ];

            // No 北京 上海 江苏
            var nameValueGeo0 = [
                {name: '天津', value: 514},
                {name: '上海', value: 863},
                {name: '重庆', value: 224},
                {name: '河北', value: 671},
                {name: '河南', value: 888},
                {name: '云南', value: 992},
                {name: '辽宁', value: 136},
                {name: '黑龙江', value: 406},
                {name: '湖南', value: 101},
                {name: '安徽', value: 885},
                {name: '新疆', value: 187},
                {name: '浙江', value: 1},
                {name: '江西', value: 138},
                {name: '湖北', value: 337},
                {name: '广西', value: 410},
                {name: '甘肃', value: 22},
                {name: '山西', value: 814},
                {name: '内蒙古', value: 449},
                {name: '陕西', value: 324},
                {name: '吉林', value: 429},
                {name: '福建', value: 377},
                {name: '贵州', value: 811},
                {name: '广东', value: 954},
                {name: '青海', value: 653},
                {name: '西藏', value: 297},
                {name: '四川', value: 981},
                {name: '宁夏', value: 66},
                {name: '海南', value: 667},
                {name: '台湾', value: 345},
                {name: '香港', value: 970},
                {name: '澳门', value: 683}
            ];

            var nameValueGeo1 = [
                {name: '北京', value: 507},
                {name: '天津', value: 263},
                {name: '上海', value: 732},
                {name: '重庆', value: 976},
                {name: '河北', value: 299},
                {name: '安徽', value: 465},
                {name: '新疆', value: 259},
                {name: '浙江', value: 822},
                {name: '江西', value: 922},
                {name: '山西', value: 379},
                {name: '内蒙古', value: 544},
                {name: '吉林', value: 190},
                {name: '福建', value: 66},
                {name: '广东', value: 842},
                {name: '西藏', value: 827},
                {name: '四川', value: 71},
                {name: '宁夏', value: 428},
                {name: '香港', value: 466},
                {name: '澳门', value: 119}
            ]

        </script>






        <script>
            require(['echarts'], function (echarts) {

                var option = {
                    legend: {},
                    tooltip: {},
                    dataset: {
                        source: arrayRows0
                    },
                    series: [
                        {type: 'pie', id: 'pie'}
                    ]
                };

                testHelper.create(echarts, 'layout0', {
                    title: 'pie, default encoding, legend',
                    option: option
                });
            });
        </script>








        <script>
            require(['echarts'], function (echarts) {
                var encode = {
                    value: '2016',
                    itemName: 'product'
                };

                var option = {
                    legend: {},
                    tooltip: {},
                    dataset: {
                        source: arrayRows0
                    },
                    series: [
                        {type: 'pie', id: 'pie', encode: encode}
                    ]
                };

                testHelper.create(echarts, 'layout1', {
                    title: 'pie, give encoding, default legend',
                    option: option,
                    dataTable: arrayRows0,
                    infoKey: 'encode',
                    info: encode
                });
            });
        </script>




        <script>
            require(['echarts'], function (echarts) {
                var option = {
                    legend: {},
                    tooltip: {},
                    dataset: {
                        source: arrayRows0
                    },
                    series: [
                        {
                            type: 'pie',
                            id: 'pie',
                            seriesLayoutBy: 'row',
                            encode: {
                                value: 'Milk Tea',
                                itemName: 'product',
                                tooltip: 'Milk Tea'
                            }
                        }
                    ]
                };

                testHelper.create(echarts, 'layout2', {
                    title: 'pie, give encoding, default legend',
                    option: option,
                    dataTable: arrayRows0,
                    info: {
                        legend: '<default>',
                        series: option.series
                    }
                });
            });
        </script>





        <script>
            require(['echarts'], function (echarts) {
                var option = {
                    legend: {},
                    tooltip: {},
                    dataset: [{
                        source: arrayRowsNoColumnHeader
                    }, {
                        source: arrayRowsNoRowHeader
                    }],
                    series: [{
                        type: 'pie',
                        radius: 50,
                        center: ['25%', '25%'],
                        sourceHeader: false
                    }, {
                        type: 'pie',
                        radius: 50,
                        center: ['50%', '25%']
                    }, {
                        type: 'pie',
                        radius: 50,
                        center: ['75%', '25%'],
                        sourceHeader: true
                    }, {
                        type: 'pie',
                        radius: 50,
                        center: ['25%', '75%'],
                        seriesLayoutBy: 'row',
                        sourceHeader: false,
                        datasetIndex: 1
                    }, {
                        type: 'pie',
                        radius: 50,
                        center: ['50%', '75%'],
                        seriesLayoutBy: 'row',
                        datasetIndex: 1
                    }, {
                        type: 'pie',
                        radius: 50,
                        center: ['75%', '75%'],
                        seriesLayoutBy: 'row',
                        sourceHeader: true,
                        datasetIndex: 1
                    }]
                };

                testHelper.create(echarts, 'layout3', {
                    title: 'no sourceHeader',
                    height: 400,
                    option: option,
                    dataTables: [
                        arrayRowsNoColumnHeader,
                        arrayRowsNoRowHeader
                    ],
                    info: {
                        legend: '<default>',
                        series: option.series
                    }
                });
            });
        </script>









        <script>

            require(['echarts', 'map/js/china'], function (echarts) {
                var option = {
                    legend: {},
                    tooltip: {},
                    dataset: [{
                        source: nameValueGeo0
                    }, {
                        source: nameValueGeo1
                    }],
                    visualMap: {
                        min: 0,
                        max: 1500,
                        calculable : true
                    },
                    series: [{
                        name: 'A',
                        type: 'map',
                        label: {
                            show: true
                        },
                        mapType: 'china'
                    }, {
                        name: 'B',
                        type: 'map',
                        label: {
                            show: true
                        },
                        mapType: 'china',
                        datasetIndex: 1
                    }]
                };

                testHelper.create(echarts, 'layout4', {
                    option: option,
                    height: 400,
                    dataTables: [
                        nameValueGeo0,
                        nameValueGeo1
                    ],
                    info: {
                        legend: option.legend,
                        tooltip: option.tooltip,
                        series: option.series
                    }
                });
            });
        </script>







        <script>
            require(['echarts'], function (echarts) {
                var option = {
                    legend: {},
                    tooltip: {},
                    xAxis: {},
                    yAxis: {},
                    dataset: [{
                        source: arrayRowsPairValueColumns
                    }],
                    series: [{
                        type: 'scatter'
                    }, {
                        type: 'scatter'
                    }, {
                        type: 'scatter'
                    }]
                };

                testHelper.create(echarts, 'layout5', {
                    title: 'column (dimension name duplicated)',
                    height: 400,
                    option: option,
                    dataTables: [
                        arrayRowsPairValueColumns
                    ],
                    info: {
                        legend: '<default>',
                        series: option.series
                    }
                });
            });
        </script>











        <script>
            require(['echarts'], function (echarts) {



                function renderItem(params, api) {
                    var children = [];
                    var coordDims = ['x', 'y'];

                    for (var baseDimIdx = 0; baseDimIdx < 2; baseDimIdx++) {
                        var otherDimIdx = 1 - baseDimIdx;
                        var encode = params.encode;
                        var baseValue = api.value(encode[coordDims[baseDimIdx]][0]);
                        var param = [];
                        param[baseDimIdx] = baseValue;
                        param[otherDimIdx] = api.value(encode[coordDims[otherDimIdx]][1]);
                        var highPoint = api.coord(param);
                        param[otherDimIdx] = api.value(encode[coordDims[otherDimIdx]][2]);
                        var lowPoint = api.coord(param);
                        var halfWidth = 5;

                        var style = api.style({
                            stroke: api.visual('color'),
                            fill: null
                        });

                        children.push({
                            type: 'line',
                            shape: makeShape(
                                baseDimIdx,
                                highPoint[baseDimIdx] - halfWidth, highPoint[otherDimIdx],
                                highPoint[baseDimIdx] + halfWidth, highPoint[otherDimIdx]
                            ),
                            style: style
                        }, {
                            type: 'line',
                            shape: makeShape(
                                baseDimIdx,
                                highPoint[baseDimIdx], highPoint[otherDimIdx],
                                lowPoint[baseDimIdx], lowPoint[otherDimIdx]
                            ),
                            style: style
                        }, {
                            type: 'line',
                            shape: makeShape(
                                baseDimIdx,
                                lowPoint[baseDimIdx] - halfWidth, lowPoint[otherDimIdx],
                                lowPoint[baseDimIdx] + halfWidth, lowPoint[otherDimIdx]
                            ),
                            style: style
                        });
                    }

                    function makeShape(baseDimIdx, base1, value1, base2, value2) {
                        var shape = {};
                        shape[coordDims[baseDimIdx] + '1'] = base1;
                        shape[coordDims[1 - baseDimIdx] + '1'] = value1;
                        shape[coordDims[baseDimIdx] + '2'] = base2;
                        shape[coordDims[1 - baseDimIdx] + '2'] = value2;
                        return shape;
                    }

                    return {
                        type: 'group',
                        children: children
                    };
                }

                var option = {
                    dataset: {
                        source: errorData
                    },
                    tooltip: {
                    },
                    legend: {
                    },
                    dataZoom: [{
                        type: 'slider'
                    }, {
                        type: 'inside'
                    }],
                    visualMap: {
                        min: 0,
                        max: 1000,
                        dimension: 1,
                        calculable: true
                    },
                    xAxis: {},
                    yAxis: {},
                    series: [{
                        type: 'scatter',
                        name: 'error',
                        encode: {
                            x: 2,
                            y: 1,
                            tooltip: [2, 1, 3, 4, 5, 6],
                            itemName: 0
                        },
                        itemStyle: {
                            normal: {
                                color: '#77bef7'
                            }
                        }
                    }, {
                        type: 'custom',
                        name: 'error',
                        renderItem: renderItem,
                        encode: {
                            x: [2, 3, 4],
                            y: [1, 5, 6],
                            tooltip: [2, 1, 3, 4, 5, 6],
                            itemName: 0
                        },
                        z: 100
                    }]
                };

                testHelper.create(echarts, 'layout6', {
                    title: 'error data (custom)',
                    height: 400,
                    dataTables: [
                        errorData
                    ],
                    option: option
                });
            });
        </script>












        <script>

            require(['echarts', 'data/stock-DJI.json'], function (echarts, source) {
                var option = {
                    legend: {},
                    tooltip: {trigger: 'axis'},
                    xAxis: {type: 'category'},
                    yAxis: {},
                    dataset: [{
                        source: source
                    }],
                    dataZoom: [{}, {type: 'inside'}],
                    animation: false,
                    series: [{
                        type: 'candlestick',
                        encode: {
                            x: 0,
                            y: [1, 2, 3, 4]
                        }
                    }]
                };

                testHelper.create(echarts, 'layout7', {
                    height: 400,
                    option: option,
                    dataTables: [source],
                    info: {
                        series: option.series
                    }
                });
            });
        </script>













        <script>

            require(['echarts'], function (echarts, source) {
                // Thanks to <https://github.com/OvidiuBuleandra>
                option = {
                    tooltip: {
                        trigger: 'axis'
                    },
                    xAxis: {
                        type: "category",
                        scale: true
                    },
                    yAxis: {
                        type: "value",
                        scale: true,
                        boundaryGap: ['5%', '5%']
                    },
                    dataZoom: [{
                        type: 'slider'
                    }, {
                        type: 'inside'
                    }],
                    dataset: {
                        dimensions: ["date","open","high","low","close","volume",{name: "haOpen", displayName: 'open'},"haHigh","haLow","haClose","sma9"],
                        source: [
                            ["2018-01-09 14:30:00",14636.21,14682.6,14401.0,14659.57,349.069176,14647.89,14682.6,14401.0,14594.845,0.0],
                            ["2018-01-09 15:00:00",14650.0,14700.0,14238.99,14347.43,459.735215,14621.3675,14700.0,14238.99,14484.105,0.0],
                            ["2018-01-09 15:30:00",14374.72,14434.2,14011.05,14041.03,697.055035,14552.73625,14552.73625,14011.05,14215.25,0.0],
                            ["2018-01-09 16:00:00",14072.87,14497.06,14064.13,14349.0,671.165463,14383.993125,14497.06,14064.13,14245.765,0.0],
                            ["2018-01-09 16:30:00",14369.98,14640.99,14340.0,14560.48,416.750768,14314.8790625,14640.99,14314.8790625,14477.8625,0.0],
                            ["2018-01-09 17:00:00",14551.42,14800.0,14551.41,14749.55,357.445717,14396.37078125,14800.0,14396.37078125,14663.095000000001,0.0],
                            ["2018-01-09 17:30:00",14745.0,14766.2,14485.0,14654.96,306.727704,14529.732890625,14766.2,14485.0,14662.789999999999,0.0],
                            ["2018-01-09 18:00:00",14655.01,14829.0,14585.01,14800.1,194.858965,14596.261445312499,14829.0,14585.01,14717.28,0.0],
                            ["2018-01-09 18:30:00",14800.1,14998.62,14792.03,14951.01,313.268531,14656.770722656249,14998.62,14656.770722656249,14885.44,0.0],
                            ["2018-01-09 19:00:00",14968.0,14982.0,14778.47,14810.0,214.504459,14771.105361328126,14982.0,14771.105361328126,14884.6175,16213.681111111111],
                            ["2018-01-09 19:30:00",14810.0,14973.49,14799.95,14949.98,144.830078,14827.861430664063,14973.49,14799.95,14883.355,16245.94888888889],
                            ["2018-01-09 20:00:00",14949.98,14990.0,14865.49,14916.91,145.574797,14855.608215332031,14990.0,14855.608215332031,14930.595000000001,16309.224444444444],
                            ["2018-01-09 20:30:00",14914.03,14945.01,14799.01,14803.44,146.21296,14893.101607666016,14945.01,14799.01,14865.372500000001,16393.936666666665],
                            ["2018-01-09 21:00:00",14803.46,14863.93,14700.44,14799.0,190.167582,14879.237053833009,14879.237053833009,14700.44,14791.7075,16443.936666666665],
                            ["2018-01-09 21:30:00",14798.99,14798.99,14650.0,14717.82,209.543776,14835.472276916506,14835.472276916506,14650.0,14741.449999999999,16461.41888888889],
                            ["2018-01-09 22:00:00",14717.82,14781.56,14600.0,14615.9,164.859485,14788.461138458253,14788.461138458253,14600.0,14678.82,16446.568888888887],
                            ["2018-01-09 22:30:00",14647.09,14861.56,14615.4,14755.03,228.445843,14733.640569229126,14861.56,14615.4,14719.77,16457.687777777777],
                            ["2018-01-09 23:00:00",14755.33,14780.0,14680.0,14702.33,150.779654,14726.705284614563,14780.0,14680.0,14729.415,16446.824444444443],
                            ["2018-01-09 23:30:00",14709.49,14709.49,14420.0,14462.81,274.752199,14728.060142307282,14728.060142307282,14420.0,14575.447499999998,16392.579999999998],
                            ["2018-01-10 00:00:00",14452.0,14536.36,14407.77,14435.0,279.156552,14651.753821153641,14651.753821153641,14407.77,14457.782500000001,16350.913333333334],
                            ["2018-01-10 00:30:00",14435.0,14459.94,14182.84,14254.92,435.050575,14554.768160576821,14554.768160576821,14182.84,14333.175,16273.684444444445],
                            ["2018-01-10 01:00:00",14234.7,14290.56,14125.0,14259.98,422.926221,14443.97158028841,14443.97158028841,14125.0,14227.560000000001,16200.692222222224],
                            ["2018-01-10 01:30:00",14259.98,14454.95,14144.13,14400.0,377.788542,14335.765790144205,14454.95,14144.13,14314.765,16155.865555555552],
                            ["2018-01-10 02:00:00",14401.0,14480.0,13750.0,13972.46,582.921859,14325.265395072103,14480.0,13750.0,14150.865,16064.027777777777]
                        ]
                    },
                    series: [{
                        type: "candlestick",
                        encode: {
                            x: "date",
                            // y: ["open", "close", "low", "high"],
                            y: ["haOpen","haClose","haLow","haHigh"],
                            tooltip: ["haOpen", "haHigh", "haLow", "haClose"]
                        }
                    }]
                };

                testHelper.create(echarts, 'layout7.5', {
                    title: 'Check: Y use haOpen, haHigh, haLow, haClose, but display name of "haOpen" is open',
                    height: 400,
                    option: option,
                    dataTable: option.dataset.source,
                    info: {
                        series: option.series
                    }
                });
            });
        </script>








        <script>

            require(['echarts', 'data/stock-DJI.json'], function (echarts, source) {
                var option = {
                    legend: {},
                    tooltip: {trigger: 'axis'},
                    xAxis: {type: 'time'},
                    yAxis: {},
                    dataset: [{
                        source: source
                    }],
                    dataZoom: [{}, {type: 'inside'}],
                    animation: false,
                    series: [{
                        type: 'candlestick',
                        encode: {
                            x: 0,
                            y: [1, 2, 3, 4]
                        }
                    }]
                };

                testHelper.create(echarts, 'layout8', {
                    title: 'time axis',
                    height: 400,
                    option: option,
                    dataTables: [source],
                    info: {
                        series: option.series
                    }
                });
            });
        </script>













        <script>

            require(['echarts'], function (echarts, source) {
                var option = {
                    legend: {},
                    dataset: [{
                        source: arrayRows1
                    }],
                    parallelAxis: [
                        {dim: 0, type: 'category'},
                        {dim: 1},
                        {dim: 2},
                        {dim: 3}
                    ],
                    parallel: {
                        axisExpandable: true,
                        axisExpandCenter: 15,
                        axisExpandCount: 10,
                        axisExpandWidth: 60,
                        axisExpandTriggerOn: 'mousemove',

                        parallelAxisDefault: {
                            type: 'value',
                            nameLocation: 'end',
                            nameGap: 20,
                            tooltip: {
                                show: true
                            },
                            nameTextStyle: {
                                fontSize: 14
                            },
                            splitLine: {
                                show: false
                            }
                        }
                    },
                    series: [{
                        type: 'parallel'
                    }]
                };

                testHelper.create(echarts, 'layout9', {
                    height: 400,
                    option: option,
                    dataTables: [arrayRows1]
                });
            });
        </script>




        <script>
            require(['echarts'], function (echarts) {

                var option = {
                    legend: {},
                    tooltip: {},
                    dataset: {
                        source: arrayRows0
                    },
                    series: [
                        {
                            label: {
                                formatter: '{@product} {@[1]}'
                            },
                            type: 'funnel',
                            id: 'pie'
                        }
                    ]
                };

                testHelper.create(echarts, 'layout10', {
                    option: option,
                    dataTable: arrayRows0
                });
            });
        </script>



        <script>
            require(['echarts'], function (echarts) {
                var option = {
                    dataset: {
                        source: [
                            [12, 323, 11.2],
                            [23, 167, 8.3],
                            [81, 284, 12],
                            [91, 413, 4.1],
                            [13, 287, 13.5]
                        ]
                    },
                    xAxis: {},
                    yAxis: {},
                    visualMap: {
                        show: false,
                        dimension: 2,
                        min: 2,
                        max: 15,
                        inRange: {
                            symbolSize: [5, 60]
                        }
                    },
                    series: {
                        type: 'scatter'
                    }
                };

                testHelper.create(echarts, 'layout11', {
                    option: option,
                    dataTable: option.dataset.source
                });
            });
        </script>

        <script>
            require(['echarts'], function (echarts) {
                var option = {
                    dataset: {
                        source: [
                            ['product', '2015', '2016', '2017'],
                            ['Matcha Latte', 43.3, 85.8, 93.7],
                            ['Milk Tea', 83.1, 73.4, 55.1],
                            ['Cheese Cocoa', 86.4, 65.2, 82.5],
                            ['Walnut Brownie', 72.4, 53.9, 39.1]
                        ]
                    },
                    xAxis: {type: 'category'},
                    yAxis: {},
                    series: [
                        {type: 'bar'},
                        {type: 'bar'},
                        {type: 'bar'}
                    ],
                    toolbox: {
                        feature: {
                            dataView: {}
                        }
                    }
                }

                testHelper.create(echarts, 'layout12', {
                    option: option,
                    dataTable: option.dataset.source
                });
            });
        </script>

    </body>
</html>