<!DOCTYPE html><html><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"><link rel="shortcut icon" href="https://echarts.apache.org/examples/images/favicon.png?_v_=20200710_1"><!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries--><!--[if lt IE 9]><script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script><script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script><![endif]--><link rel="stylesheet" type="text/css" href="https://echarts.apache.org/examples/stylesheets/main.css?_v_=1611065438834"><title>Examples - Apache ECharts</title><script type="text/javascript">window.EC_DEMO_LANG = 'en';
</script></head><body><div id="apache-banner"><div class="txt"><p>Apache ECharts is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator.</p><p>We are working on redirecting this Website to <a href="https://echarts.apache.org" target="_blank">https://echarts.apache.org</a>. You may visit our new official Website now for the latest information.</p></div><a href="https://echarts.apache.org" target="_blank" onclick="logApache()" class="btn"><div>Visit Official Website</div></a><a href="javascript:;" onclick="closeApacheBanner(true)" class="close-btn">x</a></div><div id="view-main"><div class="control-panel"></div><div id="view-chart" class="chart"></div></div><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@1.11.3/dist/jquery.min.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/lodash@3.10.1/index.min.js"></script><script type="text/javascript" src="https://echarts.apache.org/examples/javascripts/common.js?_v_=1611065438834"></script><script type="text/javascript">function changeLang(lang) {
    if (lang === 'en') {
        if (location.hostname !== 'echarts.apache.org') {
            var re = new RegExp('/zh/', 'g');
            var pathname = location.pathname.replace(re, '/en/');

            var url = 'https://echarts.apache.org' + pathname
                + location.search + location.hash;
            location.href = url;
            return;
        }
    }
    location.href = location.href.replace(
        new RegExp('/(zh|en)/', 'g'), '/' + lang + '/'
    );
}

window.EC_EXAMPLE_IS_GL = (function () {
    var urlParams = (location.search || '').replace(/^\?/, '').split('&');
    for (var i = 0; i < urlParams.length; i++) {
        var kv = urlParams[i].split('=');
        if (kv[0] === 'gl' && kv[1] && kv[1] !== '0') {
            return true;
        }
    }
    return false;
})();

// ROOT_PATH is also used in example js. So we also use https://echarts.apache.org/examples.
// But echarts-gl do not support CORS yet, still use same origin.
window.ROOT_PATH = EC_EXAMPLE_IS_GL ? 'https://echarts.apache.org/examples' : 'https://echarts.apache.org/examples';
window.CDN_PAY_ROOT_PATH = 'https://echarts.apache.org/examples';
window.CDN_PAY_VERSION = '20200710_1';
window.CDN_THIRD_PARTY_ECHARTS_GL = 'https://cdn.jsdelivr.net/npm/echarts-gl@1/dist/echarts-gl.min.js'
</script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/dat.gui@0.6.5/build/dat.gui.min.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts@4/dist/echarts.min.js?_v_=1611065438834"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts-stat@1/dist/ecStat.min.js"></script><script id="echarts-js" type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts@4/map/js/china.js?_v_=1611065438834"></script><script id="echarts-js" type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts@4/map/js/world.js?_v_=1611065438834"></script><script id="echarts-js" type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts@4/dist/extension/dataTool.js?_v_=1611065438834"></script><script id="echarts-js" type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&amp;ak=KOmVjPVUAey1G2E8zNhPiuQ6QiEmAwZu&amp;__ec_v__=20190126"></script><script id="echarts-js" type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts@4/dist/extension/bmap.js?_v_=1611065438834"></script><script type="text/javascript" src="https://echarts.apache.org/examples/javascripts/view.js?_v_=1611065438834"></script><!-- Baidu Tongji--><script type="text/javascript">var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");

hm.src = "https://hm.baidu.com/hm.js?54b918eee37cb8a7045f0fd0f0b24395";

var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script><!-- Google Analytics--><script type="text/javascript" async src="https://www.googletagmanager.com/gtag/js?id=UA-141228404-1"></script><script type="text/javascript">window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-141228404-1');</script></body></html>