<!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" user-scalable="no"><meta name="description" content="ECharts, a powerful, interactive charting and visualization library for browser"><link rel="shortcut icon" href="images/favicon.png"><link rel="stylesheet" type="text/css" href="./vendors/bootstrap/css/bootstrap.min.css"><!-- 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="./css/main.css"><script type="text/javascript" src="./vendors/pace/pace.min.js"></script><script id="font-hack" type="text/javascript">if (/windows/i.test(navigator.userAgent)) {
    var el = document.createElement('style');
    el.innerHTML = ''
        + '@font-face {font-family:"noto-thin";src:local("Microsoft Yahei");}'
        + '@font-face {font-family:"noto-light";src:local("Microsoft Yahei");}';
    document.head.insertBefore(el, document.getElementById('font-hack'));
}
</script><title>ECharts Documentation</title><link rel="stylesheet" type="text/css" href="css/ecOption.css?_v_=1478158214015"><link rel="stylesheet" type="text/css" href="vendors/prettify/prettify.css"><link rel="stylesheet" type="text/css" href="vendors/perfect-scrollbar/0.6.8/css/perfect-scrollbar.min.css"><link rel="stylesheet" type="text/css" href="vendors/jquery-autocomplete/jquery.auto-complete.css">
<script src="js/log.js"></script><script src="vendors/prettify/prettify.js"></script><script src="vendors/prettify/lang-css.js"></script><script src="vendors/esl.js"></script><script type="text/javascript" src="./vendors/jquery/jquery.min.js"></script></head><!--[if lte IE 8]>
<body class="lower-ie">
<![endif]-->
<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><div id="lowie-main"><img src="./images/forie.png" alt="ie tip"></div><div id="main"><nav class="navbar navbar-default navbar-fixed-top"><div class="container-fluid"><div class="navbar-header"><button type="button" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false" class="navbar-toggle collapsed"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a href="http://echarts.baidu.com/index.html" class="navbar-brand"><img src="./images/logo.png" alt="echarts logo" class="navbar-logo"></a></div><div id="bs-example-navbar-collapse-1" class="collapse navbar-collapse"><ul class="nav navbar-nav navbar-right"><li id="nav-index"><a href="http://echarts.baidu.com/index.html">首页</a></li><li id="nav-doc" class="dropdown"><a href="#" data-toggle="dropdown" class="dropdown-toggle">文档<b class="caret"></b></a><ul class="dropdown-menu"><li><a href="http://echarts.baidu.com/tutorial.html">教程</a></li><li><a href="http://echarts.baidu.com/api.html">API</a></li><li><a href="http://echarts.baidu.com/option.html">配置项手册</a></li><li><a href="http://echarts.baidu.com/changelog.html">CHANGELOG</a></li></ul></li><li id="nav-examples"><a href="#" data-toggle="dropdown" class="dropdown-toggle">作品<b class="caret"></b></a><ul class="dropdown-menu"><li><a href="http://echarts.baidu.com/examples.html">官方示例</a></li><li><a href="http://gallery.echartsjs.com">GALLERY</a></li></ul></li><li id="nav-download" class="dropdown"><a href="#" data-toggle="dropdown" class="dropdown-toggle">下载<b class="caret"></b></a><ul class="dropdown-menu"><li><a href="http://echarts.baidu.com/download.html">下载</a></li><li><a href="http://echarts.baidu.com/builder.html">在线构建</a></li><li><a href="http://echarts.baidu.com/download-map.html">地图下载</a></li><li><a href="http://ecomfe.github.io/echarts-map-tool/">地图构建</a></li><li><a href="http://echarts.baidu.com/download-theme.html">主题下载</a></li><li><a href="http://echarts.baidu.com/theme-builder/">主题构建</a></li><li><a href="http://echarts.baidu.com/spreadsheet.html">表格工具</a></li></ul></li><li id="nav-github"><a href="https://github.com/ecomfe/echarts" target="_blank">GitHub</a></li><li id="nav-2" class="0"><a href="http://echarts.baidu.com/echarts2/">2.0</a></li></ul></div></div></nav><div class="ecdoc-apidoc"></div></div><script type="text/javascript" src="./vendors/bootstrap/js/bootstrap.min.js"></script><script type="text/javascript" src="./vendors/bootstrap/js/validator.js"></script>
<script type="text/javascript">window.globalArgsExtra = {
    pageName: 'option',
    schemaUrl: 'documents/cn/option.json',
    initHash: 'title',
    docTreeRootText: '.setOption('
};</script><script src="vendors/jquery-autocomplete/jquery.auto-complete.min.js"></script><script type="text/javascript">document.getElementById('nav-doc').className = 'active';

var vendorPath = '../vendors';

define('globalArgs', extend({
    version: '1478158214015',
    basePath: './',
    // Schema url is added by each doc page
    schemaUrl: '',
    iconfont: {
        down: '&#' + parseInt('e600', 16),
        up: '&#' + parseInt('e603', 16),
        right: '&#' + parseInt('e602', 16),
        left: '&#' + parseInt('e604', 16),
        handLens: '&#' + parseInt('e601', 16)
    }
}, window.globalArgsExtra || {}));

define('prettyPrint', function () {
    return prettyPrint;
});

define('ecLog', function () {
    // log maybe blocked
    if (typeof ecLog === 'undefined') {
        ecLog = function () {};
    }
    return ecLog;
});

require.config({
    baseUrl: './js',
    paths: {
        dt: vendorPath + '/dt/0.0.1',
        tpl: vendorPath + '/dt/0.0.1/tplLoader',
        etpl: vendorPath + '/etpl/3.0.0/etpl.min',
        signals: vendorPath + '/signals/1.0.0/signals.min',
        hasher: vendorPath + '/hasher/1.2.0/hasher.min',
        perfectScrollbar: vendorPath + '/perfect-scrollbar/0.6.8/js/perfect-scrollbar'
    },
    urlArgs: '_v_=1478158214015'
});

require(['docTool/main'], function (main) {
    main.init();
});

function extend(tar, src) {
    for (var name in src) {
        if (src.hasOwnProperty(name)) {
            tar[name] = src[name];
        }
    }
    return tar;
}</script><script type="text/javascript" src="./js/hm.js"></script></html>