
<!--
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/simpleRequire.js"></script>
        <script src="lib/config.js"></script>
        <meta name="viewport" content="width=device-width, initial-scale=1" />
    </head>
    <body>
        <style>
            html, body, #main {
                width: 100%;
                height: 100%;
                margin: 0;
            }
            html, body, .test-chart {
                width: 100%;
                height: 100%;
                margin: 0;
            }
            #main {
                background: #fff;
            }
        </style>
        <div id="main"></div>
        <h1>polar negative</h1>
        <div id="polar-negative" class="test-chart"></div>
        <h1>polar min negative</h1>
        <div id="polar-min-negative" class="test-chart"></div>
        <h1>polar max negative</h1>
        <div id="polar-max-negative" class="test-chart"></div>
        <h1>polar radius min > 0</h1>
        <div id="polar-radius-min-positive" class="test-chart"></div>
        <script>

            require(['echarts'], function (echarts) {

                var chart = echarts.init(document.getElementById('main'));

                chart.setOption({
                    angleAxis: {
                    },
                    radiusAxis: {
                        type: 'category',
                        data: ['周一', '周二', '周三', '周四'],
                        z: 10
                    },
                    polar: {
                        radius: [50, 200]
                    },
                    series: [{
                        type: 'bar',
                        data: [1, 2, 3, 4],
                        coordinateSystem: 'polar',
                        name: 'A',
                        stack: 'a'
                    }, {
                        type: 'bar',
                        data: [2, 4, 6, 8],
                        coordinateSystem: 'polar',
                        name: 'B',
                        stack: 'a'
                    }, {
                        type: 'bar',
                        data: [1, 2, 3, 4],
                        coordinateSystem: 'polar',
                        name: 'C',
                        stack: 'a'
                    }],
                    legend: {
                        show: true,
                        data: ['A', 'B', 'C']
                    }
                });

                chart.on('click', function (params) {
                    console.log(params);
                });

                window.onresize = chart.resize;
            });
        </script>
        <script>
            require([
                'echarts'
            ], function (echarts) {

                var chart = echarts.init(document.getElementById('polar-negative'), null, {});

                var data = [];

                chart.setOption({
                    angleAxis: {
                    type: 'category',
                    data: ['S1', 'S2', 'S3']
                },
                radiusAxis: {
                    min:-1,
                    max: 3
                },
                polar: {
                    radius: [50, 200]
                },
                series: [{
                    type: 'bar',
                    data: [1, 1, 1],
                    coordinateSystem: 'polar',
                    itemStyle:{
                        color:"blue"
                    },
                    name: 'A',
                    stack: 'a'
                }, {
                    type: 'bar',
                    data: [1, 1, 1],
                    coordinateSystem: 'polar',
                    name: 'B',
                    stack: 'a'
                }, {
                    type: 'bar',
                    data: [1, 1, 1],
                    coordinateSystem: 'polar',
                    name: 'C',
                    stack: 'a'
                }],
                legend: {
                    show: true,
                    data: ['A', 'B', 'C']
                }
                });
            })
        </script>
        <script>
            require([
                'echarts'
            ], function (echarts) {

                var chart = echarts.init(document.getElementById('polar-min-negative'), null, {});

                var data = [];

                chart.setOption({
                    angleAxis: {
                        type: 'category',
                        data: ['S1', 'S2', 'S3']
                    },
                    radiusAxis: {
                        min: -3,
                        max: 1
                    },
                    polar: {
                        radius: [50, 200]
                    },
                    series: [{
                        type: 'bar',
                        data: [-2, 1, 1],
                        coordinateSystem: 'polar',
                        itemStyle:{
                            color:"blue"
                        },
                        name: 'A',
                        stack: 'a'
                    }, {
                        type: 'bar',
                        data: [-1, 1, 1],
                        coordinateSystem: 'polar',
                        name: 'B',
                        stack: 'a'
                    }, {
                        type: 'bar',
                        data: [1, 1, 1],
                        coordinateSystem: 'polar',
                        name: 'C',
                        stack: 'a'
                    }],
                    legend: {
                        show: true,
                        data: ['A', 'B', 'C']
                    }
                });
            })
        </script>
        <script>
            require([
                'echarts'
            ], function (echarts) {

                var chart = echarts.init(document.getElementById('polar-max-negative'), null, {});

                var data = [];

                chart.setOption({
                    angleAxis: {
                        type: 'category',
                        data: ['S1', 'S2', 'S3']
                    },
                    radiusAxis: {
                        min: -6,
                        max: -1
                    },
                    polar: {
                        radius: [50, 200]
                    },
                    series: [{
                        type: 'bar',
                        data: [-2, 1, 1],
                        coordinateSystem: 'polar',
                        itemStyle:{
                            color:"blue"
                        },
                        name: 'A',
                        stack: 'a'
                    }, {
                        type: 'bar',
                        data: [-1, 1, 1],
                        coordinateSystem: 'polar',
                        name: 'B',
                        stack: 'a'
                    }, {
                        type: 'bar',
                        data: [1, 1, 1],
                        coordinateSystem: 'polar',
                        name: 'C',
                        stack: 'a'
                    }],
                    legend: {
                        show: true,
                        data: ['A', 'B', 'C']
                    }
                });
            })
        </script>

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

                var chart = echarts.init(document.getElementById('polar-radius-min-positive'), null, {});

                var data = [];

                chart.setOption({
                    angleAxis: {
                        type: 'category',
                        data: ['S1', 'S2', 'S3']
                    },
                    radiusAxis: {
                        min: 1,
                        max: 6
                    },
                    polar: {
                        radius: [50, 200]
                    },
                    series: [{
                        type: 'bar',
                        data: [2, 2, 2],
                        coordinateSystem: 'polar',
                        itemStyle:{
                            color:"blue"
                        },
                        name: 'A',
                        stack: 'a'
                    },
                    {
                        type: 'bar',
                        data: [2, 2, 2],
                        coordinateSystem: 'polar',
                        name: 'B',
                        stack: 'a'
                    },
                    {
                        type: 'bar',
                        data: [2, 2, 2],
                        coordinateSystem: 'polar',
                        name: 'C',
                        stack: 'a'
                    }],
                    legend: {
                        show: true,
                        data: ['A', 'B', 'C']
                    }
                });
            })

        </script>
    </body>
</html>
