
<!--
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>
        <link rel="stylesheet" href="lib/reset.css" />
    </head>
    <body>
        <style>
            .split {
                line-height: 60px;
                height: 60px;
                background: #ddd;
                text-align: center;
                font-weight: bold;
                font-size: 20px;
            }
            .main {
                height: 80%;
            }
        </style>

        <div class="split">Color Hue</div>
        <div id="main1" class="main"></div>
        <div class="split">Color List</div>
        <div id="main2" class="main"></div>
        <div class="split">Map</div>
        <div id="main3" class="main"></div>
        <div class="split">Stacked Bar (and inversed)</div>
        <div id="main4" class="main"></div>






        <script type="text/javascript">
            require([
                'echarts'
                // 'echarts/chart/bar',
                // 'echarts/component/grid',
                // 'echarts/component/visualMapContinuous'
            ], function (echarts) {

                var main = document.getElementById('main1');
                if (!main) {
                    return;
                }
                var chart = echarts.init(main);

                var data0 = [];

                var MAX_DIM1 = 100;

                var itemStyle = {
                    normal: {
                        opacity: 0.8,
                        shadowBlur: 10,
                        shadowOffsetX: 0,
                        shadowOffsetY: 0,
                        shadowColor: 'rgba(0, 0, 0, 0.3)'
                    }
                };

                var last = 60;
                var lastDelta = 20;
                for (var i = 0; i < MAX_DIM1; i++) {
                    lastDelta += (Math.random() - 0.5) * 15;
                    data0.push([
                        i,
                        last += lastDelta
                    ]);
                }

                chart.setOption({
                    grid: {
                        top: 100,
                        bottom: 100
                    },
                    xAxis: {
                        type: 'value',
                        splitLine: {
                            show: false
                        }
                    },
                    yAxis: {
                        type: 'value',
                        splitLine: {
                            show: false
                        }
                    },
                    visualMap: [
                        {
                            show: true,
                            left: 'center',
                            bottom: 20,
                            orient: 'horizontal',
                            itemWidth: 20,
                            itemHeight: 200,
                            min: 0,
                            max: MAX_DIM1,
                            calculable: true,
                            range: [5, 95],
                            dimension: 0,
                            inRange: {
                                colorHue: [0, 300],
                                colorLightness: 0.35,
                                colorSaturation: 1
                            },
                            outOfRange: {
                                color: '#eee'
                            }
                        }
                    ],
                    series: [
                        {
                            name: 'bar',
                            type: 'bar',
                            barMaxWidth: 10,
                            itemStyle: itemStyle,
                            data: data0
                        }
                    ]
                });
            })
        </script>














        <script type="text/javascript">
            require([
                'echarts'
                // 'echarts/chart/scatter',
                // 'echarts/component/legend',
                // 'echarts/component/grid',
                // 'echarts/component/visualMapContinuous'
            ], function (echarts) {

                var main = document.getElementById('main2');
                if (!main) {
                    return;
                }
                var chart = echarts.init(main);

                var data0 = [];
                var data1 = [];

                var MAX_DIM2 = 300;
                var MAX_DIM3 = 20000;

                var itemStyle = {
                    normal: {
                        opacity: 0.8,
                        shadowBlur: 10,
                        shadowOffsetX: 0,
                        shadowOffsetY: 0,
                        shadowColor: 'rgba(0, 0, 0, 0.5)'
                    }
                };

                for (var i = 0; i < 60; i++) {
                    data0.push(genDataItem());
                    data1.push(genDataItem());
                }

                function genDataItem() {
                    return [
                        Math.random() * 5,
                        Math.random() * 4,
                        Math.random() * MAX_DIM2,
                        Math.random() * MAX_DIM3
                    ];
                }

                chart.setOption({
                    color: ['#555', '#555'],
                    legend: {
                        top: 20,
                        data: ['scatter0', 'scatter1']
                    },
                    grid: {
                        top: 100,
                        bottom: 60,
                        left: 150
                    },
                    xAxis: {
                        type: 'value',
                        splitLine: {
                            show: false
                        }
                    },
                    yAxis: {
                        type: 'value',
                        splitLine: {
                            show: false
                        }
                    },
                    visualMap: [
                        {
                            show: true,
                            top: 'center',
                            left: 30,
                            itemHeight: 400,
                            min: 0,
                            max: MAX_DIM2,
                            calculable: true,
                            dimension: 2,
                            range: [15, 278],
                            inRange: {
                                color: ['blue', 'orange', 'yellow']
                            },
                            outOfRange: {
                                color: '#ddd'
                            }
                        },
                        {
                            show: false,
                            min: 0,
                            max: MAX_DIM3,
                            dimension: 3,
                            inRange: {
                                symbolSize: [3, 40]
                            },
                            outOfRange: {
                                symbolSize: [3, 40]
                            }
                        }
                    ],
                    series: [
                        {
                            name: 'scatter0',
                            type: 'scatter',
                            symbol: 'circle',
                            itemStyle: itemStyle,
                            data: data0
                        },
                        {
                            name: 'scatter1',
                            type: 'scatter',
                            symbol: 'diamond',
                            itemStyle: itemStyle,
                            data: data1
                        }
                    ]
                });
            })
        </script>












        <script type="text/javascript">
            require([
                'echarts',
                'map/js/world'
                // 'echarts/chart/map',
                // 'echarts/component/legend',
                // 'echarts/component/visualMapContinuous',
            ], function (echarts) {
                renderWorldMap(echarts);
            });

            function renderWorldMap(echarts) {
                var main = document.getElementById('main3');
                if (!main) {
                    return;
                }
                var chart = echarts.init(main);

                option = {
                    title: {
                        text: 'World Population (2010)',
                        subtext: 'from United Nations, Total population, both sexes combined, as of 1 July (thousands)',
                        sublink: 'http://esa.un.org/wpp/Excel-Data/population.htm',
                        left: 'center',
                        top: 'top'
                    },
                    tooltip: {
                        trigger: 'item',
                        formatter: function (params) {
                            var value = (params.value + '').split('.');
                            value = value[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g, '$1,')
                                    + '.' + value[1];
                            return params.seriesName + '<br/>' + params.name + ' : ' + value;
                        }
                    },
                    toolbox: {
                        show: true,
                        orient: 'vertical',
                        left: 'right',
                        top: 'center',
                        feature: {
                            dataView: {readOnly: false},
                            restore: {},
                            saveAsImage: {}
                        }
                    },
                    visualMap: {
                        min: 0,
                        max: 1000000,
                        left: 10,
                        bottom: 70,
                        itemHeight: 200,
                        hoverLinkDataSize: 100000,
                        text: ['High', 'Low'],
                        // realtime: false,
                        calculable: true,
                        color: ['orangered', 'yellow', 'lightskyblue']
                    },
                    series: [
                        {
                            name: 'World Population (2010)',
                            type: 'map',
                            mapType: 'world',
                            roam: true,
                            itemStyle:{
                                emphasis:{label:{show:true}}
                            },
                            data:[
                                {name: 'Afghanistan', value: 28397.812},
                                {name: 'Angola', value: 19549.124},
                                {name: 'Albania', value: 3150.143},
                                {name: 'United Arab Emirates', value: 8441.537},
                                {name: 'Argentina', value: 40374.224},
                                {name: 'Armenia', value: 2963.496},
                                {name: 'French Southern and Antarctic Lands', value: 268.065},
                                {name: 'Australia', value: 22404.488},
                                {name: 'Austria', value: 8401.924},
                                {name: 'Azerbaijan', value: 9094.718},
                                {name: 'Burundi', value: 9232.753},
                                {name: 'Belgium', value: 10941.288},
                                {name: 'Benin', value: 9509.798},
                                {name: 'Burkina Faso', value: 15540.284},
                                {name: 'Bangladesh', value: 151125.475},
                                {name: 'Bulgaria', value: 7389.175},
                                {name: 'The Bahamas', value: 66402.316},
                                {name: 'Bosnia and Herzegovina', value: 3845.929},
                                {name: 'Belarus', value: 9491.07},
                                {name: 'Belize', value: 308.595},
                                {name: 'Bermuda', value: 64.951},
                                {name: 'Bolivia', value: 716.939},
                                {name: 'Brazil', value: 195210.154},
                                {name: 'Brunei', value: 27.223},
                                {name: 'Bhutan', value: 716.939},
                                {name: 'Botswana', value: 1969.341},
                                {name: 'Central African Republic', value: 4349.921},
                                {name: 'Canada', value: 34126.24},
                                {name: 'Switzerland', value: 7830.534},
                                {name: 'Chile', value: 17150.76},
                                {name: 'China', value: 1359821.465},
                                {name: 'Ivory Coast', value: 60508.978},
                                {name: 'Cameroon', value: 20624.343},
                                {name: 'Democratic Republic of the Congo', value: 62191.161},
                                {name: 'Republic of the Congo', value: 3573.024},
                                {name: 'Colombia', value: 46444.798},
                                {name: 'Costa Rica', value: 4669.685},
                                {name: 'Cuba', value: 11281.768},
                                {name: 'Northern Cyprus', value: 1.468},
                                {name: 'Cyprus', value: 1103.685},
                                {name: 'Czech Republic', value: 10553.701},
                                {name: 'Germany', value: 83017.404},
                                {name: 'Djibouti', value: 834.036},
                                {name: 'Denmark', value: 5550.959},
                                {name: 'Dominican Republic', value: 10016.797},
                                {name: 'Algeria', value: 37062.82},
                                {name: 'Ecuador', value: 15001.072},
                                {name: 'Egypt', value: 78075.705},
                                {name: 'Eritrea', value: 5741.159},
                                {name: 'Spain', value: 46182.038},
                                {name: 'Estonia', value: 1298.533},
                                {name: 'Ethiopia', value: 87095.281},
                                {name: 'Finland', value: 5367.693},
                                {name: 'Fiji', value: 860.559},
                                {name: 'Falkland Islands', value: 49.581},
                                {name: 'France', value: 63230.866},
                                {name: 'Gabon', value: 1556.222},
                                {name: 'United Kingdom', value: 62066.35},
                                {name: 'Georgia', value: 4388.674},
                                {name: 'Ghana', value: 24262.901},
                                {name: 'Guinea', value: 10876.033},
                                {name: 'Gambia', value: 1680.64},
                                {name: 'Guinea Bissau', value: 10876.033},
                                {name: 'Equatorial Guinea', value: 696.167},
                                {name: 'Greece', value: 11109.999},
                                {name: 'Greenland', value: 56.546},
                                {name: 'Guatemala', value: 14341.576},
                                {name: 'French Guiana', value: 231.169},
                                {name: 'Guyana', value: 786.126},
                                {name: 'Honduras', value: 7621.204},
                                {name: 'Croatia', value: 4338.027},
                                {name: 'Haiti', value: 9896.4},
                                {name: 'Hungary', value: 10014.633},
                                {name: 'Indonesia', value: 240676.485},
                                {name: 'India', value: 1205624.648},
                                {name: 'Ireland', value: 4467.561},
                                {name: 'Iran', value: 240676.485},
                                {name: 'Iraq', value: 30962.38},
                                {name: 'Iceland', value: 318.042},
                                {name: 'Israel', value: 7420.368},
                                {name: 'Italy', value: 60508.978},
                                {name: 'Jamaica', value: 2741.485},
                                {name: 'Jordan', value: 6454.554},
                                {name: 'Japan', value: 127352.833},
                                {name: 'Kazakhstan', value: 15921.127},
                                {name: 'Kenya', value: 40909.194},
                                {name: 'Kyrgyzstan', value: 5334.223},
                                {name: 'Cambodia', value: 14364.931},
                                {name: 'South Korea', value: 51452.352},
                                {name: 'Kosovo', value: 97.743},
                                {name: 'Kuwait', value: 2991.58},
                                {name: 'Laos', value: 6395.713},
                                {name: 'Lebanon', value: 4341.092},
                                {name: 'Liberia', value: 3957.99},
                                {name: 'Libya', value: 6040.612},
                                {name: 'Sri Lanka', value: 20758.779},
                                {name: 'Lesotho', value: 2008.921},
                                {name: 'Lithuania', value: 3068.457},
                                {name: 'Luxembourg', value: 507.885},
                                {name: 'Latvia', value: 2090.519},
                                {name: 'Morocco', value: 31642.36},
                                {name: 'Moldova', value: 103.619},
                                {name: 'Madagascar', value: 21079.532},
                                {name: 'Mexico', value: 117886.404},
                                {name: 'Macedonia', value: 507.885},
                                {name: 'Mali', value: 13985.961},
                                {name: 'Myanmar', value: 51931.231},
                                {name: 'Montenegro', value: 620.078},
                                {name: 'Mongolia', value: 2712.738},
                                {name: 'Mozambique', value: 23967.265},
                                {name: 'Mauritania', value: 3609.42},
                                {name: 'Malawi', value: 15013.694},
                                {name: 'Malaysia', value: 28275.835},
                                {name: 'Namibia', value: 2178.967},
                                {name: 'New Caledonia', value: 246.379},
                                {name: 'Niger', value: 15893.746},
                                {name: 'Nigeria', value: 159707.78},
                                {name: 'Nicaragua', value: 5822.209},
                                {name: 'Netherlands', value: 16615.243},
                                {name: 'Norway', value: 4891.251},
                                {name: 'Nepal', value: 26846.016},
                                {name: 'New Zealand', value: 4368.136},
                                {name: 'Oman', value: 2802.768},
                                {name: 'Pakistan', value: 173149.306},
                                {name: 'Panama', value: 3678.128},
                                {name: 'Peru', value: 29262.83},
                                {name: 'Philippines', value: 93444.322},
                                {name: 'Papua New Guinea', value: 6858.945},
                                {name: 'Poland', value: 38198.754},
                                {name: 'Puerto Rico', value: 3709.671},
                                {name: 'North Korea', value: 1.468},
                                {name: 'Portugal', value: 10589.792},
                                {name: 'Paraguay', value: 6459.721},
                                {name: 'Qatar', value: 1749.713},
                                {name: 'Romania', value: 21861.476},
                                {name: 'Russia', value: 21861.476},
                                {name: 'Rwanda', value: 10836.732},
                                {name: 'Western Sahara', value: 514.648},
                                {name: 'Saudi Arabia', value: 27258.387},
                                {name: 'Sudan', value: 35652.002},
                                {name: 'South Sudan', value: 9940.929},
                                {name: 'Senegal', value: 12950.564},
                                {name: 'Solomon Islands', value: 526.447},
                                {name: 'Sierra Leone', value: 5751.976},
                                {name: 'El Salvador', value: 6218.195},
                                {name: 'Somaliland', value: 9636.173},
                                {name: 'Somalia', value: 9636.173},
                                {name: 'Republic of Serbia', value: 3573.024},
                                {name: 'Suriname', value: 524.96},
                                {name: 'Slovakia', value: 5433.437},
                                {name: 'Slovenia', value: 2054.232},
                                {name: 'Sweden', value: 9382.297},
                                {name: 'Swaziland', value: 1193.148},
                                {name: 'Syria', value: 7830.534},
                                {name: 'Chad', value: 11720.781},
                                {name: 'Togo', value: 6306.014},
                                {name: 'Thailand', value: 66402.316},
                                {name: 'Tajikistan', value: 7627.326},
                                {name: 'Turkmenistan', value: 5041.995},
                                {name: 'East Timor', value: 10016.797},
                                {name: 'Trinidad and Tobago', value: 1328.095},
                                {name: 'Tunisia', value: 10631.83},
                                {name: 'Turkey', value: 72137.546},
                                {name: 'United Republic of Tanzania', value: 44973.33},
                                {name: 'Uganda', value: 33987.213},
                                {name: 'Ukraine', value: 46050.22},
                                {name: 'Uruguay', value: 3371.982},
                                {name: 'United States of America', value: 312247.116},
                                {name: 'Uzbekistan', value: 27769.27},
                                {name: 'Venezuela', value: 236.299},
                                {name: 'Vietnam', value: 89047.397},
                                {name: 'Vanuatu', value: 236.299},
                                {name: 'West Bank', value: 13.565},
                                {name: 'Yemen', value: 22763.008},
                                {name: 'South Africa', value: 51452.352},
                                {name: 'Zambia', value: 13216.985},
                                {name: 'Zimbabwe', value: 13076.978}
                            ]
                        }
                    ]
                };

                chart.setOption(option);
            }
        </script>









        <script type="text/javascript">

            require([
                'echarts'
                // 'echarts/chart/bar',
                // 'echarts/chart/line',
                // 'echarts/component/legend',
                // 'echarts/component/grid',
                // 'echarts/component/tooltip',
                // 'echarts/component/toolbox',
                // 'zrender/vml/vml'
            ], function (echarts) {

                var main = document.getElementById('main4');
                if (!main) {
                    return;
                }
                var chart = echarts.init(main);

                var xAxisData = [];
                var data1 = [];
                var data2 = [];
                var data3 = [];
                var data4 = [];

                for (var i = 0; i < 10; i++) {
                    xAxisData.push('Class' + i);
                    data1.push((Math.random() * 2).toFixed(2));
                    data2.push(-Math.random().toFixed(2));
                    data3.push((Math.random() * 5).toFixed(2));
                    data4.push((Math.random() + 0.3).toFixed(2));
                }

                var itemStyle = {
                    normal: {
                        label: {
                            show: true,
                            position: 'outside'
                        }
                    },
                    emphasis: {
                        label: {
                            position: 'outside'
                        },
                        barBorderWidth: 1,
                        shadowBlur: 10,
                        shadowOffsetX: 0,
                        shadowOffsetY: 0,
                        shadowColor: 'rgba(0,0,0,0.5)'
                    }
                };

                chart.setOption({
                    backgroundColor: '#eee',
                    legend: {
                        data: ['bar', 'bar2', 'bar3', 'bar4'],
                        align: 'left'
                    },
                    toolbox: {
                        feature: {
                            magicType: {
                                type: ['line', 'bar', 'stack', 'tiled']
                            },
                            dataView: {}
                        }
                    },
                    tooltip: {},
                    xAxis: {
                        data: xAxisData,
                        name: 'X Axis',
                        silent: false,
                        axisLine: {onZero: true},
                        splitLine: {show: false},
                        splitArea: {show: false}
                    },
                    yAxis: {
                        inverse: true,
                        splitArea: {show: false}
                    },
                    grid: {
                        left: 100
                    },
                    visualMap: {
                        type: 'continuous',
                        dimension: 1,
                        text: ['High', 'Low'],
                        inverse: true,
                        itemHeight: 200,
                        calculable: true,
                        min: -2,
                        max: 6,
                        top: 60,
                        left: 10
                    },
                    series: [
                        {
                            name: 'bar',
                            type: 'bar',
                            stack: 'one',
                            itemStyle: itemStyle,
                            data: data1
                        },
                        {
                            name: 'bar2',
                            type: 'bar',
                            stack: 'one',
                            itemStyle: itemStyle,
                            data: data2
                        },
                        {
                            name: 'bar3',
                            type: 'bar',
                            stack: 'two',
                            itemStyle: itemStyle,
                            data: data3
                        },
                        {
                            name: 'bar4',
                            type: 'bar',
                            stack: 'two',
                            itemStyle: itemStyle,
                            data: data4
                        }
                    ]
                });

                // Check setOption at the second time.
                chart.setOption({
                    visualMap: {
                        outOfRange: {color: '#aaa'}
                    }
                });
            });
        </script>


    </body>
</html>