<!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="lib/facePrint.js"></script>
        <script src="lib/testHelper.js"></script>
        <!-- <script src="ut/lib/canteen.js"></script> -->
        <link rel="stylesheet" href="lib/reset.css" />
    </head>
    <body>
        <style>
        </style>



        <div id="main0"></div>
        <div id="main1"></div>
        <div id="main2"></div>
        <div id="main3"></div>
        <div id="main4"></div>
        <div id="main5"></div>


        <script>
            window.ANIMATION_DURATION_UPDATE = 1000;
        </script>



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

            option = {
                title: {
                    text: 'Bar'
                },
                animationDurationUpdate: ANIMATION_DURATION_UPDATE,
                dataset: [{
                    dimensions: ['name', 'age', 'profession', 'score', 'date'],
                    source: [
                        ['Hannah Krause ', 41, 'Engineer', 314, '2011-02-12'],
                        ['Zhao Qian ', 20, 'Teacher', 351, '2011-03-01'],
                        ['Jasmin Krause ', 52, 'Musician', 287, '2011-02-14'],
                        ['Li Lei', 37, 'Teacher', 219, '2011-02-18'],
                        ['Karle Neumann ', 25, 'Engineer', 253, '2011-04-02'],
                        ['Adrian Groß', 19, 'Teacher', null, '2011-01-16'],
                        ['Mia Neumann', 71, 'Engineer', 165, '2011-03-19'],
                        ['Böhm Fuchs', 36, 'Musician', 318, '2011-02-24'],
                        ['Han Meimei ', 67, 'Engineer', 366, '2011-03-12'],
                    ]
                }, {
                    transform: {
                        type: 'sort',
                        config: { dimension: 'score', order: 'desc' }
                    }
                }],
                xAxis: {
                    type: 'category',
                    axisLabel: { interval: 0, rotate: 30 },
                },
                yAxis: {},
                series: {
                    type: 'bar',
                    id: 'main',
                    encode: { x: 'name', y: 'score', itemName: 'name' },
                    datasetIndex: 1
                }
            };

            var chart = testHelper.create(echarts, 'main0', {
                title: [
                    'Convert between pie, bar, scatter, line, funnel'
                ],
                recordVideo: true,
                // height: 300,
                buttons: [{
                    text: 'Pie',
                    onclick: function () {
                        chart.setOption({
                            title: {
                                text: 'Pie'
                            },
                            xAxis: { show: false },
                            yAxis: { show: false },
                            series: {
                                id: 'main',
                                type: 'pie',
                                animationDurationUpdate: ANIMATION_DURATION_UPDATE,
                                encode: { x: 'name', y: 'score', itemName: 'name' },
                                datasetIndex: 1,
                                universalTransition: true
                            }
                        });
                    }
                }, {
                    text: 'Scatter',
                    onclick: function () {
                        chart.setOption({
                            title: { text: 'Scatter' },
                            xAxis: { show: true },
                            yAxis: { show: true },
                            series: {
                                id: 'main',
                                type: 'scatter',
                                symbolSize: 30,
                                encode: { x: 'name', y: 'score', itemName: 'name' },
                                datasetIndex: 1,
                                universalTransition: true
                            }
                        });
                    }
                }, {
                    text: 'Line',
                    onclick: function () {
                        chart.setOption({
                            title: { text: 'Line' },
                            xAxis: { show: true },
                            yAxis: { show: true },
                            series: {
                                id: 'main',
                                type: 'line',
                                symbol: 'diamond',
                                symbolSize: 20,
                                encode: { x: 'name', y: 'score', itemName: 'name' },
                                datasetIndex: 1,
                                universalTransition: true
                            }
                        });
                    }
                }, {
                    text: 'Bar',
                    onclick: function () {
                        chart.setOption({
                            title: { text: 'Bar' },
                            xAxis: { show: true },
                            yAxis: { show: true },
                            series: {
                                type: 'bar',
                                id: 'main',
                                encode: { x: 'name', y: 'score', itemName: 'name' },
                                datasetIndex: 1,
                                universalTransition: true
                            }
                        });
                    }
                }, {
                    text: 'Funnel',
                    onclick: function () {
                        chart.setOption({
                            title: { text: 'Funnel' },
                            xAxis: { show: false },
                            yAxis: { show: false },
                            series: {
                                id: 'main',
                                type: 'funnel',
                                encode: { x: 'name', y: 'score', itemName: 'name' },
                                datasetIndex: 1,
                                universalTransition: true
                            }
                        });
                    }
                }],
                option: option
            });
        });
        </script>


        <script>
            require([
                'echarts'
            ], function (echarts) {
                var option;
                var hours = ['12a', '1a', '2a', '3a', '4a', '5a', '6a',
                        '7a', '8a', '9a','10a','11a',
                        '12p', '1p', '2p', '3p', '4p', '5p',
                        '6p', '7p', '8p', '9p', '10p', '11p'];
                var days = ['Saturday', 'Friday', 'Thursday',
                        'Wednesday', 'Tuesday', 'Monday', 'Sunday'];

                var data = [[0,0,5],[0,1,1],[0,2,0],[0,3,0],[0,4,0],[0,5,0],[0,6,0],[0,7,0],[0,8,0],[0,9,0],[0,10,0],[0,11,2],[0,12,4],[0,13,1],[0,14,1],[0,15,3],[0,16,4],[0,17,6],[0,18,4],[0,19,4],[0,20,3],[0,21,3],[0,22,2],[0,23,5],[1,0,7],[1,1,0],[1,2,0],[1,3,0],[1,4,0],[1,5,0],[1,6,0],[1,7,0],[1,8,0],[1,9,0],[1,10,5],[1,11,2],[1,12,2],[1,13,6],[1,14,9],[1,15,11],[1,16,6],[1,17,7],[1,18,8],[1,19,12],[1,20,5],[1,21,5],[1,22,7],[1,23,2],[2,0,1],[2,1,1],[2,2,0],[2,3,0],[2,4,0],[2,5,0],[2,6,0],[2,7,0],[2,8,0],[2,9,0],[2,10,3],[2,11,2],[2,12,1],[2,13,9],[2,14,8],[2,15,10],[2,16,6],[2,17,5],[2,18,5],[2,19,5],[2,20,7],[2,21,4],[2,22,2],[2,23,4],[3,0,7],[3,1,3],[3,2,0],[3,3,0],[3,4,0],[3,5,0],[3,6,0],[3,7,0],[3,8,1],[3,9,0],[3,10,5],[3,11,4],[3,12,7],[3,13,14],[3,14,13],[3,15,12],[3,16,9],[3,17,5],[3,18,5],[3,19,10],[3,20,6],[3,21,4],[3,22,4],[3,23,1],[4,0,1],[4,1,3],[4,2,0],[4,3,0],[4,4,0],[4,5,1],[4,6,0],[4,7,0],[4,8,0],[4,9,2],[4,10,4],[4,11,4],[4,12,2],[4,13,4],[4,14,4],[4,15,14],[4,16,12],[4,17,1],[4,18,8],[4,19,5],[4,20,3],[4,21,7],[4,22,3],[4,23,0],[5,0,2],[5,1,1],[5,2,0],[5,3,3],[5,4,0],[5,5,0],[5,6,0],[5,7,0],[5,8,2],[5,9,0],[5,10,4],[5,11,1],[5,12,5],[5,13,10],[5,14,5],[5,15,7],[5,16,11],[5,17,6],[5,18,0],[5,19,5],[5,20,3],[5,21,4],[5,22,2],[5,23,0],[6,0,1],[6,1,0],[6,2,0],[6,3,0],[6,4,0],[6,5,0],[6,6,0],[6,7,0],[6,8,0],[6,9,0],[6,10,1],[6,11,0],[6,12,2],[6,13,1],[6,14,3],[6,15,4],[6,16,0],[6,17,0],[6,18,0],[6,19,0],[6,20,1],[6,21,2],[6,22,2],[6,23,6]];

                data = data.map(function (item) {
                    return [item[1], item[0], item[2] || '-'];
                });

                const heatmapSeries = {
                    name: 'Punch Card',
                    id: 'punch-card',
                    type: 'heatmap',
                    data: data,
                    label: {
                        show: true
                    },
                    universalTransition: {
                        enabled: true
                    }
                }

                function makeScatterSeries(symbolType) {
                    return {
                        name: 'Punch Card',
                        id: 'punch-card',
                        type: 'scatter',
                        symbol: symbolType,
                        symbolSize: item => {
                            return Math.sqrt(item[2]) * 10;
                        },
                        symbolKeepAspect: true,
                        data: data,
                        label: {
                            show: true
                        },
                        universalTransition: {
                            enabled: true
                        }
                    }
                }

                option = {
                    tooltip: {
                        position: 'top'
                    },
                    grid: {
                        height: '50%',
                        top: '10%'
                    },
                    xAxis: {
                        type: 'category',
                        data: hours,
                        splitArea: {
                            show: true
                        }
                    },
                    yAxis: {
                        type: 'category',
                        data: days,
                        splitArea: {
                            show: true
                        }
                    },
                    visualMap: {
                        min: 0,
                        max: 10,
                        calculable: true,
                        orient: 'horizontal',
                        left: 'center',
                        bottom: '15%'
                    },
                    animationDurationUpdate: ANIMATION_DURATION_UPDATE,
                    series: heatmapSeries
                };

                var chart = testHelper.create(echarts, 'main1', {
                    title: [
                        'Convert between heatmap, scatter (with different symbols)'
                    ],
                    recordVideo: true,
                    // height: 300,
                    buttons: [{
                        text: 'Heatmap',
                        onclick: function () {
                            chart.setOption({
                                series: heatmapSeries
                            });
                        }
                    }, {
                        text: 'Scatter (Rect)',
                        onclick: function () {
                            chart.setOption({
                                series: makeScatterSeries('rect')
                            });
                        }
                    }, {
                        text: 'Scatter (Diamond)',
                        onclick: function () {
                            chart.setOption({
                                series: makeScatterSeries('diamond')
                            });
                        }
                    }, {
                        text: 'Scatter (Circle)',
                        onclick: function () {
                            chart.setOption({
                                series: makeScatterSeries('circle')
                            });
                        }
                    }, {
                        text: 'Scatter (Custom Symbol)',
                        onclick: function () {
                            chart.setOption({
                                series: makeScatterSeries('path://M432.45,595.444c0,2.177-4.661,6.82-11.305,6.82c-6.475,0-11.306-4.567-11.306-6.82s4.852-6.812,11.306-6.812C427.841,588.632,432.452,593.191,432.45,595.444L432.45,595.444z M421.155,589.876c-3.009,0-5.448,2.495-5.448,5.572s2.439,5.572,5.448,5.572c3.01,0,5.449-2.495,5.449-5.572C426.604,592.371,424.165,589.876,421.155,589.876L421.155,589.876z M421.146,591.891c-1.916,0-3.47,1.589-3.47,3.549c0,1.959,1.554,3.548,3.47,3.548s3.469-1.589,3.469-3.548C424.614,593.479,423.062,591.891,421.146,591.891L421.146,591.891zM421.146,591.891')
                            })
                        }
                    }],
                    option: option
                });
            });
        </script>

        <script>
            require([
                'echarts'
            ], function (echarts) {
                var item1 = {
                    color: '#F54F4A'
                };
                var item2 = {
                    color: '#FF8C75'
                };
                var item3 = {
                    color: '#FFB499'
                };

                var data = [{
                    children: [{
                        value: 5,
                        children: [{
                            value: 1,
                            itemStyle: item1
                        }, {
                            value: 2,
                            children: [{
                                value: 1,
                                itemStyle: item2
                            }]
                        }, {
                            children: [{
                                value: 1
                            }]
                        }],
                        itemStyle: item1
                    }, {
                        value: 10,
                        children: [{
                            value: 6,
                            children: [{
                                value: 1,
                                itemStyle: item1
                            }, {
                                value: 1
                            }, {
                                value: 1,
                                itemStyle: item2
                            }, {
                                value: 1
                            }],
                            itemStyle: item3
                        }, {
                            value: 2,
                            children: [{
                                value: 1
                            }],
                            itemStyle: item3
                        }, {
                            children: [{
                                value: 1,
                                itemStyle: item2
                            }]
                        }],
                        itemStyle: item1
                    }],
                    itemStyle: item1
                }, {
                    value: 9,
                    children: [{
                        value: 4,
                        children: [{
                            value: 2,
                            itemStyle: item2
                        }, {
                            children: [{
                                value: 1,
                                itemStyle: item1
                            }]
                        }],
                        itemStyle: item1
                    }, {
                        children: [{
                            value: 3,
                            children: [{
                                value: 1
                            }, {
                                value: 1,
                                itemStyle: item2
                            }]
                        }],
                        itemStyle: item3
                    }],
                    itemStyle: item2
                }, {
                    value: 7,
                    children: [{
                        children: [{
                            value: 1,
                            itemStyle: item3
                        }, {
                            value: 3,
                            children: [{
                                value: 1,
                                itemStyle: item2
                            }, {
                                value: 1
                            }],
                            itemStyle: item2
                        }, {
                            value: 2,
                            children: [{
                                value: 1
                            }, {
                                value: 1,
                                itemStyle: item1
                            }],
                            itemStyle: item1
                        }],
                        itemStyle: item3
                    }],
                    itemStyle: item1
                }, {
                    children: [{
                        value: 6,
                        children: [{
                            value: 1,
                            itemStyle: item2
                        }, {
                            value: 2,
                            children: [{
                                value: 2,
                                itemStyle: item2
                            }],
                            itemStyle: item1
                        }, {
                            value: 1,
                            itemStyle: item3
                        }],
                        itemStyle: item3
                    }, {
                        value: 3,
                        children: [{
                            value: 1,
                        }, {
                            children: [{
                                value: 1,
                                itemStyle: item2
                            }]
                        }, {
                            value: 1
                        }],
                        itemStyle: item3
                    }],
                    itemStyle: item1
                }];

                function makeTreemapOption() {
                    return {
                        series: {
                            type: 'treemap',
                            id: 'main',
                            data,
                            animationDurationUpdate: ANIMATION_DURATION_UPDATE,
                            roam: false,
                            breadcrumb: {
                                show: false
                            },
                            universalTransition: true,
                            itemStyle: {
                                color: '#ddd',
                                borderWidth: 2
                            }
                        }
                    };
                }

                function makeSunburstOption() {
                    return {
                        series: {
                            radius: ['15%', '80%'],
                            type: 'sunburst',
                            id: 'main',
                            data,
                            animationDurationUpdate: ANIMATION_DURATION_UPDATE,
                            universalTransition: true,
                            clockwise: true,
                            itemStyle: {
                                color: '#ddd',
                                borderWidth: 2
                            }
                        }
                    };
                }

                var chart = testHelper.create(echarts, 'main2', {
                    title: [
                        'Convert between treemap, sunburst'
                    ],
                    recordVideo: true,
                    // height: 300,
                    buttons: [{
                        text: 'Treemap',
                        onclick: function () {
                            chart.setOption(makeTreemapOption());
                        }
                    }, {
                        text: 'Sunburst',
                        onclick: function () {
                            chart.setOption(makeSunburstOption());
                        }
                    }],
                    option: makeTreemapOption()
                });
            });
        </script>

        <script>
            require([
                'echarts'
            ], function (echarts) {
                var pathSymbols = {
                    reindeer: 'path://M-22.788,24.521c2.08-0.986,3.611-3.905,4.984-5.892 c-2.686,2.782-5.047,5.884-9.102,7.312c-0.992,0.005-0.25-2.016,0.34-2.362l1.852-0.41c0.564-0.218,0.785-0.842,0.902-1.347 c2.133-0.727,4.91-4.129,6.031-6.194c1.748-0.7,4.443-0.679,5.734-2.293c1.176-1.468,0.393-3.992,1.215-6.557 c0.24-0.754,0.574-1.581,1.008-2.293c-0.611,0.011-1.348-0.061-1.959-0.608c-1.391-1.245-0.785-2.086-1.297-3.313 c1.684,0.744,2.5,2.584,4.426,2.586C-8.46,3.012-8.255,2.901-8.04,2.824c6.031-1.952,15.182-0.165,19.498-3.937 c1.15-3.933-1.24-9.846-1.229-9.938c0.008-0.062-1.314-0.004-1.803-0.258c-1.119-0.771-6.531-3.75-0.17-3.33 c0.314-0.045,0.943,0.259,1.439,0.435c-0.289-1.694-0.92-0.144-3.311-1.946c0,0-1.1-0.855-1.764-1.98 c-0.836-1.09-2.01-2.825-2.992-4.031c-1.523-2.476,1.367,0.709,1.816,1.108c1.768,1.704,1.844,3.281,3.232,3.983 c0.195,0.203,1.453,0.164,0.926-0.468c-0.525-0.632-1.367-1.278-1.775-2.341c-0.293-0.703-1.311-2.326-1.566-2.711 c-0.256-0.384-0.959-1.718-1.67-2.351c-1.047-1.187-0.268-0.902,0.521-0.07c0.789,0.834,1.537,1.821,1.672,2.023 c0.135,0.203,1.584,2.521,1.725,2.387c0.102-0.259-0.035-0.428-0.158-0.852c-0.125-0.423-0.912-2.032-0.961-2.083 c-0.357-0.852-0.566-1.908-0.598-3.333c0.4-2.375,0.648-2.486,0.549-0.705c0.014,1.143,0.031,2.215,0.602,3.247 c0.807,1.496,1.764,4.064,1.836,4.474c0.561,3.176,2.904,1.749,2.281-0.126c-0.068-0.446-0.109-2.014-0.287-2.862 c-0.18-0.849-0.219-1.688-0.113-3.056c0.066-1.389,0.232-2.055,0.277-2.299c0.285-1.023,0.4-1.088,0.408,0.135 c-0.059,0.399-0.131,1.687-0.125,2.655c0.064,0.642-0.043,1.768,0.172,2.486c0.654,1.928-0.027,3.496,1,3.514 c1.805-0.424,2.428-1.218,2.428-2.346c-0.086-0.704-0.121-0.843-0.031-1.193c0.221-0.568,0.359-0.67,0.312-0.076 c-0.055,0.287,0.031,0.533,0.082,0.794c0.264,1.197,0.912,0.114,1.283-0.782c0.15-0.238,0.539-2.154,0.545-2.522 c-0.023-0.617,0.285-0.645,0.309,0.01c0.064,0.422-0.248,2.646-0.205,2.334c-0.338,1.24-1.105,3.402-3.379,4.712 c-0.389,0.12-1.186,1.286-3.328,2.178c0,0,1.729,0.321,3.156,0.246c1.102-0.19,3.707-0.027,4.654,0.269 c1.752,0.494,1.531-0.053,4.084,0.164c2.26-0.4,2.154,2.391-1.496,3.68c-2.549,1.405-3.107,1.475-2.293,2.984 c3.484,7.906,2.865,13.183,2.193,16.466c2.41,0.271,5.732-0.62,7.301,0.725c0.506,0.333,0.648,1.866-0.457,2.86 c-4.105,2.745-9.283,7.022-13.904,7.662c-0.977-0.194,0.156-2.025,0.803-2.247l1.898-0.03c0.596-0.101,0.936-0.669,1.152-1.139 c3.16-0.404,5.045-3.775,8.246-4.818c-4.035-0.718-9.588,3.981-12.162,1.051c-5.043,1.423-11.449,1.84-15.895,1.111 c-3.105,2.687-7.934,4.021-12.115,5.866c-3.271,3.511-5.188,8.086-9.967,10.414c-0.986,0.119-0.48-1.974,0.066-2.385l1.795-0.618 C-22.995,25.682-22.849,25.035-22.788,24.521z',
                    plane: 'path://M1.112,32.559l2.998,1.205l-2.882,2.268l-2.215-0.012L1.112,32.559z M37.803,23.96 c0.158-0.838,0.5-1.509,0.961-1.904c-0.096-0.037-0.205-0.071-0.344-0.071c-0.777-0.005-2.068-0.009-3.047-0.009 c-0.633,0-1.217,0.066-1.754,0.18l2.199,1.804H37.803z M39.738,23.036c-0.111,0-0.377,0.325-0.537,0.924h1.076 C40.115,23.361,39.854,23.036,39.738,23.036z M39.934,39.867c-0.166,0-0.674,0.705-0.674,1.986s0.506,1.986,0.674,1.986 s0.672-0.705,0.672-1.986S40.102,39.867,39.934,39.867z M38.963,38.889c-0.098-0.038-0.209-0.07-0.348-0.073 c-0.082,0-0.174,0-0.268-0.001l-7.127,4.671c0.879,0.821,2.42,1.417,4.348,1.417c0.979,0,2.27-0.006,3.047-0.01 c0.139,0,0.25-0.034,0.348-0.072c-0.646-0.555-1.07-1.643-1.07-2.967C37.891,40.529,38.316,39.441,38.963,38.889z M32.713,23.96 l-12.37-10.116l-4.693-0.004c0,0,4,8.222,4.827,10.121H32.713z M59.311,32.374c-0.248,2.104-5.305,3.172-8.018,3.172H39.629 l-25.325,16.61L9.607,52.16c0,0,6.687-8.479,7.95-10.207c1.17-1.6,3.019-3.699,3.027-6.407h-2.138 c-5.839,0-13.816-3.789-18.472-5.583c-2.818-1.085-2.396-4.04-0.031-4.04h0.039l-3.299-11.371h3.617c0,0,4.352,5.696,5.846,7.5 c2,2.416,4.503,3.678,8.228,3.87h30.727c2.17,0,4.311,0.417,6.252,1.046c3.49,1.175,5.863,2.7,7.199,4.027 C59.145,31.584,59.352,32.025,59.311,32.374z M22.069,30.408c0-0.815-0.661-1.475-1.469-1.475c-0.812,0-1.471,0.66-1.471,1.475 s0.658,1.475,1.471,1.475C21.408,31.883,22.069,31.224,22.069,30.408z M27.06,30.408c0-0.815-0.656-1.478-1.466-1.478 c-0.812,0-1.471,0.662-1.471,1.478s0.658,1.477,1.471,1.477C26.404,31.885,27.06,31.224,27.06,30.408z M32.055,30.408 c0-0.815-0.66-1.475-1.469-1.475c-0.808,0-1.466,0.66-1.466,1.475s0.658,1.475,1.466,1.475 C31.398,31.883,32.055,31.224,32.055,30.408z M37.049,30.408c0-0.815-0.658-1.478-1.467-1.478c-0.812,0-1.469,0.662-1.469,1.478 s0.656,1.477,1.469,1.477C36.389,31.885,37.049,31.224,37.049,30.408z M42.039,30.408c0-0.815-0.656-1.478-1.465-1.478 c-0.811,0-1.469,0.662-1.469,1.478s0.658,1.477,1.469,1.477C41.383,31.885,42.039,31.224,42.039,30.408z M55.479,30.565 c-0.701-0.436-1.568-0.896-2.627-1.347c-0.613,0.289-1.551,0.476-2.73,0.476c-1.527,0-1.639,2.263,0.164,2.316 C52.389,32.074,54.627,31.373,55.479,30.565z',
                    train: 'path://M67.335,33.596L67.335,33.596c-0.002-1.39-1.153-3.183-3.328-4.218h-9.096v-2.07h5.371 c-4.939-2.07-11.199-4.141-14.89-4.141H19.72v12.421v5.176h38.373c4.033,0,8.457-1.035,9.142-5.176h-0.027 c0.076-0.367,0.129-0.751,0.129-1.165L67.335,33.596L67.335,33.596z M27.999,30.413h-3.105v-4.141h3.105V30.413z M35.245,30.413 h-3.104v-4.141h3.104V30.413z M42.491,30.413h-3.104v-4.141h3.104V30.413z M49.736,30.413h-3.104v-4.141h3.104V30.413z  M14.544,40.764c1.143,0,2.07-0.927,2.07-2.07V35.59V25.237c0-1.145-0.928-2.07-2.07-2.07H-9.265c-1.143,0-2.068,0.926-2.068,2.07 v10.351v3.105c0,1.144,0.926,2.07,2.068,2.07H14.544L14.544,40.764z M8.333,26.272h3.105v4.141H8.333V26.272z M1.087,26.272h3.105 v4.141H1.087V26.272z M-6.159,26.272h3.105v4.141h-3.105V26.272z M-9.265,41.798h69.352v1.035H-9.265V41.798z',
                    ship: 'path://M16.678,17.086h9.854l-2.703,5.912c5.596,2.428,11.155,5.575,16.711,8.607c3.387,1.847,6.967,3.75,10.541,5.375 v-6.16l-4.197-2.763v-5.318L33.064,12.197h-11.48L20.43,15.24h-4.533l-1.266,3.286l0.781,0.345L16.678,17.086z M49.6,31.84 l0.047,1.273L27.438,20.998l0.799-1.734L49.6,31.84z M33.031,15.1l12.889,8.82l0.027,0.769L32.551,16.1L33.031,15.1z M22.377,14.045 h9.846l-1.539,3.365l-2.287-1.498h1.371l0.721-1.352h-2.023l-0.553,1.037l-0.541-0.357h-0.34l0.359-0.684h-2.025l-0.361,0.684 h-3.473L22.377,14.045z M23.695,20.678l-0.004,0.004h0.004V20.678z M24.828,18.199h-2.031l-0.719,1.358h2.029L24.828,18.199z  M40.385,34.227c-12.85-7.009-25.729-14.667-38.971-12.527c1.26,8.809,9.08,16.201,8.213,24.328 c-0.553,4.062-3.111,0.828-3.303,7.137c15.799,0,32.379,0,48.166,0l0.066-4.195l1.477-7.23 C50.842,39.812,45.393,36.961,40.385,34.227z M13.99,35.954c-1.213,0-2.195-1.353-2.195-3.035c0-1.665,0.98-3.017,2.195-3.017 c1.219,0,2.195,1.352,2.195,3.017C16.186,34.604,15.213,35.954,13.99,35.954z M23.691,20.682h-2.02l-0.588,1.351h2.023 L23.691,20.682z M19.697,18.199l-0.721,1.358h2.025l0.727-1.358H19.697z',
                    car: 'path://M49.592,40.883c-0.053,0.354-0.139,0.697-0.268,0.963c-0.232,0.475-0.455,0.519-1.334,0.475 c-1.135-0.053-2.764,0-4.484,0.068c0,0.476,0.018,0.697,0.018,0.697c0.111,1.299,0.697,1.342,0.931,1.342h3.7 c0.326,0,0.628,0,0.861-0.154c0.301-0.196,0.43-0.772,0.543-1.78c0.017-0.146,0.025-0.336,0.033-0.56v-0.01 c0-0.068,0.008-0.154,0.008-0.25V41.58l0,0C49.6,41.348,49.6,41.09,49.592,40.883L49.592,40.883z M6.057,40.883 c0.053,0.354,0.137,0.697,0.268,0.963c0.23,0.475,0.455,0.519,1.334,0.475c1.137-0.053,2.762,0,4.484,0.068 c0,0.476-0.018,0.697-0.018,0.697c-0.111,1.299-0.697,1.342-0.93,1.342h-3.7c-0.328,0-0.602,0-0.861-0.154 c-0.309-0.18-0.43-0.772-0.541-1.78c-0.018-0.146-0.027-0.336-0.035-0.56v-0.01c0-0.068-0.008-0.154-0.008-0.25V41.58l0,0 C6.057,41.348,6.057,41.09,6.057,40.883L6.057,40.883z M49.867,32.766c0-2.642-0.344-5.224-0.482-5.507 c-0.104-0.207-0.766-0.749-2.271-1.773c-1.522-1.042-1.487-0.887-1.766-1.566c0.25-0.078,0.492-0.224,0.639-0.241 c0.326-0.034,0.345,0.274,1.023,0.274c0.68,0,2.152-0.18,2.453-0.48c0.301-0.303,0.396-0.405,0.396-0.672 c0-0.268-0.156-0.818-0.447-1.146c-0.293-0.327-1.541-0.49-2.273-0.585c-0.729-0.095-0.834,0-1.022,0.121 c-0.304,0.189-0.32,1.919-0.32,1.919l-0.713,0.018c-0.465-1.146-1.11-3.452-2.117-5.269c-1.103-1.979-2.256-2.599-2.737-2.754 c-0.474-0.146-0.904-0.249-4.131-0.576c-3.298-0.344-5.922-0.388-8.262-0.388c-2.342,0-4.967,0.052-8.264,0.388 c-3.229,0.336-3.66,0.43-4.133,0.576s-1.633,0.775-2.736,2.754c-1.006,1.816-1.652,4.123-2.117,5.269L9.87,23.109 c0,0-0.008-1.729-0.318-1.919c-0.189-0.121-0.293-0.225-1.023-0.121c-0.732,0.104-1.98,0.258-2.273,0.585 c-0.293,0.327-0.447,0.878-0.447,1.146c0,0.267,0.094,0.379,0.396,0.672c0.301,0.301,1.773,0.48,2.453,0.48 c0.68,0,0.697-0.309,1.023-0.274c0.146,0.018,0.396,0.163,0.637,0.241c-0.283,0.68-0.24,0.524-1.764,1.566 c-1.506,1.033-2.178,1.566-2.271,1.773c-0.139,0.283-0.482,2.865-0.482,5.508s0.189,5.02,0.189,5.86c0,0.354,0,0.976,0.076,1.565 c0.053,0.354,0.129,0.697,0.268,0.966c0.232,0.473,0.447,0.516,1.334,0.473c1.137-0.051,2.779,0,4.477,0.07 c1.135,0.043,2.297,0.086,3.33,0.11c2.582,0.051,1.826-0.379,2.928-0.36c1.102,0.016,5.447,0.196,9.424,0.196 c3.976,0,8.332-0.182,9.423-0.196c1.102-0.019,0.346,0.411,2.926,0.36c1.033-0.018,2.195-0.067,3.332-0.11 c1.695-0.062,3.348-0.121,4.477-0.07c0.886,0.043,1.103,0,1.332-0.473c0.132-0.269,0.218-0.611,0.269-0.966 c0.086-0.592,0.078-1.213,0.078-1.565C49.678,37.793,49.867,35.408,49.867,32.766L49.867,32.766z M13.219,19.735 c0.412-0.964,1.652-2.9,2.256-3.244c0.145-0.087,1.426-0.491,4.637-0.706c2.953-0.198,6.217-0.276,7.73-0.276 c1.513,0,4.777,0.078,7.729,0.276c3.201,0.215,4.502,0.611,4.639,0.706c0.775,0.533,1.842,2.28,2.256,3.244 c0.412,0.965,0.965,2.858,0.861,3.116c-0.104,0.258,0.104,0.388-1.291,0.275c-1.387-0.103-10.088-0.216-14.185-0.216 c-4.088,0-12.789,0.113-14.184,0.216c-1.395,0.104-1.188-0.018-1.291-0.275C12.254,22.593,12.805,20.708,13.219,19.735 L13.219,19.735z M16.385,30.511c-0.619,0.155-0.988,0.491-1.764,0.482c-0.775,0-2.867-0.353-3.314-0.371 c-0.447-0.017-0.842,0.302-1.076,0.362c-0.23,0.06-0.688-0.104-1.377-0.318c-0.688-0.216-1.092-0.155-1.316-1.094 c-0.232-0.93,0-2.264,0-2.264c1.488-0.068,2.928,0.069,5.621,0.826c2.693,0.758,4.191,2.213,4.191,2.213 S17.004,30.357,16.385,30.511L16.385,30.511z M36.629,37.293c-1.23,0.164-6.386,0.207-8.794,0.207c-2.412,0-7.566-0.051-8.799-0.207 c-1.256-0.164-2.891-1.67-1.764-2.865c1.523-1.627,1.24-1.576,4.701-2.023C24.967,32.018,27.239,32,27.834,32 c0.584,0,2.865,0.025,5.859,0.404c3.461,0.447,3.178,0.396,4.699,2.022C39.521,35.623,37.887,37.129,36.629,37.293L36.629,37.293z  M48.129,29.582c-0.232,0.93-0.629,0.878-1.318,1.093c-0.688,0.216-1.145,0.371-1.377,0.319c-0.231-0.053-0.627-0.371-1.074-0.361 c-0.448,0.018-2.539,0.37-3.313,0.37c-0.772,0-1.146-0.328-1.764-0.481c-0.621-0.154-0.966-0.154-0.966-0.154 s1.49-1.464,4.191-2.213c2.693-0.758,4.131-0.895,5.621-0.826C48.129,27.309,48.361,28.643,48.129,29.582L48.129,29.582z'
                };

                var labelSetting = {
                    show: true,
                    position: 'right',
                    offset: [10, 0],
                    textStyle: {
                        fontSize: 16
                    }
                };

                function makeOption(type, symbol) {
                    return {
                        title: {
                            text: 'Vehicles in X City'
                        },
                        legend: {
                            data: ['2015', '2016']
                        },
                        tooltip: {
                            trigger: 'axis',
                            axisPointer: {
                                type: 'shadow'
                            }
                        },
                        grid: {
                            containLabel: true,
                            left: 20
                        },
                        yAxis: {
                            data: ['reindeer', 'ship', 'plane', 'train', 'car'],
                            inverse: true,
                            axisLine: {show: false},
                            axisTick: {show: false},
                            axisLabel: {
                                margin: 30,
                                fontSize: 14
                            },
                            axisPointer: {
                                label: {
                                    show: true,
                                    margin: 30
                                }
                            }
                        },
                        xAxis: {
                            splitLine: {show: false},
                            axisLabel: {show: false},
                            axisTick: {show: false},
                            axisLine: {show: false}
                        },
                        animationDurationUpdate: ANIMATION_DURATION_UPDATE,
                        series: [{
                            name: '2015',
                            id: 'bar1',
                            type,
                            label: labelSetting,
                            symbolRepeat: true,
                            symbolSize: ['80%', '60%'],
                            barCategoryGap: '40%',
                            animationDelayUpdate(idx) {
                                return idx * 500;
                            },
                            universalTransition: {
                                enabled: true,
                                delay(idx, total) {
                                    return (idx  / total) * 1000;
                                }
                            },
                            data: [{
                                value: 157,
                                symbol: symbol || pathSymbols.reindeer
                            }, {
                                value: 21,
                                symbol: symbol || pathSymbols.ship
                            }, {
                                value: 66,
                                symbol: symbol || pathSymbols.plane
                            }, {
                                value: 78,
                                symbol: symbol || pathSymbols.train
                            }, {
                                value: 123,
                                symbol: symbol || pathSymbols.car
                            }]
                        }, {
                            name: '2016',
                            id: 'bar2',
                            type,
                            barGap: '10%',
                            label: labelSetting,
                            symbolRepeat: true,
                            symbolSize: ['80%', '60%'],
                            animationDelayUpdate(idx) {
                                return idx * 500;
                            },
                            universalTransition: {
                                enabled: true,
                                delay(idx, total) {
                                    return (idx  / total) * 1000;
                                }
                            },
                            data: [{
                                value: 184,
                                symbol: symbol || pathSymbols.reindeer
                            }, {
                                value: 29,
                                symbol: symbol || pathSymbols.ship
                            }, {
                                value: 73,
                                symbol: symbol || pathSymbols.plane
                            }, {
                                value: 91,
                                symbol: symbol || pathSymbols.train
                            }, {
                                value: 95,
                                symbol: symbol || pathSymbols.car
                            }]
                        }]
                    };
                }

                var chart = testHelper.create(echarts, 'main3', {
                    title: [
                        'Convert between bar, pictorialBar'
                    ],
                    recordVideo: true,
                    height: 600,
                    buttons: [{
                        text: 'Bar',
                        onclick: function () {
                            chart.setOption(makeOption('bar'));
                        }
                    }, {
                        text: 'Pictorial Bar',
                        onclick: function () {
                            chart.setOption(makeOption('pictorialBar'));
                        }
                    }, {
                        text: 'Pictorial Bar (Diamond)',
                        onclick: function () {
                            chart.setOption(makeOption('pictorialBar', 'diamond'));
                        }
                    }],
                    option: makeOption('bar')
                });
            });
        </script>

        <script>
            require([
                'echarts',
                'data/usa.json'
            ], function (echarts, geojson) {

                echarts.registerMap('USA', geojson, {
                    Alaska: {              // 把阿拉斯加移到美国主大陆左下方
                        left: -131,
                        top: 25,
                        width: 15
                    },
                    Hawaii: {
                        left: -110,        // 夏威夷
                        top: 28,
                        width: 5
                    },
                    'Puerto Rico': {       // 波多黎各
                        left: -76,
                        top: 26,
                        width: 2
                    }
                });

                const data = [
                    {name: 'Alabama', value: 4822023},
                    {name: 'Alaska', value: 731449},
                    {name: 'Arizona', value: 6553255},
                    {name: 'Arkansas', value: 2949131},
                    {name: 'California', value: 38041430},
                    {name: 'Colorado', value: 5187582},
                    {name: 'Connecticut', value: 3590347},
                    {name: 'Delaware', value: 917092},
                    {name: 'District of Columbia', value: 632323},
                    {name: 'Florida', value: 19317568},
                    {name: 'Georgia', value: 9919945},
                    {name: 'Hawaii', value: 1392313},
                    {name: 'Idaho', value: 1595728},
                    {name: 'Illinois', value: 12875255},
                    {name: 'Indiana', value: 6537334},
                    {name: 'Iowa', value: 3074186},
                    {name: 'Kansas', value: 2885905},
                    {name: 'Kentucky', value: 4380415},
                    {name: 'Louisiana', value: 4601893},
                    {name: 'Maine', value: 1329192},
                    {name: 'Maryland', value: 5884563},
                    {name: 'Massachusetts', value: 6646144},
                    {name: 'Michigan', value: 9883360},
                    {name: 'Minnesota', value: 5379139},
                    {name: 'Mississippi', value: 2984926},
                    {name: 'Missouri', value: 6021988},
                    {name: 'Montana', value: 1005141},
                    {name: 'Nebraska', value: 1855525},
                    {name: 'Nevada', value: 2758931},
                    {name: 'New Hampshire', value: 1320718},
                    {name: 'New Jersey', value: 8864590},
                    {name: 'New Mexico', value: 2085538},
                    {name: 'New York', value: 19570261},
                    {name: 'North Carolina', value: 9752073},
                    {name: 'North Dakota', value: 699628},
                    {name: 'Ohio', value: 11544225},
                    {name: 'Oklahoma', value: 3814820},
                    {name: 'Oregon', value: 3899353},
                    {name: 'Pennsylvania', value: 12763536},
                    {name: 'Rhode Island', value: 1050292},
                    {name: 'South Carolina', value: 4723723},
                    {name: 'South Dakota', value: 833354},
                    {name: 'Tennessee', value: 6456243},
                    {name: 'Texas', value: 26059203},
                    {name: 'Utah', value: 2855287},
                    {name: 'Vermont', value: 626011},
                    {name: 'Virginia', value: 8185867},
                    {name: 'Washington', value: 6897012},
                    {name: 'West Virginia', value: 1855413},
                    {name: 'Wisconsin', value: 5726398},
                    {name: 'Wyoming', value: 576412},
                    {name: 'Puerto Rico', value: 3667084}
                ];
                function makeMapOption() {
                    return {
                        visualMap: {
                            min: 500000,
                            max: 38000000,
                            inRange: {
                                color: ['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026']
                            },
                            text: ['High', 'Low'],           // 文本，默认为数值文本
                            calculable: true
                        },
                        animationDurationUpdate: ANIMATION_DURATION_UPDATE,
                        series: {
                            type: 'map',
                            id: 'main',
                            map: 'USA',
                            data,
                            universalTransition: true
                        }
                    }
                }

                function makeBarOption() {
                    return {
                        xAxis: {
                            type: 'category',
                            axisLabel: {
                                rotate: 30
                            },
                            data: data.map(item => item.name)
                        },
                        yAxis: {
                        },
                        animationDurationUpdate: ANIMATION_DURATION_UPDATE,
                        series: {
                            type: 'bar',
                            id: 'main',
                            data: data.map(item => item.value),
                            universalTransition: true
                        }
                    }
                }
                var chart = testHelper.create(echarts, 'main4', {
                    title: [
                        'Convert between bar, map',
                        'This case also enables lazyUpdate and setOption multiple times. Check if transition is correct.'
                    ],
                    recordVideo: true,
                    height: 600,
                    buttons: [{
                        text: 'Map',
                        onclick: function () {
                            // Set option multiple times. Check if transition is correct.
                            chart.setOption(makeMapOption(), true, true);
                            chart.setOption(makeBarOption(), true, true);
                            chart.setOption(makeMapOption(), true, true);
                        }
                    }, {
                        text: 'Bar',
                        onclick: function () {
                            chart.setOption(makeBarOption(), true, true);
                            chart.setOption(makeMapOption(), true, true);
                            chart.setOption(makeBarOption(), true, true);
                        }
                    }],
                    option: makeBarOption()
                });
            });
        </script>

        <script>
            require([
                'echarts'
            ], function (echarts) {
                var option = {
                    tooltip: {
                        trigger: 'item'
                    },
                    legend: {
                        top: '5%',
                        left: 'center'
                    },
                    series: [
                        {
                            name: '访问来源',
                            type: 'pie',
                            radius: ['40%', '70%'],
                            avoidLabelOverlap: false,
                            itemStyle: {
                                borderRadius: 10,
                                borderColor: '#fff',
                                borderWidth: 2
                            },
                            label: {
                                show: false,
                                position: 'center'
                            },
                            universalTransition: true,
                            animationDurationUpdate: ANIMATION_DURATION_UPDATE,
                            data: [
                                {value: 1048, name: '搜索引擎'},
                                {value: 735, name: '直接访问'},
                                {value: 580, name: '邮件营销'},
                                {value: 484, name: '联盟广告'},
                                {value: 300, name: '视频广告'}
                            ]
                        }
                    ]
                };
                var chart = testHelper.create(echarts, 'main5', {
                    title: [
                        'Style should be animated in same series.'
                    ],
                    recordVideo: true,
                    buttons: [{
                        text: 'random style',
                        onclick: function () {
                            chart.setOption({
                                color: [1, 2, 3, 4, 5].map(item => echarts.color.random()),
                                series: [{
                                    itemStyle: {
                                        borderColor: echarts.color.random(),
                                        borderWidth: Math.random() * 5 + 1
                                    }
                                }]
                            })
                        }
                    }],
                    option: option
                });
            });
        </script>
    </body>
</html>

