remove events. fix download in example page
diff --git a/examples/data/calendar-charts.js b/examples/data/calendar-charts.js
index 736d443..39aaad7 100644
--- a/examples/data/calendar-charts.js
+++ b/examples/data/calendar-charts.js
@@ -26,31 +26,31 @@
 
 var graphData = [
     [
-        1485878400000,
+       '2017-02-01',
         260
     ],
     [
-        1486137600000,
+        '2017-02-04',
         200
     ],
     [
-        1486569600000,
+        '2017-02-09',
         279
     ],
     [
-        1486915200000,
+        '2017-02-13',
         847
     ],
     [
-        1487347200000,
+        '2017-02-18',
         241
     ],
     [
-        1487779200000,
+        '2017-02-23',
         411
     ],
     [
-        1488124800000,
+        '2017-02-27',
         985
     ]
 ];
diff --git a/examples/data/calendar-graph.js b/examples/data/calendar-graph.js
index 3be0336..7dd07ab 100644
--- a/examples/data/calendar-graph.js
+++ b/examples/data/calendar-graph.js
@@ -7,32 +7,31 @@
 
 var graphData = [
     [
-        // Consider timeoffset, add two days to avoid overflow.
-        1485878400000 + 3600 * 24 * 1000 * 2,
+       '2017-02-01',
         260
     ],
     [
-        1486137600000,
+        '2017-02-04',
         200
     ],
     [
-        1486569600000,
+        '2017-02-09',
         279
     ],
     [
-        1486915200000,
+        '2017-02-13',
         847
     ],
     [
-        1487347200000,
+        '2017-02-18',
         241
     ],
     [
-        1487779200000 + 3600 * 24 * 1000 * 15,
+        '2017-02-23',
         411
     ],
     [
-        1488124800000 + 3600 * 24 * 1000 * 23,
+        '2017-03-14',
         985
     ]
 ];
diff --git a/examples/js/example-bundle.js b/examples/js/example-bundle.js
index d7cc4e0..5946f08 100644
--- a/examples/js/example-bundle.js
+++ b/examples/js/example-bundle.js
@@ -1 +1 @@
-var echartsExample;echartsExample=(()=>{var t={913:(t,e,i)=>{t=i.nmd(t);var n={grid:"GridComponent",polar:"PolarComponent",geo:"GeoComponent",singleAxis:"SingleAxisComponent",parallel:"ParallelComponent",calendar:"CalendarComponent",graphic:"GraphicComponent",toolbox:"ToolboxComponent",tooltip:"TooltipComponent",axisPointer:"AxisPointerComponent",brush:"BrushComponent",title:"TitleComponent",timeline:"TimelineComponent",markPoint:"MarkPointComponent",markLine:"MarkLineComponent",markArea:"MarkAreaComponent",legend:"LegendComponent",dataZoom:"DataZoomComponent",visualMap:"VisualMapComponent",aria:"AriaComponent",dataset:"DatasetComponent",xAxis:"GridComponent",yAxis:"GridComponent",angleAxis:"PolarComponent",radiusAxis:"PolarComponent"},a={line:"LineChart",bar:"BarChart",pie:"PieChart",scatter:"ScatterChart",radar:"RadarChart",map:"MapChart",tree:"TreeChart",treemap:"TreemapChart",graph:"GraphChart",gauge:"GaugeChart",funnel:"FunnelChart",parallel:"ParallelChart",sankey:"SankeyChart",boxplot:"BoxplotChart",candlestick:"CandlestickChart",effectScatter:"EffectScatterChart",lines:"LinesChart",heatmap:"HeatmapChart",pictorialBar:"PictorialBarChart",themeRiver:"ThemeRiverChart",sunburst:"SunburstChart",custom:"CustomChart"},r={grid3D:"Grid3DComponent",geo3D:"Geo3DComponent",globe:"GlobeComponent",mapbox3D:"Mapbox3DComponent",maptalks3D:"Maptalks3DComponent",xAxis3D:"Grid3DComponent",yAxis3D:"Grid3DComponent",zAxis3D:"Grid3DComponent"},o={bar3D:"Bar3DChart",line3D:"Line3DChart",scatter3D:"Scatter3DChart",lines3D:"Lines3DChart",polygons3D:"Polygons3DChart",surface:"SurfaceChart",map3D:"Map3DChart",scatterGL:"ScatterGLChart",graphGL:"GraphGLChart",flowGL:"FlowGLChart",linesGL:"LinesGLChart"},l={},s={},c={},d={},u={SVGRenderer:"svg",CanvasRenderer:"canvas"},p=["markLine","markArea","markPoint"],f=[].concat(p,["grid","axisPointer","aria"]),g=["xAxis","yAxis","angleAxis","radiusAxis","xAxis3D","yAxis3D","zAxis3D"];function h(t,e){Object.keys(t).forEach((function(i){g.includes(i)||(e[t[i]]=i)}))}function m(t,e){var i=[],n=[],a=[],r=[],o=[];t.forEach((function(t){t.endsWith("Renderer")?o.push(t):s[t]?(i.push(t),e&&i.push(t.replace(/Chart$/,"SeriesOption"))):l[t]?(n.push(t),e&&n.push(t.replace(/Component$/,"ComponentOption"))):c[t]?a.push(t):d[t]&&r.push(t)}));var u=[].concat(n,i,r,a,o),p="\ntype ECOption = echarts.ComposeOption<\n    ".concat(u.filter((function(t){return t.endsWith("Option")})).join(" | "),"\n>"),f=[[n,"echarts/components"],[i,"echarts/charts"],[o,"echarts/renderers"],[a,"echarts-gl/charts"],[r,"echarts-gl/components"]].filter((function(t){return t[0].length>0})).map((function(t){return"\nimport {".concat((e=t[0],"".concat(e.map((function(t){return"\n    ".concat(t)})).join(","))),"\n} from '").concat(t[1],"';\n    ").trim();var e})).join("\n");return"import * as echarts from 'echarts/core';\n".concat(f,"\n\necharts.use(\n    [").concat(u.filter((function(t){return!t.endsWith("Option")})).join(", "),"]\n);\n")+(e?p:"")}function C(t,e){var i=[];return t.forEach((function(t){t.endsWith("Renderer")&&"CanvasRenderer"!==t?i.push("zrender/lib/".concat(u[t],"/").concat(u[t])):s[t]?i.push("echarts/lib/chart/".concat(s[t])):l[t]?i.push("echarts/lib/component/".concat(l[t])):c[t]?i.push("echarts-gl/lib/chart/".concat(c[t])):d[t]&&i.push("echarts-gl/lib/component/".concat(d[t]))})),e?"import * as echarts from 'echarts/lib/echarts';\n".concat(i.map((function(t){return"import '".concat(t,"';")})).join("\n"),"\n"):"const echarts = require('echarts/lib/echarts');\n".concat(i.map((function(t){return"require('".concat(t,"');")})).join("\n"),"\n")}function y(t){return!!t.find((function(t){return!(!c[t]&&!d[t])}))}h(n,l),h(a,s),h(r,d),h(o,c),t.exports.collectDeps=function t(e){var i=[];if(e.options)return e.options.forEach((function(e){i=i.concat(t(e))})),e.baseOption&&(i=i.concat(t(e.baseOption))),Array.from(new Set(i));Object.keys(e).forEach((function(t){if(!f.includes(t)){var a=e[t];Array.isArray(a)&&!a.length||(n[t]&&i.push(n[t]),r[t]&&i.push(r[t]))}}));var l=e.series;return Array.isArray(l)||(l=[l]),l.forEach((function(t){a[t.type]&&i.push(a[t.type]),o[t.type]&&i.push(o[t.type]),"map"===t.type&&i.push(n.geo),p.forEach((function(e){t[e]&&i.push(n[e])}))})),Array.from(new Set(i))},t.exports.buildMinimalBundleCode=m,t.buildLegacyMinimalBundleCode=C,t.exports.buildExampleCode=function(t,e,i){var n=i.minimal,a=i.esm,r=void 0===a||a,o=i.legacy,l=i.ts,s=i.theme,c=i.ROOT_PATH,d=i.extraImports;l&&(r=!0),n&&!r&&(o=!0);var u=t.indexOf("ecStat")>=0,p=t.indexOf("ROOT_PATH")>=0,f=t.indexOf("app")>=0,g="\n".concat(u?r?"import ecStat from 'echarts-stat';":"var ecStat = require('echarts-stat');":"","\n"),h=[n?o?C(e,r):m(e,l):r?"import * as echarts from 'echarts';".concat(y(e)?"\nimport 'echarts-gl';":""):"var echarts = require('echarts');".concat(y(e)?"\nrequire('echarts-gl');":""),s&&"dark"!==s?r?"import 'echarts/theme/".concat(s,"'"):"require('echarts/theme/".concat(s,"')"):"",d].filter((function(t){return!!t})).join("\n"),v=[p?"var ROOT_PATH = '".concat(c,"';"):"",f?"var app".concat(l?": any":""," = {};"):"",l&&!n?"type ECOption = echarts.EChartsOption":""].filter((function(t){return!!t})).join("\n"),b=[h.trim(),g.trim(),v.trim()].filter((function(t){return!!t})).join("\n\n");return"".concat(b,"\n\nvar chartDom = document.getElementById('main')").concat(l?"!":"",";\nvar myChart = echarts.init(chartDom").concat(s?", '".concat(s,"'"):"",");\nvar option").concat(l?": ECOption":"",";\n\n").concat(t.trim(),"\n\noption && myChart.setOption(option);\n")}},403:(t,e,i)=>{"use strict";i.r(e),i.d(e,{init:()=>Sl});const n=Vue;var a=i.n(n),r=["style","currency","currencyDisplay","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","minimumSignificantDigits","maximumSignificantDigits","localeMatcher","formatMatcher","unit"];function o(t,e){"undefined"!=typeof console&&(console.warn("[vue-i18n] "+t),e&&console.warn(e.stack))}var l=Array.isArray;function s(t){return null!==t&&"object"==typeof t}function c(t){return"string"==typeof t}var d=Object.prototype.toString;function u(t){return"[object Object]"===d.call(t)}function p(t){return null==t}function f(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=null,n=null;return 1===t.length?s(t[0])||Array.isArray(t[0])?n=t[0]:"string"==typeof t[0]&&(i=t[0]):2===t.length&&("string"==typeof t[0]&&(i=t[0]),(s(t[1])||Array.isArray(t[1]))&&(n=t[1])),{locale:i,params:n}}function g(t){return JSON.parse(JSON.stringify(t))}function h(t,e){return!!~t.indexOf(e)}var m=Object.prototype.hasOwnProperty;function C(t,e){return m.call(t,e)}function y(t){for(var e=arguments,i=Object(t),n=1;n<arguments.length;n++){var a=e[n];if(null!=a){var r=void 0;for(r in a)C(a,r)&&(s(a[r])?i[r]=y(i[r],a[r]):i[r]=a[r])}}return i}function v(t,e){if(t===e)return!0;var i=s(t),n=s(e);if(!i||!n)return!i&&!n&&String(t)===String(e);try{var a=Array.isArray(t),r=Array.isArray(e);if(a&&r)return t.length===e.length&&t.every((function(t,i){return v(t,e[i])}));if(a||r)return!1;var o=Object.keys(t),l=Object.keys(e);return o.length===l.length&&o.every((function(i){return v(t[i],e[i])}))}catch(t){return!1}}var b={beforeCreate:function(){var t=this.$options;if(t.i18n=t.i18n||(t.__i18n?{}:null),t.i18n){if(t.i18n instanceof K){if(t.__i18n)try{var e={};t.__i18n.forEach((function(t){e=y(e,JSON.parse(t))})),Object.keys(e).forEach((function(i){t.i18n.mergeLocaleMessage(i,e[i])}))}catch(t){}this._i18n=t.i18n,this._i18nWatcher=this._i18n.watchI18nData()}else if(u(t.i18n)){var i=this.$root&&this.$root.$i18n&&this.$root.$i18n instanceof K?this.$root.$i18n:null;if(i&&(t.i18n.root=this.$root,t.i18n.formatter=i.formatter,t.i18n.fallbackLocale=i.fallbackLocale,t.i18n.formatFallbackMessages=i.formatFallbackMessages,t.i18n.silentTranslationWarn=i.silentTranslationWarn,t.i18n.silentFallbackWarn=i.silentFallbackWarn,t.i18n.pluralizationRules=i.pluralizationRules,t.i18n.preserveDirectiveContent=i.preserveDirectiveContent),t.__i18n)try{var n={};t.__i18n.forEach((function(t){n=y(n,JSON.parse(t))})),t.i18n.messages=n}catch(t){}var a=t.i18n.sharedMessages;a&&u(a)&&(t.i18n.messages=y(t.i18n.messages,a)),this._i18n=new K(t.i18n),this._i18nWatcher=this._i18n.watchI18nData(),(void 0===t.i18n.sync||t.i18n.sync)&&(this._localeWatcher=this.$i18n.watchLocale()),i&&i.onComponentInstanceCreated(this._i18n)}}else this.$root&&this.$root.$i18n&&this.$root.$i18n instanceof K?this._i18n=this.$root.$i18n:t.parent&&t.parent.$i18n&&t.parent.$i18n instanceof K&&(this._i18n=t.parent.$i18n)},beforeMount:function(){var t=this.$options;t.i18n=t.i18n||(t.__i18n?{}:null),t.i18n?(t.i18n instanceof K||u(t.i18n))&&(this._i18n.subscribeDataChanging(this),this._subscribing=!0):(this.$root&&this.$root.$i18n&&this.$root.$i18n instanceof K||t.parent&&t.parent.$i18n&&t.parent.$i18n instanceof K)&&(this._i18n.subscribeDataChanging(this),this._subscribing=!0)},beforeDestroy:function(){if(this._i18n){var t=this;this.$nextTick((function(){t._subscribing&&(t._i18n.unsubscribeDataChanging(t),delete t._subscribing),t._i18nWatcher&&(t._i18nWatcher(),t._i18n.destroyVM(),delete t._i18nWatcher),t._localeWatcher&&(t._localeWatcher(),delete t._localeWatcher)}))}}},_={name:"i18n",functional:!0,props:{tag:{type:[String,Boolean,Object],default:"span"},path:{type:String,required:!0},locale:{type:String},places:{type:[Array,Object]}},render:function(t,e){var i=e.data,n=e.parent,a=e.props,r=e.slots,o=n.$i18n;if(o){var l=a.path,s=a.locale,c=a.places,d=r(),u=o.i(l,s,function(t){var e;for(e in t)if("default"!==e)return!1;return Boolean(e)}(d)||c?function(t,e){var i=e?function(t){return Array.isArray(t)?t.reduce(w,{}):Object.assign({},t)}(e):{};if(!t)return i;var n=(t=t.filter((function(t){return t.tag||""!==t.text.trim()}))).every(x);return t.reduce(n?L:w,i)}(d.default,c):d),p=a.tag&&!0!==a.tag||!1===a.tag?a.tag:"span";return p?t(p,i,u):u}}};function L(t,e){return e.data&&e.data.attrs&&e.data.attrs.place&&(t[e.data.attrs.place]=e),t}function w(t,e,i){return t[i]=e,t}function x(t){return Boolean(t.data&&t.data.attrs&&t.data.attrs.place)}var k,S={name:"i18n-n",functional:!0,props:{tag:{type:[String,Boolean,Object],default:"span"},value:{type:Number,required:!0},format:{type:[String,Object]},locale:{type:String}},render:function(t,e){var i=e.props,n=e.parent,a=e.data,o=n.$i18n;if(!o)return null;var l=null,d=null;c(i.format)?l=i.format:s(i.format)&&(i.format.key&&(l=i.format.key),d=Object.keys(i.format).reduce((function(t,e){var n;return h(r,e)?Object.assign({},t,((n={})[e]=i.format[e],n)):t}),null));var u=i.locale||o.locale,p=o._ntp(i.value,u,l,d),f=p.map((function(t,e){var i,n=a.scopedSlots&&a.scopedSlots[t.type];return n?n(((i={})[t.type]=t.value,i.index=e,i.parts=p,i)):t.value})),g=i.tag&&!0!==i.tag||!1===i.tag?i.tag:"span";return g?t(g,{attrs:a.attrs,class:a.class,staticClass:a.staticClass},f):f}};function N(t,e,i){A(0,i)&&D(t,e,i)}function M(t,e,i,n){if(A(0,i)){var a=i.context.$i18n;(function(t,e){var i=e.context;return t._locale===i.$i18n.locale})(t,i)&&v(e.value,e.oldValue)&&v(t._localeMessage,a.getLocaleMessage(a.locale))||D(t,e,i)}}function T(t,e,i,n){if(i.context){var a=i.context.$i18n||{};e.modifiers.preserve||a.preserveDirectiveContent||(t.textContent=""),t._vt=void 0,delete t._vt,t._locale=void 0,delete t._locale,t._localeMessage=void 0,delete t._localeMessage}else o("Vue instance does not exists in VNode context")}function A(t,e){var i=e.context;return i?!!i.$i18n||(o("VueI18n instance does not exists in Vue instance"),!1):(o("Vue instance does not exists in VNode context"),!1)}function D(t,e,i){var n,a,r=function(t){var e,i,n,a;return c(t)?e=t:u(t)&&(e=t.path,i=t.locale,n=t.args,a=t.choice),{path:e,locale:i,args:n,choice:a}}(e.value),l=r.path,s=r.locale,d=r.args,p=r.choice;if(l||s||d)if(l){var f=i.context;t._vt=t.textContent=null!=p?(n=f.$i18n).tc.apply(n,[l,p].concat(O(s,d))):(a=f.$i18n).t.apply(a,[l].concat(O(s,d))),t._locale=f.$i18n.locale,t._localeMessage=f.$i18n.getLocaleMessage(f.$i18n.locale)}else o("`path` is required in v-t directive");else o("value type not supported")}function O(t,e){var i=[];return t&&i.push(t),e&&(Array.isArray(e)||u(e))&&i.push(e),i}function E(t){E.installed=!0,(k=t).version&&Number(k.version.split(".")[0]),function(t){t.prototype.hasOwnProperty("$i18n")||Object.defineProperty(t.prototype,"$i18n",{get:function(){return this._i18n}}),t.prototype.$t=function(t){for(var e=[],i=arguments.length-1;i-- >0;)e[i]=arguments[i+1];var n=this.$i18n;return n._t.apply(n,[t,n.locale,n._getMessages(),this].concat(e))},t.prototype.$tc=function(t,e){for(var i=[],n=arguments.length-2;n-- >0;)i[n]=arguments[n+2];var a=this.$i18n;return a._tc.apply(a,[t,a.locale,a._getMessages(),this,e].concat(i))},t.prototype.$te=function(t,e){var i=this.$i18n;return i._te(t,i.locale,i._getMessages(),e)},t.prototype.$d=function(t){for(var e,i=[],n=arguments.length-1;n-- >0;)i[n]=arguments[n+1];return(e=this.$i18n).d.apply(e,[t].concat(i))},t.prototype.$n=function(t){for(var e,i=[],n=arguments.length-1;n-- >0;)i[n]=arguments[n+1];return(e=this.$i18n).n.apply(e,[t].concat(i))}}(k),k.mixin(b),k.directive("t",{bind:N,update:M,unbind:T}),k.component(_.name,_),k.component(S.name,S),k.config.optionMergeStrategies.i18n=function(t,e){return void 0===e?t:e}}var P=function(){this._caches=Object.create(null)};P.prototype.interpolate=function(t,e){if(!e)return[t];var i=this._caches[t];return i||(i=function(t){for(var e=[],i=0,n="";i<t.length;){var a=t[i++];if("{"===a){n&&e.push({type:"text",value:n}),n="";var r="";for(a=t[i++];void 0!==a&&"}"!==a;)r+=a,a=t[i++];var o="}"===a,l=F.test(r)?"list":o&&R.test(r)?"named":"unknown";e.push({value:r,type:l})}else"%"===a?"{"!==t[i]&&(n+=a):n+=a}return n&&e.push({type:"text",value:n}),e}(t),this._caches[t]=i),function(t,e){var i=[],n=0,a=Array.isArray(e)?"list":s(e)?"named":"unknown";if("unknown"===a)return i;for(;n<t.length;){var r=t[n];switch(r.type){case"text":i.push(r.value);break;case"list":i.push(e[parseInt(r.value,10)]);break;case"named":"named"===a&&i.push(e[r.value])}n++}return i}(i,e)};var F=/^(?:\d)+/,R=/^(?:\w)+/,B=[];B[0]={ws:[0],ident:[3,0],"[":[4],eof:[7]},B[1]={ws:[1],".":[2],"[":[4],eof:[7]},B[2]={ws:[2],ident:[3,0],0:[3,0],number:[3,0]},B[3]={ident:[3,0],0:[3,0],number:[3,0],ws:[1,1],".":[2,1],"[":[4,1],eof:[7,1]},B[4]={"'":[5,0],'"':[6,0],"[":[4,2],"]":[1,3],eof:8,else:[4,0]},B[5]={"'":[4,0],eof:8,else:[5,0]},B[6]={'"':[4,0],eof:8,else:[6,0]};var I=/^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/;function j(t){if(null==t)return"eof";switch(t.charCodeAt(0)){case 91:case 93:case 46:case 34:case 39:return t;case 95:case 36:case 45:return"ident";case 9:case 10:case 13:case 160:case 65279:case 8232:case 8233:return"ws"}return"ident"}var G=function(){this._cache=Object.create(null)};G.prototype.parsePath=function(t){var e=this._cache[t];return e||(e=function(t){var e,i,n,a,r,o,l,s=[],c=-1,d=0,u=0,p=[];function f(){var e=t[c+1];if(5===d&&"'"===e||6===d&&'"'===e)return c++,n="\\"+e,p[0](),!0}for(p[1]=function(){void 0!==i&&(s.push(i),i=void 0)},p[0]=function(){void 0===i?i=n:i+=n},p[2]=function(){p[0](),u++},p[3]=function(){if(u>0)u--,d=4,p[0]();else{if(u=0,void 0===i)return!1;if(!1===(i=function(t){var e,i=t.trim();return("0"!==t.charAt(0)||!isNaN(t))&&(e=i,I.test(e)?function(t){var e=t.charCodeAt(0);return e!==t.charCodeAt(t.length-1)||34!==e&&39!==e?t:t.slice(1,-1)}(i):"*"+i)}(i)))return!1;p[1]()}};null!==d;)if(c++,"\\"!==(e=t[c])||!f()){if(a=j(e),8===(r=(l=B[d])[a]||l.else||8))return;if(d=r[0],(o=p[r[1]])&&(n=void 0===(n=r[2])?e:n,!1===o()))return;if(7===d)return s}}(t))&&(this._cache[t]=e),e||[]},G.prototype.getPathValue=function(t,e){if(!s(t))return null;var i=this.parsePath(e);if(0===i.length)return null;for(var n=i.length,a=t,r=0;r<n;){var o=a[i[r]];if(void 0===o)return null;a=o,r++}return a};var z,U=/<\/?[\w\s="/.':;#-\/]+>/,Z=/(?:@(?:\.[a-z]+)?:(?:[\w\-_|.]+|\([\w\-_|.]+\)))/g,W=/^@(?:\.([a-z]+))?:/,V=/[()]/g,H={upper:function(t){return t.toLocaleUpperCase()},lower:function(t){return t.toLocaleLowerCase()},capitalize:function(t){return""+t.charAt(0).toLocaleUpperCase()+t.substr(1)}},q=new P,K=function(t){var e=this;void 0===t&&(t={}),!k&&"undefined"!=typeof window&&window.Vue&&E(window.Vue);var i=t.locale||"en-US",n=!1!==t.fallbackLocale&&(t.fallbackLocale||"en-US"),a=t.messages||{},r=t.dateTimeFormats||{},o=t.numberFormats||{};this._vm=null,this._formatter=t.formatter||q,this._modifiers=t.modifiers||{},this._missing=t.missing||null,this._root=t.root||null,this._sync=void 0===t.sync||!!t.sync,this._fallbackRoot=void 0===t.fallbackRoot||!!t.fallbackRoot,this._formatFallbackMessages=void 0!==t.formatFallbackMessages&&!!t.formatFallbackMessages,this._silentTranslationWarn=void 0!==t.silentTranslationWarn&&t.silentTranslationWarn,this._silentFallbackWarn=void 0!==t.silentFallbackWarn&&!!t.silentFallbackWarn,this._dateTimeFormatters={},this._numberFormatters={},this._path=new G,this._dataListeners=[],this._componentInstanceCreatedListener=t.componentInstanceCreatedListener||null,this._preserveDirectiveContent=void 0!==t.preserveDirectiveContent&&!!t.preserveDirectiveContent,this.pluralizationRules=t.pluralizationRules||{},this._warnHtmlInMessage=t.warnHtmlInMessage||"off",this._postTranslation=t.postTranslation||null,this.getChoiceIndex=function(t,i){var n,a,r=Object.getPrototypeOf(e);return r&&r.getChoiceIndex?r.getChoiceIndex.call(e,t,i):e.locale in e.pluralizationRules?e.pluralizationRules[e.locale].apply(e,[t,i]):(n=t,a=i,n=Math.abs(n),2===a?n?n>1?1:0:1:n?Math.min(n,2):0)},this._exist=function(t,i){return!(!t||!i||p(e._path.getPathValue(t,i))&&!t[i])},"warn"!==this._warnHtmlInMessage&&"error"!==this._warnHtmlInMessage||Object.keys(a).forEach((function(t){e._checkLocaleMessage(t,e._warnHtmlInMessage,a[t])})),this._initVM({locale:i,fallbackLocale:n,messages:a,dateTimeFormats:r,numberFormats:o})},J={vm:{configurable:!0},messages:{configurable:!0},dateTimeFormats:{configurable:!0},numberFormats:{configurable:!0},availableLocales:{configurable:!0},locale:{configurable:!0},fallbackLocale:{configurable:!0},formatFallbackMessages:{configurable:!0},missing:{configurable:!0},formatter:{configurable:!0},silentTranslationWarn:{configurable:!0},silentFallbackWarn:{configurable:!0},preserveDirectiveContent:{configurable:!0},warnHtmlInMessage:{configurable:!0},postTranslation:{configurable:!0}};K.prototype._checkLocaleMessage=function(t,e,i){var n=function(t,e,i,a){if(u(i))Object.keys(i).forEach((function(r){var o=i[r];u(o)?(a.push(r),a.push("."),n(t,e,o,a),a.pop(),a.pop()):(a.push(r),n(t,e,o,a),a.pop())}));else if(Array.isArray(i))i.forEach((function(i,r){u(i)?(a.push("["+r+"]"),a.push("."),n(t,e,i,a),a.pop(),a.pop()):(a.push("["+r+"]"),n(t,e,i,a),a.pop())}));else if(c(i)&&U.test(i)){var r="Detected HTML in message '"+i+"' of keypath '"+a.join("")+"' at '"+e+"'. Consider component interpolation with '<i18n>' to avoid XSS. See https://bit.ly/2ZqJzkp";"warn"===t?o(r):"error"===t&&function(t,e){"undefined"!=typeof console&&console.error("[vue-i18n] "+t)}(r)}};n(e,t,i,[])},K.prototype._initVM=function(t){var e=k.config.silent;k.config.silent=!0,this._vm=new k({data:t}),k.config.silent=e},K.prototype.destroyVM=function(){this._vm.$destroy()},K.prototype.subscribeDataChanging=function(t){this._dataListeners.push(t)},K.prototype.unsubscribeDataChanging=function(t){!function(t,e){if(t.length){var i=t.indexOf(e);i>-1&&t.splice(i,1)}}(this._dataListeners,t)},K.prototype.watchI18nData=function(){var t=this;return this._vm.$watch("$data",(function(){for(var e=t._dataListeners.length;e--;)k.nextTick((function(){t._dataListeners[e]&&t._dataListeners[e].$forceUpdate()}))}),{deep:!0})},K.prototype.watchLocale=function(){if(!this._sync||!this._root)return null;var t=this._vm;return this._root.$i18n.vm.$watch("locale",(function(e){t.$set(t,"locale",e),t.$forceUpdate()}),{immediate:!0})},K.prototype.onComponentInstanceCreated=function(t){this._componentInstanceCreatedListener&&this._componentInstanceCreatedListener(t,this)},J.vm.get=function(){return this._vm},J.messages.get=function(){return g(this._getMessages())},J.dateTimeFormats.get=function(){return g(this._getDateTimeFormats())},J.numberFormats.get=function(){return g(this._getNumberFormats())},J.availableLocales.get=function(){return Object.keys(this.messages).sort()},J.locale.get=function(){return this._vm.locale},J.locale.set=function(t){this._vm.$set(this._vm,"locale",t)},J.fallbackLocale.get=function(){return this._vm.fallbackLocale},J.fallbackLocale.set=function(t){this._localeChainCache={},this._vm.$set(this._vm,"fallbackLocale",t)},J.formatFallbackMessages.get=function(){return this._formatFallbackMessages},J.formatFallbackMessages.set=function(t){this._formatFallbackMessages=t},J.missing.get=function(){return this._missing},J.missing.set=function(t){this._missing=t},J.formatter.get=function(){return this._formatter},J.formatter.set=function(t){this._formatter=t},J.silentTranslationWarn.get=function(){return this._silentTranslationWarn},J.silentTranslationWarn.set=function(t){this._silentTranslationWarn=t},J.silentFallbackWarn.get=function(){return this._silentFallbackWarn},J.silentFallbackWarn.set=function(t){this._silentFallbackWarn=t},J.preserveDirectiveContent.get=function(){return this._preserveDirectiveContent},J.preserveDirectiveContent.set=function(t){this._preserveDirectiveContent=t},J.warnHtmlInMessage.get=function(){return this._warnHtmlInMessage},J.warnHtmlInMessage.set=function(t){var e=this,i=this._warnHtmlInMessage;if(this._warnHtmlInMessage=t,i!==t&&("warn"===t||"error"===t)){var n=this._getMessages();Object.keys(n).forEach((function(t){e._checkLocaleMessage(t,e._warnHtmlInMessage,n[t])}))}},J.postTranslation.get=function(){return this._postTranslation},J.postTranslation.set=function(t){this._postTranslation=t},K.prototype._getMessages=function(){return this._vm.messages},K.prototype._getDateTimeFormats=function(){return this._vm.dateTimeFormats},K.prototype._getNumberFormats=function(){return this._vm.numberFormats},K.prototype._warnDefault=function(t,e,i,n,a,r){if(!p(i))return i;if(this._missing){var o=this._missing.apply(null,[t,e,n,a]);if(c(o))return o}if(this._formatFallbackMessages){var l=f.apply(void 0,a);return this._render(e,r,l.params,e)}return e},K.prototype._isFallbackRoot=function(t){return!t&&!p(this._root)&&this._fallbackRoot},K.prototype._isSilentFallbackWarn=function(t){return this._silentFallbackWarn instanceof RegExp?this._silentFallbackWarn.test(t):this._silentFallbackWarn},K.prototype._isSilentFallback=function(t,e){return this._isSilentFallbackWarn(e)&&(this._isFallbackRoot()||t!==this.fallbackLocale)},K.prototype._isSilentTranslationWarn=function(t){return this._silentTranslationWarn instanceof RegExp?this._silentTranslationWarn.test(t):this._silentTranslationWarn},K.prototype._interpolate=function(t,e,i,n,a,r,o){if(!e)return null;var l,s=this._path.getPathValue(e,i);if(Array.isArray(s)||u(s))return s;if(p(s)){if(!u(e))return null;if(!c(l=e[i]))return null}else{if(!c(s))return null;l=s}return(l.indexOf("@:")>=0||l.indexOf("@.")>=0)&&(l=this._link(t,e,l,n,"raw",r,o)),this._render(l,a,r,i)},K.prototype._link=function(t,e,i,n,a,r,o){var l=i,s=l.match(Z);for(var c in s)if(s.hasOwnProperty(c)){var d=s[c],u=d.match(W),p=u[0],f=u[1],g=d.replace(p,"").replace(V,"");if(h(o,g))return l;o.push(g);var m=this._interpolate(t,e,g,n,"raw"===a?"string":a,"raw"===a?void 0:r,o);if(this._isFallbackRoot(m)){if(!this._root)throw Error("unexpected error");var C=this._root.$i18n;m=C._translate(C._getMessages(),C.locale,C.fallbackLocale,g,n,a,r)}m=this._warnDefault(t,g,m,n,Array.isArray(r)?r:[r],a),this._modifiers.hasOwnProperty(f)?m=this._modifiers[f](m):H.hasOwnProperty(f)&&(m=H[f](m)),o.pop(),l=m?l.replace(d,m):l}return l},K.prototype._render=function(t,e,i,n){var a=this._formatter.interpolate(t,i,n);return a||(a=q.interpolate(t,i,n)),"string"!==e||c(a)?a:a.join("")},K.prototype._appendItemToChain=function(t,e,i){var n=!1;return h(t,e)||(n=!0,e&&(n="!"!==e[e.length-1],e=e.replace(/!/g,""),t.push(e),i&&i[e]&&(n=i[e]))),n},K.prototype._appendLocaleToChain=function(t,e,i){var n,a=e.split("-");do{var r=a.join("-");n=this._appendItemToChain(t,r,i),a.splice(-1,1)}while(a.length&&!0===n);return n},K.prototype._appendBlockToChain=function(t,e,i){for(var n=!0,a=0;a<e.length&&"boolean"==typeof n;a++){var r=e[a];c(r)&&(n=this._appendLocaleToChain(t,r,i))}return n},K.prototype._getLocaleChain=function(t,e){if(""===t)return[];this._localeChainCache||(this._localeChainCache={});var i=this._localeChainCache[t];if(!i){e||(e=this.fallbackLocale),i=[];for(var n,a=[t];l(a);)a=this._appendBlockToChain(i,a,e);(a=c(n=l(e)?e:s(e)?e.default?e.default:null:e)?[n]:n)&&this._appendBlockToChain(i,a,null),this._localeChainCache[t]=i}return i},K.prototype._translate=function(t,e,i,n,a,r,o){for(var l,s=this._getLocaleChain(e,i),c=0;c<s.length;c++){var d=s[c];if(!p(l=this._interpolate(d,t[d],n,a,r,o,[n])))return l}return null},K.prototype._t=function(t,e,i,n){for(var a,r=[],o=arguments.length-4;o-- >0;)r[o]=arguments[o+4];if(!t)return"";var l=f.apply(void 0,r),s=l.locale||e,c=this._translate(i,s,this.fallbackLocale,t,n,"string",l.params);if(this._isFallbackRoot(c)){if(!this._root)throw Error("unexpected error");return(a=this._root).$t.apply(a,[t].concat(r))}return c=this._warnDefault(s,t,c,n,r,"string"),this._postTranslation&&null!=c&&(c=this._postTranslation(c,t)),c},K.prototype.t=function(t){for(var e,i=[],n=arguments.length-1;n-- >0;)i[n]=arguments[n+1];return(e=this)._t.apply(e,[t,this.locale,this._getMessages(),null].concat(i))},K.prototype._i=function(t,e,i,n,a){var r=this._translate(i,e,this.fallbackLocale,t,n,"raw",a);if(this._isFallbackRoot(r)){if(!this._root)throw Error("unexpected error");return this._root.$i18n.i(t,e,a)}return this._warnDefault(e,t,r,n,[a],"raw")},K.prototype.i=function(t,e,i){return t?(c(e)||(e=this.locale),this._i(t,e,this._getMessages(),null,i)):""},K.prototype._tc=function(t,e,i,n,a){for(var r,o=[],l=arguments.length-5;l-- >0;)o[l]=arguments[l+5];if(!t)return"";void 0===a&&(a=1);var s={count:a,n:a},c=f.apply(void 0,o);return c.params=Object.assign(s,c.params),o=null===c.locale?[c.params]:[c.locale,c.params],this.fetchChoice((r=this)._t.apply(r,[t,e,i,n].concat(o)),a)},K.prototype.fetchChoice=function(t,e){if(!t&&!c(t))return null;var i=t.split("|");return i[e=this.getChoiceIndex(e,i.length)]?i[e].trim():t},K.prototype.tc=function(t,e){for(var i,n=[],a=arguments.length-2;a-- >0;)n[a]=arguments[a+2];return(i=this)._tc.apply(i,[t,this.locale,this._getMessages(),null,e].concat(n))},K.prototype._te=function(t,e,i){for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var r=f.apply(void 0,n).locale||e;return this._exist(i[r],t)},K.prototype.te=function(t,e){return this._te(t,this.locale,this._getMessages(),e)},K.prototype.getLocaleMessage=function(t){return g(this._vm.messages[t]||{})},K.prototype.setLocaleMessage=function(t,e){"warn"!==this._warnHtmlInMessage&&"error"!==this._warnHtmlInMessage||this._checkLocaleMessage(t,this._warnHtmlInMessage,e),this._vm.$set(this._vm.messages,t,e)},K.prototype.mergeLocaleMessage=function(t,e){"warn"!==this._warnHtmlInMessage&&"error"!==this._warnHtmlInMessage||this._checkLocaleMessage(t,this._warnHtmlInMessage,e),this._vm.$set(this._vm.messages,t,y({},this._vm.messages[t]||{},e))},K.prototype.getDateTimeFormat=function(t){return g(this._vm.dateTimeFormats[t]||{})},K.prototype.setDateTimeFormat=function(t,e){this._vm.$set(this._vm.dateTimeFormats,t,e),this._clearDateTimeFormat(t,e)},K.prototype.mergeDateTimeFormat=function(t,e){this._vm.$set(this._vm.dateTimeFormats,t,y(this._vm.dateTimeFormats[t]||{},e)),this._clearDateTimeFormat(t,e)},K.prototype._clearDateTimeFormat=function(t,e){for(var i in e){var n=t+"__"+i;this._dateTimeFormatters.hasOwnProperty(n)&&delete this._dateTimeFormatters[n]}},K.prototype._localizeDateTime=function(t,e,i,n,a){for(var r=e,o=n[r],l=this._getLocaleChain(e,i),s=0;s<l.length;s++){var c=l[s];if(r=c,!p(o=n[c])&&!p(o[a]))break}if(p(o)||p(o[a]))return null;var d=o[a],u=r+"__"+a,f=this._dateTimeFormatters[u];return f||(f=this._dateTimeFormatters[u]=new Intl.DateTimeFormat(r,d)),f.format(t)},K.prototype._d=function(t,e,i){if(!i)return new Intl.DateTimeFormat(e).format(t);var n=this._localizeDateTime(t,e,this.fallbackLocale,this._getDateTimeFormats(),i);if(this._isFallbackRoot(n)){if(!this._root)throw Error("unexpected error");return this._root.$i18n.d(t,i,e)}return n||""},K.prototype.d=function(t){for(var e=[],i=arguments.length-1;i-- >0;)e[i]=arguments[i+1];var n=this.locale,a=null;return 1===e.length?c(e[0])?a=e[0]:s(e[0])&&(e[0].locale&&(n=e[0].locale),e[0].key&&(a=e[0].key)):2===e.length&&(c(e[0])&&(a=e[0]),c(e[1])&&(n=e[1])),this._d(t,n,a)},K.prototype.getNumberFormat=function(t){return g(this._vm.numberFormats[t]||{})},K.prototype.setNumberFormat=function(t,e){this._vm.$set(this._vm.numberFormats,t,e),this._clearNumberFormat(t,e)},K.prototype.mergeNumberFormat=function(t,e){this._vm.$set(this._vm.numberFormats,t,y(this._vm.numberFormats[t]||{},e)),this._clearNumberFormat(t,e)},K.prototype._clearNumberFormat=function(t,e){for(var i in e){var n=t+"__"+i;this._numberFormatters.hasOwnProperty(n)&&delete this._numberFormatters[n]}},K.prototype._getNumberFormatter=function(t,e,i,n,a,r){for(var o=e,l=n[o],s=this._getLocaleChain(e,i),c=0;c<s.length;c++){var d=s[c];if(o=d,!p(l=n[d])&&!p(l[a]))break}if(p(l)||p(l[a]))return null;var u,f=l[a];if(r)u=new Intl.NumberFormat(o,Object.assign({},f,r));else{var g=o+"__"+a;(u=this._numberFormatters[g])||(u=this._numberFormatters[g]=new Intl.NumberFormat(o,f))}return u},K.prototype._n=function(t,e,i,n){if(!K.availabilities.numberFormat)return"";if(!i)return(n?new Intl.NumberFormat(e,n):new Intl.NumberFormat(e)).format(t);var a=this._getNumberFormatter(t,e,this.fallbackLocale,this._getNumberFormats(),i,n),r=a&&a.format(t);if(this._isFallbackRoot(r)){if(!this._root)throw Error("unexpected error");return this._root.$i18n.n(t,Object.assign({},{key:i,locale:e},n))}return r||""},K.prototype.n=function(t){for(var e=[],i=arguments.length-1;i-- >0;)e[i]=arguments[i+1];var n=this.locale,a=null,o=null;return 1===e.length?c(e[0])?a=e[0]:s(e[0])&&(e[0].locale&&(n=e[0].locale),e[0].key&&(a=e[0].key),o=Object.keys(e[0]).reduce((function(t,i){var n;return h(r,i)?Object.assign({},t,((n={})[i]=e[0][i],n)):t}),null)):2===e.length&&(c(e[0])&&(a=e[0]),c(e[1])&&(n=e[1])),this._n(t,n,a,o)},K.prototype._ntp=function(t,e,i,n){if(!K.availabilities.numberFormat)return[];if(!i)return(n?new Intl.NumberFormat(e,n):new Intl.NumberFormat(e)).formatToParts(t);var a=this._getNumberFormatter(t,e,this.fallbackLocale,this._getNumberFormats(),i,n),r=a&&a.formatToParts(t);if(this._isFallbackRoot(r)){if(!this._root)throw Error("unexpected error");return this._root.$i18n._ntp(t,e,i,n)}return r||[]},Object.defineProperties(K.prototype,J),Object.defineProperty(K,"availabilities",{get:function(){if(!z){var t="undefined"!=typeof Intl;z={dateTimeFormat:t&&void 0!==Intl.DateTimeFormat,numberFormat:t&&void 0!==Intl.NumberFormat}}return z}}),K.install=E,K.version="8.20.0";const Q=K,Y={en:{editor:{run:"Run",errorInEditor:"Errors exist in code!",chartOK:"Chart has been generated successfully, ",darkMode:"Dark Mode",enableDecal:"Decal Pattern",renderCfgTitle:"Render",renderer:"Renderer",useDirtyRect:"Use Dirty Rect",download:"Download",edit:"Edit",monacoMode:"Enable Type Checking",tabEditor:"Edit Example",tabFullCodePreview:"Full Code",tabOptionPreview:"Option Preview",minimalBundle:"Minimal Bundle"},chartTypes:{line:"Line",bar:"Bar",pie:"Pie",scatter:"Scatter",map:"GEO/Map",candlestick:"Candlestick",radar:"Radar",boxplot:"Boxplot",heatmap:"Heatmap",graph:"Graph",lines:"Lines",tree:"Tree",treemap:"Treemap",sunburst:"Sunburst",parallel:"Parallel",sankey:"Sankey",funnel:"Funnel",gauge:"Gauge",pictorialBar:"PictorialBar",themeRiver:"ThemeRiver",calendar:"Calendar",custom:"Custom",dataset:"Dataset",dataZoom:"DataZoom",drag:"Drag",rich:"Rich Text",globe:"3D Globe",bar3D:"3D Bar",scatter3D:"3D Scatter",surface:"3D Surface",map3D:"3D Map",lines3D:"3D Lines",line3D:"3D Line",scatterGL:"Scatter GL",linesGL:"Lines GL",flowGL:"Flow GL",graphGL:"Graph GL"}},zh:{editor:{run:"运行",errorInEditor:"编辑器内容有误!",chartOK:"图表已生成, ",darkMode:"深色模式",enableDecal:"无障碍花纹",renderCfgTitle:"渲染设置",useDirtyRect:"开启脏矩形优化",renderer:"渲染模式",download:"下载示例",edit:"编辑",monacoMode:"开启类型检查",tabEditor:"示例编辑",tabFullCodePreview:"完整代码",tabOptionPreview:"配置项",minimalBundle:"按需引入"},chartTypes:{line:"折线图",bar:"柱状图",pie:"饼图",scatter:"散点图",map:"地理坐标/地图",candlestick:"K 线图",radar:"雷达图",boxplot:"盒须图",heatmap:"热力图",graph:"关系图",lines:"路径图",tree:"树图",treemap:"矩形树图",sunburst:"旭日图",parallel:"平行坐标系",sankey:"桑基图",funnel:"漏斗图",gauge:"仪表盘",pictorialBar:"象形柱图",themeRiver:"主题河流图",calendar:"日历坐标系",custom:"自定义系列",dataset:"数据集",dataZoom:"数据区域缩放",drag:"拖拽",rich:"富文本",globe:"3D 地球",bar3D:"3D 柱状图",scatter3D:"3D 散点图",surface:"3D 曲面",map3D:"3D 地图",lines3D:"3D 路径图",line3D:"3D 折线图",scatterGL:"GL 散点图",linesGL:"GL 路径图",flowGL:"GL 矢量场图",graphGL:"GL 关系图"}}};var X=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{attrs:{id:"main-container"}},[t.shared.isMobile?t._e():i("div",{style:{width:t.leftContainerSize+"%"},attrs:{id:"editor-left-container"}},[i("el-tabs",{attrs:{type:"border-card"},model:{value:t.currentTab,callback:function(e){t.currentTab=e},expression:"currentTab"}},[i("el-tab-pane",{attrs:{label:t.$t("editor.tabEditor"),name:"code-editor"}},[i("el-container",[i("el-header",{attrs:{id:"editor-control-panel"}},[i("div",{attrs:{id:"code-info"}},[t.shared.editorStatus.message?[i("span",{staticClass:"code-info-time"},[t._v(t._s(t.currentTime))]),t._v(" "),i("span",{class:"code-info-type-"+t.shared.editorStatus.type},[t._v(t._s(t.shared.editorStatus.message))])]:t._e()],2),t._v(" "),i("div",{staticClass:"editor-controls"},[i("a",{staticClass:"btn btn-default btn-sm",attrs:{href:"javascript:;"},on:{click:t.disposeAndRun}},[t._v(t._s(t.$t("editor.run")))])])]),t._v(" "),i("el-main",[t.shared.typeCheck?i("CodeMonaco",{attrs:{id:"code-panel",initialCode:t.initialCode}}):i("CodeAce",{attrs:{id:"code-panel",initialCode:t.initialCode}})],1)],1)],1),t._v(" "),i("el-tab-pane",{attrs:{label:t.$t("editor.tabFullCodePreview"),name:"full-code",lazy:!0}},[i("el-container",{staticStyle:{width:"100%",height:"100%"}},[i("el-header",{attrs:{id:"full-code-generate-config"}},[i("span",{staticClass:"full-code-generate-config-label"}),t._v(" "),i("el-switch",{staticClass:"enable-decal",attrs:{"active-text":t.$t("editor.minimalBundle"),"inactive-text":""},model:{value:t.fullCodeConfig.minimal,callback:function(e){t.$set(t.fullCodeConfig,"minimal",e)},expression:"fullCodeConfig.minimal"}}),t._v(" "),i("el-switch",{staticClass:"enable-decal",attrs:{"active-text":"ES Modules","inactive-text":""},model:{value:t.fullCodeConfig.esm,callback:function(e){t.$set(t.fullCodeConfig,"esm",e)},expression:"fullCodeConfig.esm"}})],1),t._v(" "),i("el-main",[i("FullCodePreview",{attrs:{code:t.fullCode}})],1)],1)],1),t._v(" "),i("el-tab-pane",{attrs:{label:t.$t("editor.tabOptionPreview"),name:"full-option"}},[i("div",{attrs:{id:"option-outline"}})])],1)],1),t._v(" "),t.shared.isMobile?t._e():i("div",{staticClass:"handler",style:{left:t.leftContainerSize+"%"},attrs:{id:"h-handler"},on:{mousedown:t.onSplitterDragStart}}),t._v(" "),i("Preview",{ref:"preview",staticClass:"right-container",style:{width:100-t.leftContainerSize+"%",left:t.leftContainerSize+"%"},attrs:{inEditor:!0}})],1)};X._withStripped=!0;var tt=function(){var t=this,e=t.$createElement;return(t._self._c||e)("div",{directives:[{name:"loading",rawName:"v-loading",value:t.loading,expression:"loading"}],staticClass:"ace-editor-main"})};tt._withStripped=!0;var et={grid:108210,series:1161721,pie:173151,legend:278319,right:12224,tooltip:188049,xAxis:374619,bar:182040,label:163527,emphasis:5e4,formatter:62138,line:306801,data:232156,left:24464,top:18094,scatter:48954,type:92134,yAxis:238764,axisLabel:73604,legendHoverLink:14243,textStyle:129159,hoverAnimation:9062,dataZoom:90999,nameLocation:15800,nameTextStyle:30596,nameGap:14640,singleAxis:15977,splitLine:30047,nameRotate:10483,inverse:12997,boundaryGap:18533,clockwise:4411,lineStyle:81857,selectedOffset:2984,width:17962,slider:28321,dataBackground:2287,areaStyle:19428,color:94439,height:7954,orient:17218,align:10373,symbol:35613,xAxisIndex:15405,stack:10602,clipOverflow:3229,center:9827,padding:12855,itemStyle:143518,itemGap:11914,shadowBlur:17233,shadowColor:13929,normal:211293,borderColor:20648,shadowOffsetX:11499,shadowOffsetY:9210,opacity:12301,heatmap:13825,value:21111,fillerColor:797,borderWidth:15576,itemWidth:7123,effectScatter:31179,coordinateSystem:15302,axisLine:53628,axisTick:38765,selectedMode:15177,fontSize:14906,inactiveColor:5720,selected:10921,gauge:55176,markLine:65539,handleStyle:1852,borderType:5717,title:158568,show:82e3,length:4814,zlevel:22293,labelPrecision:746,position:48349,labelFormatter:727,alignWithLabel:3785,interval:28810,showDetail:694,yAxisIndex:10560,showDataShadow:591,realtime:2611,onZero:3690,silent:22883,radar:61070,axisPointer:23175,trigger:15344,barCategoryGap:3511,splitNumber:19992,inside:32482,name:61072,showSymbol:4778,containLabel:6413,offset:15619,max:12538,backgroundColor:32864,visualMap:95262,fontStyle:14443,fontWeight:11970,fontFamily:10141,symbolSize:21077,blurSize:360,geo:65283,radius:8533,markArea:19906,map:102385,brush:29508,parallel:20673,parallelAxis:13713,gridIndex:20650,piecewise:25231,showContent:6960,zoom:3997,polar:23175,controller:2892,radiusAxis:24146,angleAxis:18771,toolbox:101543,timeline:34619,precision:3306,curveness:1378,x:2753,valueIndex:2807,itemHeight:5180,icon:10336,valueDim:2013,symbolOffset:10017,y:1590,transitionDuration:3814,radarIndex:715,extraCssText:3640,animation:17864,"animationThreshold = 2000":11727,minInterval:11278,animationDelay:7620,layoutCenter:2348,animationDurationUpdate:6972,animationEasingUpdate:6816,animationDelayUpdate:6642,symbolRotate:10221,feature:50238,axis:1794,crossStyle:1830,funnel:11042,scaleLimit:4792,roam:7112,itemSize:1966,showTitle:1851,smooth:5185,saveAsImage:9915,showAllSymbol:3417,polarIndex:5235,graph:76898,layout:2633,excludeComponents:447,restore:3693,dataView:10258,magicType:10505,iconStyle:9088,nodeScaleRatio:892,hoverLayerThreshold:6480,textAlign:9402,splitArea:16447,nameMap:4584,text:11691,pixelRatio:357,readOnly:491,optionToContent:936,lang:549,textareaColor:233,textareaBorderColor:177,option:2003,seriesIndex:4483,back:199,rect:323,polygon:254,min:16646,scale:14303,logBase:7456,start:2889,z:15867,link:5348,textBaseline:4210,subtext:5086,sublink:2618,subtarget:2373,subtextStyle:7732,triggerEvent:9175,blendMode:6359,progressiveThreshold:4699,continuous:42105,lines:31608,markPoint:81254,roseType:4221,animationEasing:8836,animationDuration:9562,calculable:3953,progressive:5761,treemap:16948,links:9573,edgeSymbol:1211,bottom:13969,edges:1122,edgeLabel:1685,edgeSymbolSize:769,focusNodeAdjacency:888,draggable:965,force:5601,geoIndex:2856,circular:1862,avoidLabelOverlap:3694,target:5476,coord:3995,startValue:2182,triggerOn:6741,showDelay:3535,alwaysShowContent:4928,enterable:3871,hideDelay:3018,step:3437,detail:5434,startAngle:5421,handleIcon:1051,handleSize:932,zoomLock:1979,throttle:1757,boxplot:6233,candlestick:14005,sankey:10101,loop:678,rewind:439,controlStyle:1269,labelLine:17838,distance:452,rotate:4666,margin:4342,barWidth:6641,category:1318,barGap:4832,nodes:2085,pieces:2683,smoothMonotone:2203,itemSymbol:882,axisType:902,currentIndex:583,effectType:1364,areaColor:2808,showEffectOn:1285,rippleEffect:3617,minAngle:2527,barMaxWidth:3073,rotateLabel:523,dimension:1922,end:1426,inRange:4604,outOfRange:2262,checkpointStyle:1036,sampling:2458,regions:6273,large:1055,showLegendSymbol:1600,layoutSize:1981,mapValueCalculation:1447,categories:4362,indicator:2995,barBorderRadius:1455,range:2009,connectNulls:3411,pointer:2665,effect:5446,parallelAxisDefault:927,coords:750,shadowStyle:1670,largeThreshold:754,hoverLink:1276,repulsion:865,textGap:1121,breadcrumb:828,baseline:1316,endAngle:895,period:1153,brushType:1421,minOpacity:216,brushLink:913,brushMode:465,transformable:418,brushStyle:507,throttleType:448,throttleDelay:369,removeOnClick:648,inBrush:500,outOfBrush:466,offsetCenter:981,barMinHeight:2279,parallelIndex:235,nodeClick:732,source:869,color0:210,filterMode:2252,tiled:352,autoPlay:496,playInterval:440,sort:484,polyline:929,initLayout:966,controlPosition:408,children:89,contentToOption:590,maxOpacity:215,squareRatio:281,leafDepth:347,zoomToNodeRatio:300,childrenVisibleMin:303,shape:1054,length2:891,endValue:1107,gravity:634,edgeLength:662,layoutAnimation:485,colorAlpha:389,constantSpeed:451,trailLength:530,dim:313,areaSelectStyle:253,funnelAlign:334,buttonTextColor:177,buttonColor:205,levels:2267,textColor:178,lineX:46,lineY:32,showPlayBtn:64,showPrevBtn:43,showNextBtn:43,playIcon:90,stopIcon:48,prevIcon:39,nextIcon:36,ellipsis:76,clear:114,colorMappingBy:424,maxSize:131,minSize:147,gap:175,visibleMin:315,axisExpandable:134,layoutIterations:226,nodeGap:158,nodeWidth:134,axisExpandCenter:79,axisExpandCount:56,axisExpandWidth:51,boxWidth:46,gapWidth:78,borderColorSaturation:56,inactiveOpacity:51,keep:41,colorSaturation:343,visualDimension:471,id:138,borderColor0:67,emptyItemWidth:60,activeOpacity:43,radiusAxisIndex:574,angleAxisIndex:478,textPosition:232,minOpen:194,maxOpen:125,graphic:5617,elements:3108,image:673,group:488,$action:82,style:431,textVerticalAlign:13,fill:55,stroke:47,lineWidth:34,sector:93,"bezier-curve":6,cpx2:1,cpy2:1,circle:256,arc:61,bezierCurve:61,onclick:101,onmouseover:32,font:17,bounding:75,cursor:54,themeRiver:11,confine:580,ring:103,ondragleave:3,ondragstart:4,ondragover:4,disabled:221,visualMin:44,visualMax:18,onmousemove:14,ondrag:8,ondragend:2,x2:7,x1:4,y1:2,y2:3,percent:6,ondrop:9,cx:7,smoothConstraint:20,cpx1:2,points:16,onmousewheel:13,onmouseout:7,barBorderWidth:2,ondragenter:2,onmouseup:1,cy:1,r:2,onmousedown:1,animationThreshold:1},it={};function nt(t){return Promise.all(t.map((function(t){if("string"==typeof t&&(t={url:t,type:t.match(/\.css$/)?"css":"js"}),it[t.url])return it[t.url];var e=new Promise((function(e,i){if("js"===t.type){var n=document.createElement("script");n.src=t.url,n.async=!1,n.onload=function(){e()},n.onerror=function(){i()},document.body.appendChild(n)}else if("css"===t.type){var a=document.createElement("link");a.rel="stylesheet",a.href=t.url,a.onload=function(){e()},a.onerror=function(){i()},document.body.appendChild(a)}}));return it[t.url]=e,e})))}var at=["line","bar","pie","scatter","map","candlestick","radar","boxplot","heatmap","graph","lines","tree","treemap","sunburst","parallel","sankey","funnel","gauge","pictorialBar","themeRiver","calendar","custom","dataset","dataZoom","drag","rich","globe","bar3D","scatter3D","surface","map3D","lines3D","line3D","scatterGL","linesGL","flowGL","graphGL"],rt=function(t){for(var e={},i=0;i<t.length;i++)e[t[i]]=1;return location.href.indexOf("github.io")>=0?{}:e}(["effectScatter-map","geo-lines","geo-map-scatter","heatmap-map","lines-airline","map-china","map-china-dataRange","map-labels","map-locate","map-province","map-world","map-world-dataRange","scatter-map","scatter-map-brush","scatter-weibo","scatter-world-population","geo3d","geo3d-with-different-height","globe-country-carousel","globe-with-echarts-surface","map3d-alcohol-consumption","map3d-wood-map","scattergl-weibo"]),ot={};(location.search||"").substr(1).split("&").forEach((function(t){var e=t.split("=");ot[e[0]]=e[1]}));var lt,st=((lt=document.createElement("canvas")).width=lt.height=1,!(!lt.getContext||!lt.getContext("2d"))&&0===lt.toDataURL("image/webp").indexOf("data:image/webp")),ct={localEChartsMinJS:"http://localhost/echarts/dist/echarts.js",echartsMinJS:"https://cdn.jsdelivr.net/npm/echarts@5.0.1/dist/echarts.min.js",echartsDir:"https://cdn.jsdelivr.net/npm/echarts@5.0.1",echartsStatMinJS:"https://cdn.jsdelivr.net/npm/echarts-stat@latest/dist/ecStat.min.js",echartsGLMinJS:"https://cdn.jsdelivr.net/npm/echarts-gl@2/dist/echarts-gl.min.js",datGUIMinJS:"https://cdn.jsdelivr.net/npm/dat.gui@0.6.5/build/dat.gui.min.js",monacoDir:"https://cdn.jsdelivr.net/npm/monaco-editor@0.21.2/min/vs",aceDir:"https://cdn.jsdelivr.net/npm/ace-builds@1.4.12/src-min-noconflict"},dt={cdnRoot:"",version:"",locale:"",darkMode:"dark"===ot.theme,enableDecal:"decal"in ot,renderer:ot.renderer||"canvas",typeCheck:"monaco"===ot.editor,useDirtyRect:"useDirtyRect"in ot,code:"",runCode:"",sourceCode:"",runHash:"",isMobile:window.innerWidth<600,editorStatus:{type:"",message:""}};function ut(){return new Promise((function(t){var e=ot.gl?"data-gl":"data";$.ajax("".concat(dt.cdnRoot,"/").concat(e,"/").concat(ot.c,".js?_v_").concat(dt.version),{dataType:"text",success:function(e){t(e)}})}))}function pt(t){return t.replace(/\/\*[\w\W]*?\*\//,"").trim()}var ft=123;function gt(t,e,i,n,a,r,o,l){var s,c="function"==typeof t?t.options:t;if(e&&(c.render=e,c.staticRenderFns=i,c._compiled=!0),n&&(c.functional=!0),r&&(c._scopeId="data-v-"+r),o?(s=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),a&&a.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(o)},c._ssrRegister=s):a&&(s=l?function(){a.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:a),s)if(c.functional){c._injectStyles=s;var d=c.render;c.render=function(t,e){return s.call(e),d(t,e)}}else{var u=c.beforeCreate;c.beforeCreate=u?[].concat(u,s):[s]}return{exports:t,options:c}}var ht=gt({props:["initialCode"],data:function(){return{shared:dt,loading:!1}},mounted:function(){var t=this;this.loading=!0,("undefined"==typeof ace?nt([ct.aceDir+"/ace.js",ct.aceDir+"/ext-language_tools.js"]).then((function(){var t=ace.require("ace/ext/language_tools"),e=[];for(var i in et)e.push({caption:i,value:i,score:et[i],metal:"local"});t.addCompleter({getCompletions:function(t,i,n,a,r){r(null,e)}})})):Promise.resolve()).then((function(){t.loading=!1;var e=ace.edit(t.$el);e.getSession().setMode("ace/mode/javascript"),e.setOptions({enableBasicAutocompletion:!0,enableSnippets:!0,enableLiveAutocompletion:!0}),t._editor=e,e.on("change",(function(){dt.sourceCode=dt.runCode=e.getValue()})),t.initialCode&&t.setInitialCode(t.initialCode)}))},methods:{setInitialCode:function(t){this._editor&&t&&(this._editor.setValue(t||""),this._editor.selection.setSelectionRange({start:{row:1,column:4},end:{row:1,column:4}}))}},watch:{initialCode:function(t){this.setInitialCode(t)}}},tt,[],!1,null,null,null);ht.options.__file="src/editor/CodeAce.vue";const mt=ht.exports;var Ct=function(){var t=this,e=t.$createElement;return(t._self._c||e)("div",{directives:[{name:"loading",rawName:"v-loading",value:t.loading,expression:"loading"}],staticClass:"monaco-editor-main"})};Ct._withStripped=!0;var yt=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{class:[t.inEditor&&!t.shared.isMobile?"":"full"]},[i("div",{directives:[{name:"loading",rawName:"v-loading",value:t.loading,expression:"loading"}],staticClass:"right-panel",style:{background:t.backgroundColor},attrs:{id:"chart-panel"}}),t._v(" "),i("div",{attrs:{id:"tool-panel"}},[i("div",{staticClass:"left-panel"},[i("el-switch",{staticClass:"dark-mode",attrs:{"active-color":"#181432","active-text":t.$t("editor.darkMode"),"inactive-text":""},model:{value:t.shared.darkMode,callback:function(e){t.$set(t.shared,"darkMode",e)},expression:"shared.darkMode"}}),t._v(" "),t.isGL?t._e():i("el-switch",{staticClass:"enable-decal",attrs:{"active-text":t.$t("editor.enableDecal"),"inactive-text":""},model:{value:t.shared.enableDecal,callback:function(e){t.$set(t.shared,"enableDecal",e)},expression:"shared.enableDecal"}}),t._v(" "),t.isGL?t._e():i("el-popover",{staticStyle:{"margin-top":"3px"},attrs:{placement:"bottom",width:"450",trigger:"click"}},[i("div",{staticClass:"render-config-container"},[i("el-row",{attrs:{gutter:2,type:"flex",align:"middle"}},[i("el-col",{attrs:{span:12}},[i("label",{staticClass:"tool-label"},[t._v(t._s(t.$t("editor.renderer")))]),t._v(" "),i("el-radio-group",{staticStyle:{"text-transform":"uppercase"},attrs:{size:"mini"},model:{value:t.shared.renderer,callback:function(e){t.$set(t.shared,"renderer",e)},expression:"shared.renderer"}},[i("el-radio-button",{attrs:{label:"svg"}}),t._v(" "),i("el-radio-button",{attrs:{label:"canvas"}})],1)],1),t._v(" "),i("el-col",{attrs:{span:12}},["canvas"===t.shared.renderer?i("el-switch",{attrs:{"active-text":t.$t("editor.useDirtyRect"),"inactive-text":""},model:{value:t.shared.useDirtyRect,callback:function(e){t.$set(t.shared,"useDirtyRect",e)},expression:"shared.useDirtyRect"}}):t._e()],1)],1)],1),t._v(" "),i("span",{staticClass:"render-config-trigger",attrs:{slot:"reference"},slot:"reference"},[i("i",{staticClass:"el-icon-setting el-icon--left"}),t._v(t._s(t.$t("editor.renderCfgTitle")))])])],1),t._v(" "),t.inEditor?[t.shared.isMobile?t._e():i("button",{staticClass:"download btn btn-sm",on:{click:t.downloadExample}},[t._v(t._s(t.$t("editor.download")))]),t._v(" "),i("a",{staticClass:"screenshot",attrs:{target:"_blank"},on:{click:t.screenshot}},[i("i",{staticClass:"el-icon-camera-solid"})])]:i("a",{staticClass:"edit btn btn-sm",attrs:{href:t.editLink,target:"_blank"}},[t._v(t._s(t.$t("editor.edit")))])],2)])};yt._withStripped=!0;var vt=function(){function t(t){var e=this.dom=document.createElement("div");for(var i in e.className="ec-debug-dirty-rect",t=Object.assign({},t),Object.assign(t,{backgroundColor:"rgba(0, 0, 255, 0.2)",border:"1px solid #00f"}),e.style.cssText="\nposition: absolute;\nopacity: 0;\ntransition: opacity 0.5s linear;\npointer-events: none;\n",t)t.hasOwnProperty(i)&&(e.style[i]=t[i])}return t.prototype.update=function(t){var e=this.dom.style;e.width=t.width+"px",e.height=t.height+"px",e.left=t.x+"px",e.top=t.y+"px"},t.prototype.hide=function(){this.dom.style.opacity="0"},t.prototype.show=function(){var t=this;clearTimeout(this._hideTimeout),this.dom.style.opacity="1",this._hideTimeout=setTimeout((function(){t.hide()}),500)},t}();function bt(t){return(bt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var _t=i(279),Lt=i.n(_t);let wt=null,xt=null;function kt(t,e={}){let i=document.createElement(t);return Object.keys(e).forEach((t=>{i[t]=e[t]})),i}function St(t,e,i){return(window.getComputedStyle(t,i||null)||{display:"none"})[e]}function Nt(t){if(!document.documentElement.contains(t))return{detached:!0,rendered:!1};let e=t;for(;e!==document;){if("none"===St(e,"display"))return{detached:!1,rendered:!1};e=e.parentNode}return{detached:!1,rendered:!0}}let Mt=0,Tt=null;function At(t,e){if(t.__resize_mutation_handler__||(t.__resize_mutation_handler__=Dt.bind(t)),!t.__resize_listeners__)if(t.__resize_listeners__=[],window.ResizeObserver){let{offsetWidth:e,offsetHeight:i}=t,n=new ResizeObserver((()=>{(t.__resize_observer_triggered__||(t.__resize_observer_triggered__=!0,t.offsetWidth!==e||t.offsetHeight!==i))&&Et(t)})),{detached:a,rendered:r}=Nt(t);t.__resize_observer_triggered__=!1===a&&!1===r,t.__resize_observer__=n,n.observe(t)}else if(t.attachEvent&&t.addEventListener)t.__resize_legacy_resize_handler__=function(){Et(t)},t.attachEvent("onresize",t.__resize_legacy_resize_handler__),document.addEventListener("DOMSubtreeModified",t.__resize_mutation_handler__);else if(Mt||(Tt=function(t){var e=document.createElement("style");return e.type="text/css",e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t)),(document.querySelector("head")||document.body).appendChild(e),e}('.resize-triggers{visibility:hidden;opacity:0;pointer-events:none}.resize-contract-trigger,.resize-contract-trigger:before,.resize-expand-trigger,.resize-triggers{content:"";position:absolute;top:0;left:0;height:100%;width:100%;overflow:hidden}.resize-contract-trigger,.resize-expand-trigger{background:#eee;overflow:auto}.resize-contract-trigger:before{width:200%;height:200%}')),function(t){let e=St(t,"position");e&&"static"!==e||(t.style.position="relative"),t.__resize_old_position__=e,t.__resize_last__={};let i=kt("div",{className:"resize-triggers"}),n=kt("div",{className:"resize-expand-trigger"}),a=kt("div"),r=kt("div",{className:"resize-contract-trigger"});n.appendChild(a),i.appendChild(n),i.appendChild(r),t.appendChild(i),t.__resize_triggers__={triggers:i,expand:n,expandChild:a,contract:r},Pt(t),t.addEventListener("scroll",Ot,!0),t.__resize_last__={width:t.offsetWidth,height:t.offsetHeight}}(t),t.__resize_rendered__=Nt(t).rendered,window.MutationObserver){let e=new MutationObserver(t.__resize_mutation_handler__);e.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0}),t.__resize_mutation_observer__=e}t.__resize_listeners__.push(e),Mt++}function Dt(){let{rendered:t,detached:e}=Nt(this);t!==this.__resize_rendered__&&(!e&&this.__resize_triggers__&&(Pt(this),this.addEventListener("scroll",Ot,!0)),this.__resize_rendered__=t,Et(this))}function Ot(){var t,e;Pt(this),this.__resize_raf__&&(t=this.__resize_raf__,xt||(xt=(window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||function(t){clearTimeout(t)}).bind(window)),xt(t)),this.__resize_raf__=(e=()=>{let t=function(t){let{width:e,height:i}=t.__resize_last__,{offsetWidth:n,offsetHeight:a}=t;return n!==e||a!==i?{width:n,height:a}:null}(this);t&&(this.__resize_last__=t,Et(this))},wt||(wt=(window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(t){return setTimeout(t,16)}).bind(window)),wt(e))}function Et(t){t&&t.__resize_listeners__&&t.__resize_listeners__.forEach((e=>{e.call(t,t)}))}function Pt(t){let{expand:e,expandChild:i,contract:n}=t.__resize_triggers__,{scrollWidth:a,scrollHeight:r}=n,{offsetWidth:o,offsetHeight:l,scrollWidth:s,scrollHeight:c}=e;n.scrollLeft=a,n.scrollTop=r,i.style.width=o+1+"px",i.style.height=l+1+"px",e.scrollLeft=s,e.scrollTop=c}const Ft=[{category:["bar"],id:"bar-background",tags:[],title:"Bar with Background",titleCN:"带背景色的柱状图",difficulty:0},{category:["custom"],id:"bar-histogram",tags:[],title:"Histogram with Custom Series",titleCN:"直方图(自定义系列)",difficulty:0},{category:["bar"],id:"bar-simple",tags:[],title:"Basic Bar",titleCN:"基础柱状图",difficulty:0},{category:["bar"],id:"bar-tick-align",tags:[],title:"Axis Align with Tick",titleCN:"坐标轴刻度与标签对齐",difficulty:0},{category:["calendar"],id:"calendar-simple",tags:[],title:"Simple Calendar",titleCN:"基础日历图",difficulty:0},{category:["candlestick"],id:"candlestick-simple",tags:[],title:"Basic Candlestick",titleCN:"基础 K 线图",difficulty:0},{category:["dataset","bar","transform"],id:"data-transform-sort-bar",tags:[],title:"Sort Data in Bar Chart",titleCN:"柱状图排序",difficulty:0},{category:["heatmap"],id:"heatmap-cartesian",tags:[],title:"Heatmap on Cartesian",titleCN:"笛卡尔坐标系上的热力图",difficulty:0},{category:["line"],id:"line-simple",tags:[],title:"Basic Line Chart",titleCN:"基础折线图",difficulty:0},{category:["line"],id:"line-smooth",tags:[],title:"Smoothed Line Chart",titleCN:"基础平滑折线图",difficulty:0},{category:["pie"],id:"pie-simple",tags:[],title:"Referer of a website",titleCN:"某站点用户访问来源",difficulty:0},{category:["radar"],id:"radar",tags:[],title:"Basic Radar Chart",titleCN:"基础雷达图",difficulty:0},{category:["sankey"],id:"sankey-simple",tags:[],title:"Basic Sankey",titleCN:"基础桑基图",difficulty:0},{category:["scatter"],id:"scatter-simple",tags:[],title:"Basic Scatter Chart",titleCN:"基础散点图",difficulty:0},{category:["line"],id:"area-basic",tags:[],title:"Basic area chart",titleCN:"基础面积图",difficulty:1},{category:["bar"],id:"bar-data-color",tags:[],title:"Set Style of Single Bar.",titleCN:"自定义单个柱子颜色",difficulty:1},{category:["bar"],id:"bar-waterfall",tags:[],title:"Waterfall Chart",titleCN:"瀑布图(柱状图模拟)",difficulty:1},{category:["calendar","heatmap"],id:"calendar-heatmap",tags:[],title:"Calendar Heatmap",titleCN:"日历热力图",difficulty:1},{category:["calendar","heatmap"],id:"calendar-vertical",tags:[],title:"Calendar Heatmap Vertical",titleCN:"纵向日历图",difficulty:1},{category:["candlestick"],id:"custom-ohlc",tags:[],title:"OHLC Chart",titleCN:"OHLC 图(使用自定义系列)",difficulty:1},{category:["custom"],id:"custom-profit",tags:[],title:"Profit",titleCN:"利润分布直方图",difficulty:1},{category:["dataset","bar"],id:"dataset-encode0",tags:[],title:"Simple Encode",titleCN:"指定数据到坐标轴的映射",difficulty:1},{category:["gauge"],id:"gauge",tags:[],title:"Gauge Basic chart",titleCN:"基础仪表盘",difficulty:1},{category:["gauge"],id:"gauge-simple",tags:[],title:"Simple Gauge",titleCN:"带标签数字动画的基础仪表盘",difficulty:1},{category:["graph"],id:"graph-force2",tags:[],title:"Force Layout",titleCN:"力引导布局",difficulty:1},{category:["line"],id:"line-stack",tags:[],title:"Stacked Line Chart",titleCN:"折线图堆叠",difficulty:1},{category:["parallel"],id:"parallel-simple",tags:[],title:"Basic Parallel",titleCN:"基础平行坐标",difficulty:1},{category:["pie"],id:"pie-borderRadius",tags:[],title:"Doughnut Chart with Rounded Corner",titleCN:"圆角环形图",difficulty:1},{category:["pie"],id:"pie-doughnut",tags:[],title:"Doughnut Chart",titleCN:"环形图",difficulty:1},{category:["radar"],id:"radar-aqi",tags:[],title:"AQI - Radar Chart",titleCN:"AQI - 雷达图",difficulty:1},{category:["sankey"],id:"sankey-vertical",tags:[],title:"Sankey Orient Vertical",titleCN:"垂直方向的桑基图",difficulty:1},{category:["scatter"],id:"scatter-anscombe-quartet",tags:[],title:"Anscomb's quartet",titleCN:"Anscomb's quartet",difficulty:1},{category:["scatter"],id:"scatter-clustering",tags:[],title:"Clustering Process",titleCN:"数据聚合",difficulty:1},{category:["scatter"],id:"scatter-clustering-process",tags:[],title:"Clustering Process",titleCN:"聚合过程可视化",difficulty:1},{category:["scatter"],id:"scatter-exponential-regression",tags:[],title:"Exponential Regression",titleCN:"指数回归(使用统计插件)",difficulty:1},{category:["sunburst"],id:"sunburst-simple",tags:[],title:"Basic Sunburst",titleCN:"基础旭日图",difficulty:1},{category:["line"],id:"area-stack",tags:[],title:"Stacked area chart",titleCN:"堆叠面积图",difficulty:2},{category:["line"],id:"area-stack-gradient",tags:[],title:"Gradient Stacked area chart",titleCN:"渐变堆叠面积图",difficulty:2},{category:["bar"],id:"bar-negative2",tags:[],title:"Bar Chart with Negative Value",titleCN:"交错正负轴标签",difficulty:2},{category:["bar"],id:"bar-y-category",tags:[],title:"World Total Population",titleCN:"世界人口总量 - 条形图",difficulty:2},{category:["calendar"],id:"calendar-horizontal",tags:[],title:"Calendar Heatmap Horizontal",titleCN:"横向日力图",difficulty:2},{category:["candlestick"],id:"candlestick-sh",tags:[],title:"ShangHai Index",titleCN:"上证指数",difficulty:2},{category:["custom","dataZoom"],id:"custom-error-scatter",tags:[],title:"Error Scatter on Catesian",titleCN:"使用自定系列给散点图添加误差范围",difficulty:2},{category:["scatter"],id:"effectScatter-map",tags:[],title:"Air Quality",titleCN:"全国主要城市空气质量",difficulty:2},{category:["gauge"],id:"gauge-speed",tags:[],title:"Speed Gauge",titleCN:"速度仪表盘",difficulty:2},{category:["graph"],id:"graph-grid",tags:[],title:"Graph on Cartesian",titleCN:"笛卡尔坐标系上的 Graph",difficulty:2},{category:["graph"],id:"graph-simple",tags:[],title:"Simple Graph",titleCN:"Graph 简单示例",difficulty:2},{category:["heatmap"],id:"heatmap-large",tags:[],title:"Heatmap - 2w data",titleCN:"热力图 - 2w 数据",difficulty:2},{category:["heatmap"],id:"heatmap-large-piecewise",tags:[],title:"Heatmap - Discrete Mapping of Color",titleCN:"热力图 - 颜色的离散映射",difficulty:2},{category:["line"],id:"line-marker",tags:[],title:"Temperature Change in the coming week",titleCN:"未来一周气温变化",difficulty:2},{category:["parallel"],id:"parallel-aqi",tags:[],title:"Parallel Aqi",titleCN:"AQI 分布(平行坐标)",difficulty:2},{category:["pie"],id:"pie-custom",tags:[],title:"Customized Pie",titleCN:"饼图自定义样式",difficulty:2},{category:["pie"],id:"pie-pattern",tags:[],title:"Texture on Pie Chart",titleCN:"饼图纹理",difficulty:2},{category:["pie"],id:"pie-roseType",tags:[],title:"Nightingale's Rose Diagram",titleCN:"南丁格尔玫瑰图",difficulty:2},{category:["pie"],id:"pie-roseType-simple",tags:[],title:"Nightingale's Rose Diagram",titleCN:"基础南丁格尔玫瑰图",difficulty:2},{category:["radar"],id:"radar-custom",tags:[],title:"Customized Radar Chart",titleCN:"自定义雷达图",difficulty:2},{category:["sankey"],id:"sankey-itemstyle",tags:[],title:"Specify ItemStyle for Each Node in Sankey",titleCN:"桑基图节点自定义样式",difficulty:2},{category:["sankey"],id:"sankey-levels",tags:[],title:"Sankey with Levels Setting",titleCN:"桑基图层级自定义样式",difficulty:2},{category:["scatter"],id:"scatter-effect",tags:[],title:"Effect Scatter Chart",titleCN:"涟漪特效散点图",difficulty:2},{category:["scatter"],id:"scatter-linear-regression",tags:[],title:"Linear Regression",titleCN:"线性回归(使用统计插件)",difficulty:2},{category:["scatter"],id:"scatter-polynomial-regression",tags:[],title:"Polynomial Regression",titleCN:"多项式回归(使用统计插件)",difficulty:2},{category:["sunburst"],id:"sunburst-borderRadius",tags:[],title:"Sunburst with Rounded Corner",titleCN:"圆角旭日图",difficulty:2},{category:["sunburst"],id:"sunburst-label-rotate",tags:[],title:"Sunburst Label Rotate",titleCN:"旭日图标签旋转",difficulty:2},{category:["line","visualMap"],id:"area-pieces",tags:[],title:"Area Pieces",titleCN:"折线图区域高亮",difficulty:3},{category:["bar"],id:"bar-gradient",tags:[],title:"Clickable Column Chart with Gradient",titleCN:"特性示例:渐变色 阴影 点击缩放",difficulty:3},{category:["bar"],id:"bar-label-rotation",tags:[],title:"Bar Label Rotation",titleCN:"柱状图标签旋转",difficulty:3},{category:["bar"],id:"bar-stack",tags:[],title:"Stacked Column Chart",titleCN:"堆叠柱状图",difficulty:3},{category:["bar"],id:"bar-waterfall2",tags:[],title:"Waterfall Chart",titleCN:"阶梯瀑布图(柱状图模拟)",difficulty:3},{category:["bar"],id:"bar-y-category-stack",tags:[],title:"Stacked Horizontal Bar",titleCN:"堆叠条形图",difficulty:3},{category:["candlestick"],id:"candlestick-large",tags:[],title:"Large Scale Candlestick",titleCN:"大数据量K线图",difficulty:3},{category:["custom"],id:"custom-bar-trend",tags:[],title:"Custom Bar Trend",titleCN:"使用自定义系列添加柱状图趋势",difficulty:3},{category:["custom"],id:"custom-cartesian-polygon",tags:[],title:"Custom Cartesian Polygon",titleCN:"自定义多边形图",difficulty:3},{category:["custom"],id:"custom-error-bar",tags:[],title:"Error Bar on Catesian",titleCN:"使用自定系列给柱状图添加误差范围",difficulty:3},{category:["custom"],id:"custom-profile",tags:[],title:"Profile",titleCN:"性能分析图",difficulty:3},{category:["custom"],id:"cycle-plot",tags:[],title:"Cycle Plot",titleCN:"Cycle Plot",difficulty:3},{category:["line"],id:"data-transform-filter",tags:[],title:"Data Transform Fitler",titleCN:"数据过滤",difficulty:3},{category:["dataset","pie","transform"],id:"data-transform-multiple-pie",tags:[],title:"Partition Data to Pies",titleCN:"分割数据到数个饼图",difficulty:3},{category:["dataset","pie"],id:"dataset-default",tags:[],title:"Default arrangement",titleCN:"默认 encode 设置",difficulty:3},{category:["dataset"],id:"dataset-encode1",tags:[],title:"Encode and Matrix",titleCN:"指定数据到坐标轴的映射",difficulty:3},{category:["gauge"],id:"gauge-progress",tags:[],title:"Grogress Gauge",titleCN:"进度仪表盘",difficulty:3},{category:["gauge"],id:"gauge-stage",tags:[],title:"Stage Speed Gauge",titleCN:"阶段速度仪表盘",difficulty:3},{category:["graph"],id:"graph-force",tags:[],title:"Force Layout",titleCN:"力引导布局",difficulty:3},{category:["graph"],id:"graph-label-overlap",tags:[],title:"Hide Overlapped Label",titleCN:"关系图自动隐藏重叠标签",difficulty:3},{category:["heatmap"],id:"heatmap-bmap",tags:["bmap"],title:"Heatmap on Baidu Map Extension",titleCN:"热力图与百度地图扩展",difficulty:3},{category:["heatmap"],id:"heatmap-map",tags:[],title:"Air Qulity",titleCN:"全国主要城市空气质量",difficulty:3},{category:["line"],id:"line-gradient",tags:[],title:"Line Gradient",titleCN:"折线图的渐变",difficulty:3},{category:["line"],id:"line-sections",tags:[],title:"Distribution of Electricity",titleCN:"一天用电量分布",difficulty:3},{category:["pie"],id:"pie-alignTo",tags:[],title:"Pie Label Align",titleCN:"饼图标签对齐",difficulty:3},{category:["pie"],id:"pie-labelLine-adjust",tags:[],title:"Label Line Adjust",titleCN:"饼图引导线调整",difficulty:3},{category:["radar"],id:"radar2",tags:[],title:"Proportion of Browsers",titleCN:"浏览器占比变化",difficulty:3},{category:["sankey"],id:"sankey-energy",tags:[],title:"Gradient Edge",titleCN:"桑基图渐变色边",difficulty:3},{category:["sankey"],id:"sankey-nodeAlign-left",tags:[],title:"Node Align Left in Sankey",titleCN:"桑基图左对齐布局",difficulty:3},{category:["sankey"],id:"sankey-nodeAlign-right",tags:[],title:"Node Align Right in Sankey",titleCN:"桑基图右对齐布局",difficulty:3},{category:["scatter"],id:"scatter-punchCard",tags:[],title:"Punch Card of Github",titleCN:"GitHub 打卡气泡图",difficulty:3},{category:["scatter"],id:"scatter-single-axis",tags:[],title:"Scatter on Single Axis",titleCN:"单轴散点图",difficulty:3},{category:["scatter"],id:"scatter-weight",tags:[],title:"Distribution of Height and Weight",titleCN:"男性女性身高体重分布",difficulty:3},{category:["sunburst"],id:"sunburst-monochrome",tags:[],title:"Monochrome Sunburst",titleCN:"Monochrome Sunburst",difficulty:3},{category:["line","dataZoom"],id:"area-simple",tags:[],title:"Large scale area chart",titleCN:"大数据量面积图",difficulty:4},{category:["bar"],id:"bar-brush",tags:[],title:"Brush Select on Column Chart",titleCN:"柱状图框选",difficulty:4},{category:["bar"],id:"bar-negative",tags:[],title:"Bar Chart with Negative Value",titleCN:"正负条形图",difficulty:4},{category:["bar"],id:"bar1",tags:[],title:"Rainfall and Evaporation",titleCN:"某地区蒸发量和降水量",difficulty:4},{category:["calendar","graph"],id:"calendar-graph",tags:[],title:"Calendar Graph",titleCN:"日历关系图",difficulty:4},{category:["calendar"],id:"calendar-lunar",tags:[],title:"Calendar Lunar",titleCN:"农历日历图",difficulty:4},{category:["candlestick"],id:"candlestick-touch",tags:[],title:"Axis Pointer Link and Touch",titleCN:"触屏上的坐标轴指示器",difficulty:4},{category:["line"],id:"confidence-band",tags:[],title:"Confidence Band",titleCN:"Confidence Band",difficulty:4},{category:["custom","dataZoom","drag"],id:"custom-gantt-flight",tags:[],title:"Gantt Chart of Airport Flights",titleCN:"机场航班甘特图",difficulty:4},{category:["custom"],id:"custom-polar-heatmap",tags:[],title:"Polar Heatmap",titleCN:"极坐标热力图(自定义系列)",difficulty:4},{category:["boxplot"],id:"data-transform-aggregate",tags:[],title:"Data Transform Simple Aggregate",titleCN:"简单的数据聚合",difficulty:4},{category:["gauge"],id:"gauge-grade",tags:[],title:"Grade Gauge",titleCN:"等级仪表盘",difficulty:4},{category:["gauge"],id:"gauge-multi-title",tags:[],title:"Multi Title Gauge",titleCN:"多标题仪表盘",difficulty:4},{category:["gauge"],id:"gauge-temperature",tags:[],title:"Temperature Gauge chart",titleCN:"气温仪表盘",difficulty:4},{category:["graph"],id:"graph",tags:[],title:"Les Miserables",titleCN:"悲惨世界人物关系图",difficulty:4},{category:["line"],id:"grid-multiple",tags:[],title:"Rainfall and Water Flow",titleCN:"雨量流量关系图",difficulty:4},{category:["line"],id:"line-aqi",tags:[],title:"Beijing AQI",titleCN:"北京 AQI 可视化",difficulty:4},{category:["bar"],id:"mix-line-bar",tags:[],title:"Mixed Line and Bar",titleCN:"折柱混合",difficulty:4},{category:["bar"],id:"mix-zoom-on-value",tags:[],title:"Mix Zoom On Value",titleCN:"多数值轴轴缩放",difficulty:4},{category:["line"],id:"multiple-x-axis",tags:[],title:"Multiple X Axes",titleCN:"多 X 轴",difficulty:4},{category:["bar"],id:"multiple-y-axis",tags:[],title:"Multiple Y Axes",titleCN:"多 Y 轴示例",difficulty:4},{category:["parallel"],id:"parallel-nutrients",tags:[],title:"Parallel Nutrients",titleCN:"营养结构(平行坐标)",difficulty:4},{category:["pie"],id:"pie-legend",tags:[],title:"Pie with Scrollable Legend",titleCN:"可滚动的图例",difficulty:4},{category:["pie","rich"],id:"pie-rich-text",tags:[],title:"Pie Special Label",titleCN:"富文本标签",difficulty:4},{category:["scatter"],id:"scatter-label-align-right",tags:[],title:"Align Label on the Top",titleCN:"散点图标签顶部对齐",difficulty:4},{category:["scatter"],id:"scatter-label-align-top",tags:[],title:"Align Label on the Top",titleCN:"散点图标签顶部对齐",difficulty:4},{category:["sunburst"],id:"sunburst-visualMap",tags:[],title:"Sunburst VisualMap",titleCN:"旭日图使用视觉编码",difficulty:4},{category:["line"],id:"area-rainfall",tags:[],title:"Rainfall",titleCN:"雨量流量关系图",difficulty:5},{category:["line"],id:"area-time-axis",tags:[],title:"Area Chart with Time Axis",titleCN:"时间轴折线图",difficulty:5},{category:["bar"],id:"bar-animation-delay",tags:[],title:"Animation Delay",titleCN:"柱状图动画延迟",difficulty:5},{category:["bar"],id:"bar-large",tags:[],title:"Large Scale Bar Chart",titleCN:"大数据量柱图",difficulty:5},{category:["bar"],id:"bar-race",tags:[],title:"Bar Race",titleCN:"动态排序柱状图",difficulty:5},{category:["dataset","line","pie"],id:"dataset-link",tags:[],title:"Share Dataset",titleCN:"联动和共享数据集",difficulty:5},{category:["dataset","bar"],id:"dataset-series-layout-by",tags:[],title:"Series Layout By Column or Row",titleCN:"系列按行和按列排布",difficulty:5},{category:["dataset","bar"],id:"dataset-simple0",tags:[],title:"Simple Example of Dataset",titleCN:"最简单的数据集(dataset)",difficulty:5},{category:["dataset","bar"],id:"dataset-simple1",tags:[],title:"Dataset in Object Array",titleCN:"对象数组的输入格式",difficulty:5},{category:["line"],id:"dynamic-data2",tags:[],title:"Dynamic Data + Time Axis",titleCN:"动态数据 + 时间坐标轴",difficulty:5},{category:["gauge"],id:"gauge-ring",tags:[],title:"Ring Gauge",titleCN:"得分环",difficulty:5},{category:["graph"],id:"graph-circular-layout",tags:[],title:"Les Miserables",titleCN:"悲惨世界人物关系图(环形布局)",difficulty:5},{category:["line"],id:"line-function",tags:[],title:"Function Plot",titleCN:"函数绘图",difficulty:5},{category:["line"],id:"line-race",tags:[],title:"Line Race",titleCN:"动态排序折线图",difficulty:5},{category:["pie","rich"],id:"pie-nest",tags:[],title:"Nested Pies",titleCN:"嵌套环形图",difficulty:5},{category:["scatter"],id:"scatter-large",tags:[],title:"Large Scatter",titleCN:"大规模散点图",difficulty:5},{category:["scatter"],id:"scatter-nebula",tags:[],title:"Scatter Nebula",titleCN:"大规模星云散点图",difficulty:5},{category:["scatter"],id:"scatter-stream-visual",tags:[],title:"Visual interaction with stream",titleCN:"流式渲染和视觉映射操作",difficulty:5},{category:["sunburst"],id:"sunburst-drink",tags:[],title:"Drink Flavors",titleCN:"Drink Flavors",difficulty:5},{category:["custom","dataZoom"],id:"wind-barb",tags:[],title:"Wind Barb",titleCN:"风向图",difficulty:5},{category:["bar"],id:"bar-race-country",tags:[],title:"Bar Race",titleCN:"动态排序柱状图 - 人均收入",difficulty:6},{category:["bar","rich"],id:"bar-rich-text",tags:[],title:"Wheater Statistics",titleCN:"天气统计(富文本)",difficulty:6},{category:["scatter"],id:"bubble-gradient",tags:[],title:"Bubble Chart",titleCN:"气泡图",difficulty:6},{category:["calendar","pie"],id:"calendar-pie",tags:[],title:"Calendar Pie",titleCN:"日历饼图",difficulty:6},{category:["custom","map"],id:"custom-hexbin",tags:[],title:"Hexagonal Binning",titleCN:"六边形分箱图(自定义系列)",difficulty:6},{category:["bar"],id:"dynamic-data",tags:[],title:"Dynamic Data",titleCN:"动态数据",difficulty:6},{category:["gauge"],id:"gauge-barometer",tags:[],title:"Gauge Barometer chart",titleCN:"气压表",difficulty:6},{category:["graph"],id:"graph-force-dynamic",tags:[],title:"Graph Dynamic",titleCN:"动态增加图节点",difficulty:6},{category:["line"],id:"line-markline",tags:[],title:"Line with Marklines",titleCN:"折线图的标记线",difficulty:6},{category:["line"],id:"line-style",tags:[],title:"Line Style and Item Style",titleCN:"自定义折线图样式",difficulty:6},{category:["bar"],id:"mix-timeline-finance",tags:[],title:"Finance Indices 2002",titleCN:"2002全国宏观经济指标",difficulty:6},{category:["sunburst"],id:"sunburst-book",tags:[],title:"Book Records",titleCN:"书籍分布",difficulty:6},{category:["bar"],id:"watermark",tags:[],title:"Watermark - ECharts Download",titleCN:"水印 - ECharts 下载统计",difficulty:6},{category:["bar"],id:"bar-polar-real-estate",tags:[],title:"Bar Chart on Polar",difficulty:7},{category:["bar"],id:"bar-polar-stack",tags:[],title:"Stacked Bar Chart on Polar",titleCN:"极坐标系下的堆叠柱状图",difficulty:7},{category:["bar"],id:"bar-polar-stack-radial",tags:[],title:"Stacked Bar Chart on Polar(Radial)",titleCN:"极坐标系下的堆叠柱状图",difficulty:7},{category:["custom","calendar"],id:"custom-calendar-icon",tags:[],title:"Custom Calendar Icon",titleCN:"日历图自定义图标",difficulty:7},{category:["custom"],id:"custom-wind",tags:[],title:"Use custom series to draw wind vectors",titleCN:"使用自定义系列绘制风场",difficulty:7},{category:["gauge"],id:"gauge-clock",tags:[],title:"Clock Gauge",titleCN:"时钟仪表盘",difficulty:7},{category:["graph"],id:"graph-life-expectancy",tags:[],title:"Graph Life Expectancy",titleCN:"Graph Life Expectancy",difficulty:7},{category:["line"],id:"line-in-cartesian-coordinate-system",tags:[],title:"Line Chart in Cartesian Coordinate System",titleCN:"双数值轴折线图",difficulty:7},{category:["line"],id:"line-log",tags:[],title:"Log Axis",titleCN:"对数轴示例",difficulty:7},{category:["line"],id:"line-step",tags:[],title:"Step Line",titleCN:"阶梯折线图",difficulty:7},{category:["bar"],id:"polar-roundCap",tags:[],title:"Rounded Bar on Polar",titleCN:"圆角环形图",difficulty:7},{category:["scatter"],id:"scatter-aqi-color",tags:[],title:"Scatter Aqi Color",titleCN:"AQI 气泡图",difficulty:7},{category:["scatter"],id:"scatter-nutrients",tags:[],title:"Scatter Nutrients",titleCN:"营养分布散点图",difficulty:7},{category:["scatter"],id:"scatter-nutrients-matrix",tags:[],title:"Scatter Nutrients Matrix",titleCN:"营养分布散点矩阵",difficulty:7},{category:["gauge"],id:"gauge-car",tags:[],title:"Gauge Car",titleCN:"Gauge Car",difficulty:8},{category:["graph"],id:"graph-webkit-dep",tags:[],title:"Graph Webkit Dep",titleCN:"WebKit 模块关系依赖图",difficulty:8},{category:["line"],id:"line-easing",tags:[],title:"Line Easing Visualizing",titleCN:"缓动函数可视化",difficulty:8},{category:["line"],id:"line-y-category",tags:[],title:"Line Y Category",titleCN:"垂直折线图(Y轴为类目轴)",difficulty:8},{category:["scatter"],id:"scatter-polar-punchCard",tags:[],title:"Punch Card of Github",titleCN:"GitHub 打卡气泡图(极坐标)",difficulty:8},{category:["custom"],id:"custom-aggregate-scatter-bar",tags:[],title:"Aggregate Morphing Between Scatter and Bar",titleCN:"聚合分割形变(散点图 - 柱状图)",difficulty:9},{category:["custom"],id:"custom-aggregate-scatter-pie",tags:[],title:"Aggregate Morphing Between Scatter and Pie",titleCN:"聚合分割形变(散点图 - 饼图)",difficulty:9},{category:["custom"],id:"custom-gauge",tags:[],title:"Custom Gauge",titleCN:"自定义仪表",difficulty:9},{category:["graph"],id:"graph-npm",tags:[],title:"NPM Dependencies",titleCN:"NPM 依赖关系图",difficulty:9},{category:["line"],id:"line-graphic",tags:[],title:"Custom Graphic Component",titleCN:"自定义图形组件",difficulty:9},{category:["line"],id:"line-pen",tags:[],title:"Click to Add Points",titleCN:"点击添加折线图拐点",difficulty:9},{category:["scatter"],id:"scatter-life-expectancy-timeline",tags:[],title:"Life Expectancy and GDP",titleCN:"各国人均寿命与GDP关系演变",difficulty:9},{category:["scatter"],id:"scatter-painter-choice",tags:[],title:"Master Painter Color Choices Throughout History",titleCN:"Master Painter Color Choices Throughout History",difficulty:9},{category:["boxplot"],id:"boxplot-light-velocity",tags:[],title:"Boxplot Light Velocity",titleCN:"基础盒须图",difficulty:10},{category:["boxplot"],id:"boxplot-light-velocity2",tags:[],title:"Boxplot Light Velocity2",titleCN:"垂直方向盒须图",difficulty:10},{category:["boxplot"],id:"boxplot-multi",tags:[],title:"Multiple Categories",titleCN:"多系列盒须图",difficulty:10},{category:[],id:"calendar-effectscatter",tags:[],difficulty:10},{category:["candlestick"],id:"candlestick-brush",tags:[],title:"Candlestick Brush",titleCN:"日力图刷选",difficulty:10},{category:["candlestick"],id:"candlestick-sh-2015",tags:[],title:"ShangHai Index, 2015",titleCN:"2015 年上证指数",difficulty:10},{category:[],id:"covid-america",tags:[],difficulty:10},{category:["custom"],id:"custom-aggregate-scatter-cluster",tags:[],title:"Aggregate Morphing Between Scatter Clustering",titleCN:"聚合分割形变(散点图聚类)",difficulty:10},{category:["scatter","map"],id:"effectScatter-bmap",tags:["bmap"],title:"Air Quality - Baidu Map",titleCN:"全国主要城市空气质量 - 百度地图",difficulty:10},{category:["funnel"],id:"funnel",tags:[],title:"Funnel Chart",titleCN:"漏斗图",difficulty:10},{category:["funnel"],id:"funnel-align",tags:[],title:"Funnel (align)",titleCN:"漏斗图(对比)",difficulty:10},{category:["funnel"],id:"funnel-customize",tags:[],title:"Customized Funnel",titleCN:"漏斗图",difficulty:10},{category:["funnel"],id:"funnel-mutiple",tags:[],title:"Multiple Funnels",titleCN:"漏斗图",difficulty:10},{category:["map"],id:"geo-lines",tags:[],title:"Migration",titleCN:"模拟迁徙",difficulty:10},{category:["map"],id:"geo-map-scatter",tags:[],title:"map and scatter share a geo",titleCN:"map and scatter share a geo",difficulty:10},{category:["line","drag"],id:"line-draggable",tags:[],title:"Try Dragging these Points",titleCN:"可拖拽点",difficulty:10},{category:["line"],id:"line-polar",tags:[],title:"Two Value-Axes in Polar",titleCN:"极坐标双数值轴",difficulty:10},{category:["line"],id:"line-polar2",tags:[],title:"Two Value-Axes in Polar",titleCN:"极坐标双数值轴",difficulty:10},{category:["line","dataZoom"],id:"line-tooltip-touch",tags:[],title:"Tooltip and DataZoom on Mobile",titleCN:"移动端上的 dataZoom 和 tooltip",difficulty:10},{category:["map","lines"],id:"lines-airline",tags:[],title:"65k+ Airline",titleCN:"65k+ 飞机航线",difficulty:10},{category:["map","lines"],id:"lines-bmap",tags:["bmap"],title:"A Hiking Trail in Hangzhou - Baidu Map",titleCN:"杭州热门步行路线 - 百度地图",difficulty:10},{category:["map","lines"],id:"lines-bmap-bus",tags:["bmap"],title:"Bus Lines of Beijing - Baidu Map",titleCN:"北京公交路线 - 百度地图",difficulty:10},{category:["map","lines"],id:"lines-bmap-effect",tags:["bmap"],title:"Bus Lines of Beijing - Line Effect",titleCN:"北京公交路线 - 线特效",difficulty:10},{category:["map","lines"],id:"lines-ny",tags:[],title:"Use lines to draw 1 million ny streets.",titleCN:"使用线图绘制近 100 万的纽约街道数据",difficulty:10},{category:["map"],id:"map-bin",tags:["bmap"],title:"Binning on Map",titleCN:"Binning on Map",difficulty:10},{category:["map"],id:"map-china",tags:[],title:"Map China",titleCN:"Map China",difficulty:10},{category:["map"],id:"map-china-dataRange",tags:[],title:"Sales of iphone",titleCN:"iphone销量",difficulty:10},{category:["map"],id:"map-HK",tags:[],title:"Population Density of HongKong (2011)",titleCN:"香港18区人口密度 (2011)",difficulty:10},{category:["map"],id:"map-labels",tags:[],title:"Rich Text Labels on Map",titleCN:"地图上的富文本标签",difficulty:10},{category:["map"],id:"map-locate",tags:[],title:"Map Locate",titleCN:"Map Locate",difficulty:10},{category:["map"],id:"map-polygon",tags:["bmap"],title:"Draw Polygon on Map",titleCN:"在地图上绘制多边形",difficulty:10},{category:["map"],id:"map-province",tags:[],title:"Switch among 34 Provinces",titleCN:"34 省切换查看",difficulty:10},{category:["map"],id:"map-usa",tags:[],title:"USA Population Estimates (2012)",titleCN:"USA Population Estimates (2012)",difficulty:10},{category:["map"],id:"map-world",tags:[],title:"Map World",titleCN:"Map World",difficulty:10},{category:["map"],id:"map-world-dataRange",tags:[],title:"World Population (2010)",titleCN:"World Population (2010)",difficulty:10},{category:["pictorialBar"],id:"pictorialBar-body-fill",tags:[],title:"Water Content",titleCN:"人体含水量",difficulty:10},{category:["pictorialBar"],id:"pictorialBar-dotted",tags:[],title:"Dotted bar",titleCN:"虚线柱状图效果",difficulty:10},{category:["pictorialBar"],id:"pictorialBar-forest",tags:[],title:"Expansion of forest",titleCN:"森林的增长",difficulty:10},{category:["pictorialBar"],id:"pictorialBar-hill",tags:[],title:"Wish List and Mountain Height",titleCN:"圣诞愿望清单和山峰高度",difficulty:10},{category:["pictorialBar"],id:"pictorialBar-spirit",tags:[],title:"Spirits",titleCN:"精灵",difficulty:10},{category:["pictorialBar"],id:"pictorialBar-vehicle",tags:[],title:"Vehicles",titleCN:"交通工具",difficulty:10},{category:["pictorialBar"],id:"pictorialBar-velocity",tags:[],title:"Velocity of Christmas Reindeers",titleCN:"驯鹿的速度",difficulty:10},{category:["radar"],id:"radar-multiple",tags:[],title:"Multiple Radar",titleCN:"多雷达图",difficulty:10},{category:["scatter"],id:"scatter-map",tags:[],title:"Air Quality",titleCN:"全国主要城市空气质量",difficulty:10},{category:["scatter"],id:"scatter-map-brush",tags:[],title:"Scatter Map Brush",titleCN:"Scatter Map Brush",difficulty:10},{category:["parallel","scatter"],id:"scatter-matrix",tags:[],title:"Scatter Matrix",titleCN:"散点矩阵和平行坐标",difficulty:10},{category:["scatter"],id:"scatter-weibo",tags:[],title:"Sign in of weibo",titleCN:"微博签到数据点亮中国",difficulty:10},{category:["scatter"],id:"scatter-world-population",tags:[],title:"World Population (2011)",titleCN:"World Population (2011)",difficulty:10},{category:["themeRiver"],id:"themeRiver-basic",tags:[],title:"ThemeRiver",titleCN:"主题河流图",difficulty:10},{category:["themeRiver"],id:"themeRiver-lastfm",tags:[],title:"ThemeRiver Lastfm",titleCN:"ThemeRiver Lastfm",difficulty:10},{category:["tree"],id:"tree-basic",tags:[],title:"From Left to Right Tree",titleCN:"从左到右树状图",difficulty:10},{category:["tree"],id:"tree-legend",tags:[],title:"Multiple Trees",titleCN:"多棵树",difficulty:10},{category:["tree"],id:"tree-orient-bottom-top",tags:[],title:"From Bottom to Top Tree",titleCN:"从下到上树状图",difficulty:10},{category:["tree"],id:"tree-orient-right-left",tags:[],title:"From Right to Left Tree",titleCN:"从右到左树状图",difficulty:10},{category:["tree"],id:"tree-polyline",tags:[],title:"Tree with Polyline Edge",titleCN:"折线树图",difficulty:10},{category:["tree"],id:"tree-radial",tags:[],title:"Radial Tree",titleCN:"径向树状图",difficulty:10},{category:["tree"],id:"tree-vertical",tags:[],title:"From Top to Bottom Tree",titleCN:"从上到下树状图",difficulty:10},{category:["treemap"],id:"treemap-disk",tags:[],title:"Disk Usage",titleCN:"磁盘占用",difficulty:10},{category:["treemap"],id:"treemap-drill-down",tags:[],title:"ECharts Option Query",titleCN:"ECharts 配置项查询分布",difficulty:10},{category:["treemap"],id:"treemap-obama",tags:[],title:"How $3.7 Trillion is Spent",titleCN:"How $3.7 Trillion is Spent",difficulty:10},{category:["treemap"],id:"treemap-show-parent",tags:[],title:"Show Parent Labels",titleCN:"显示父层级标签",difficulty:10},{category:["treemap"],id:"treemap-simple",tags:[],title:"Basic Treemap",titleCN:"基础矩形树图",difficulty:10},{category:["treemap"],id:"treemap-visual",tags:[],title:"Gradient Mapping",titleCN:"映射为渐变色",difficulty:10},{category:["calendar","scatter"],id:"calendar-charts",tags:[],title:"Calendar Charts",titleCN:"日力图",difficulty:11},{category:["custom"],id:"circle-packing-with-d3",tags:[],title:"Circle Packing with d3",titleCN:"Circle Packing with d3",difficulty:11},{category:["custom"],id:"custom-one-to-one-morph",tags:[],title:"One-to-one Morphing",titleCN:"一对一映射形变",difficulty:11},{category:["custom"],id:"custom-spiral-race",tags:[],title:"Custom Spiral Race",titleCN:"自定义螺旋线竞速",difficulty:11},{category:["custom"],id:"custom-story-transition",tags:[],title:"Simple Story Transition",titleCN:"极简场景变换示例",difficulty:11},{category:["scatter"],id:"scatter-logarithmic-regression",tags:[],title:"Logarithmic Regression",titleCN:"对数回归(使用统计插件)",difficulty:16}],Rt=[{category:["globe"],id:"animating-contour-on-globe",tags:[],title:"Animating Contour on Globe",titleCN:"Animating Contour on Globe",difficulty:10},{category:["bar3D"],id:"bar3d-dataset",tags:[],title:"3D Bar with Dataset",titleCN:"使用 dataset 为三维柱状图设置数据",difficulty:10},{category:["bar3D"],id:"bar3d-global-population",tags:[],title:"Bar3D - Global Population",titleCN:"Bar3D - Global Population",difficulty:10},{category:["bar3D"],id:"bar3d-myth",tags:[],title:"星云",titleCN:"星云",difficulty:10},{category:["bar3D"],id:"bar3d-noise-modified-from-marpi-demo",tags:[],title:"Noise modified from marpi's demo",titleCN:"Noise modified from marpi's demo",difficulty:10},{category:["bar3D"],id:"bar3d-punch-card",tags:[],title:"Bar3D - Punch Card",titleCN:"Bar3D - Punch Card",difficulty:10},{category:["bar3D"],id:"bar3d-simplex-noise",tags:[],theme:"dark",title:"Bar3D - Simplex Noise",titleCN:"Bar3D - Simplex Noise",difficulty:10},{category:["bar3D"],id:"bar3d-voxelize-image",tags:[],title:"Voxelize image",titleCN:"Voxelize image",difficulty:10},{category:["flowGL"],id:"flowGL-noise",tags:[],theme:"dark",title:"Flow on the cartesian",titleCN:"直角坐标系上的向量场",difficulty:10},{category:["geo3D"],id:"geo3d",tags:[],title:"Geo3D",titleCN:"Geo3D",difficulty:10},{category:["geo3D"],id:"geo3d-with-different-height",tags:[],title:"Geo3D with Different Height",titleCN:"Geo3D with Different Height",difficulty:10},{category:["bar3D"],id:"global-population-bar3d-on-globe",tags:[],title:"Global Population - Bar3D on Globe",titleCN:"Global Population - Bar3D on Globe",difficulty:10},{category:["flowGL"],id:"global-wind-visualization",tags:[],title:"Global wind visualization",titleCN:"Global wind visualization",difficulty:10},{category:["flowGL"],id:"global-wind-visualization-2",tags:[],title:"Global Wind Visualization 2",titleCN:"Global Wind Visualization 2",difficulty:10},{category:["globe"],id:"globe-atmosphere",tags:[],title:"Globe with Atmosphere",titleCN:"大气层显示",difficulty:10},{category:["globe"],id:"globe-contour-paint",tags:[],title:"Contour Paint",titleCN:"Contour Paint",difficulty:10},{category:["globe"],id:"globe-country-carousel",tags:[],title:"Country Carousel",titleCN:"Country Carousel",difficulty:10},{category:["globe"],id:"globe-displacement",tags:[],title:"Globe Displacement",titleCN:"Globe Displacement",difficulty:10},{category:["globe"],id:"globe-echarts-gl-hello-world",tags:[],title:"ECharts-GL Hello World",titleCN:"ECharts-GL Hello World",difficulty:10},{category:["globe"],id:"globe-layers",tags:[],title:"Globe Layers",titleCN:"Globe Layers",difficulty:10},{category:["globe"],id:"globe-moon",tags:[],title:"Moon",titleCN:"Moon",difficulty:10},{category:["globe"],id:"globe-with-echarts-surface",tags:[],title:"Globe with ECharts Surface",titleCN:"Globe with ECharts Surface",difficulty:10},{category:["graphGL"],id:"graphgl-gpu-layout",tags:[],theme:"dark",title:"GraphGL GPU Layout",titleCN:"GraphGL GPU Layout",difficulty:10},{category:["graphGL"],id:"graphgl-large-internet",tags:[],theme:"dark",title:"GraphGL - Large Internet",titleCN:"GraphGL - Large Internet",difficulty:10},{category:["graphGL"],id:"graphgl-npm-dep",tags:[],theme:"dark",title:"NPM Dependencies with graphGL",titleCN:"1w 节点 2w7 边的NPM 依赖图",difficulty:10},{category:["surface"],id:"image-surface-sushuang",tags:[],title:"Image Surface Sushuang",titleCN:"Image Surface Sushuang",difficulty:10},{category:["bar3D"],id:"image-to-bar3d",tags:[],title:"Image to Bar3D",titleCN:"Image to Bar3D",difficulty:10},{category:["globe"],id:"iron-globe",tags:[],title:"Iron globe",titleCN:"Iron globe",difficulty:10},{category:["line3D"],id:"line3d-orthographic",tags:[],title:"三维折线图正交投影",titleCN:"三维折线图正交投影",difficulty:10},{category:["lines3D"],id:"lines3d-airline-on-globe",tags:[],title:"Airline on Globe",titleCN:"Airline on Globe",difficulty:10},{category:["lines3D"],id:"lines3d-flights",tags:[],title:"Flights",titleCN:"Flights",difficulty:10},{category:["lines3D"],id:"lines3d-flights-gl",tags:[],title:"Flights GL",titleCN:"Flights GL",difficulty:10},{category:["lines3D"],id:"lines3d-flights-on-geo3d",tags:[],title:"Flights on Geo3D",titleCN:"Flights on Geo3D",difficulty:10},{category:["linesGL"],id:"linesGL-ny",tags:[],title:"Use linesGL to draw 1 million ny streets.",titleCN:"实时交互的纽约街道可视化",difficulty:10},{category:["map3D"],id:"map3d-alcohol-consumption",tags:[],title:"Map3D - Alcohol Consumption",titleCN:"Map3D - Alcohol Consumption",difficulty:10},{category:["map3D"],id:"map3d-buildings",tags:[],title:"Buildings",titleCN:"Buildings",difficulty:10},{category:["map3D"],id:"map3d-wood-city",tags:[],title:"Wood City",titleCN:"Wood City",difficulty:10},{category:["map3D"],id:"map3d-wood-map",tags:[],title:"木质世界地图",titleCN:"木质世界地图",difficulty:10},{category:["bar3D"],id:"metal-bar3d",tags:[],title:"Metal Bar3D",titleCN:"Metal Bar3D",difficulty:10},{category:["surface"],id:"metal-surface",tags:[],title:"Metal Surface",titleCN:"Metal Surface",difficulty:10},{category:["surface"],id:"parametric-surface-rose",tags:[],title:"Parametric Surface Rose",titleCN:"Parametric Surface Rose",difficulty:10},{category:["scatter3D"],id:"scatter3d",tags:[],theme:"dark",title:"Scatter3D",titleCN:"Scatter3D",difficulty:10},{category:["scatter3D"],id:"scatter3D-dataset",tags:[],title:"3D Scatter with Dataset",titleCN:"使用 dataset 为三维散点图设置数据",difficulty:10},{category:["scatter3D"],id:"scatter3d-globe-population",tags:[],title:"Scatter3D - Globe Population",titleCN:"Scatter3D - Globe Population",difficulty:10},{category:["scatter3D"],id:"scatter3d-orthographic",tags:[],theme:"dark",title:"三维散点图正交投影",titleCN:"三维散点图正交投影",difficulty:10},{category:["scatter3D"],id:"scatter3d-scatter",tags:[],title:"3D Scatter with Scatter Matrix",titleCN:"三维散点图和散点矩阵结合使用",difficulty:10},{category:["scatter3D"],id:"scatter3d-simplex-noise",tags:[],theme:"dark",title:"Scatter3D - Simplex Noise",titleCN:"Scatter3D - Simplex Noise",difficulty:10},{category:["scatterGL"],id:"scatterGL-gps",tags:[],title:"10 million Bulk GPS points",titleCN:"1 千万 GPS 点可视化",difficulty:10},{category:["scatterGL"],id:"scattergl-weibo",tags:[],theme:"dark",title:"微博签到数据点亮中国",titleCN:"微博签到数据点亮中国",difficulty:10},{category:["surface"],id:"simple-surface",tags:[],title:"Simple Surface",titleCN:"Simple Surface",difficulty:10},{category:["surface"],id:"sphere-parametric-surface",tags:[],title:"Sphere Parametric Surface",titleCN:"Sphere Parametric Surface",difficulty:10},{category:["bar3D"],id:"stacked-bar3d",tags:[],title:"Stacked Bar3D",titleCN:"Stacked Bar3D",difficulty:10},{category:["surface"],id:"surface-breather",tags:[],title:"Breather",titleCN:"Breather",difficulty:10},{category:["surface"],id:"surface-golden-rose",tags:[],title:"Golden Rose",titleCN:"Golden Rose",difficulty:10},{category:["surface"],id:"surface-leather",tags:[],title:"皮革材质",titleCN:"皮革材质",difficulty:10},{category:["surface"],id:"surface-mollusc-shell",tags:[],title:"Mollusc Shell",titleCN:"Mollusc Shell",difficulty:10},{category:["surface"],id:"surface-theme-roses",tags:[],title:"Theme Roses",titleCN:"Theme Roses",difficulty:10},{category:["surface"],id:"surface-wave",tags:[],title:"Surface Wave",titleCN:"Surface Wave",difficulty:10},{category:["bar3D"],id:"transparent-bar3d",tags:[],title:"Transparent Bar3D",titleCN:"Transparent Bar3D",difficulty:10}];var Bt=dt.code.indexOf("ROOT_PATH")>=0?"var ROOT_PATH = '".concat(dt.cdnRoot,"'"):"";function It(t){return function(t){if(Array.isArray(t))return jt(t)}(t)||function(t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return jt(t,e);var i=Object.prototype.toString.call(t).slice(8,-1);return"Object"===i&&t.constructor&&(i=t.constructor.name),"Map"===i||"Set"===i?Array.from(t):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?jt(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function jt(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}function Gt(t){return ot.c===t.id}var $t=Ft.concat(Rt).find(Gt),zt=Rt.find(Gt);function Ut(t){dt.enableDecal&&(t.aria=t.aria||{},t.aria.decal=t.aria.decal||{},t.aria.decal.show=!0,t.aria.show=t.aria.enabled=!0)}function Zt(){if("undefined"==typeof echarts){var t=$t&&$t.tags.indexOf("bmap")>=0;return t&&(window.HOST_TYPE="2",window.BMap_loadScriptTime=(new Date).getTime()),nt([ct.datGUIMinJS,"local"in ot?ct.localEChartsMinJS:ct.echartsMinJS,ct.echartsDir+"/dist/extension/dataTool.js","https://cdn.jsdelivr.net/npm/echarts@4.9.0/map/js/world.js",ct.echartsStatMinJS].concat(It(ot.gl?[ct.echartsGLMinJS]:[]),It(t?["https://api.map.baidu.com/getscript?v=2.0&ak=KOmVjPVUAey1G2E8zNhPiuQ6QiEmAwZu&services=&t=20200327103013",ct.echartsDir+"/dist/extension/bmap.js"]:[]))).then((function(){echarts.registerPreprocessor(Ut)}))}return Promise.resolve()}function Wt(t,e){"warn"!==e&&"error"!==e&&(e="info"),dt.editorStatus.message=t,dt.editorStatus.type=e}var Vt=gt({props:["inEditor"],data:function(){return{shared:dt,debouncedTime:void 0,backgroundColor:"",autoRun:!0,loading:!1,isGL:zt}},mounted:function(){var t=this;this.loading=!0,Zt().then((function(){t.loading=!1,dt.runCode&&t.run()})),At(this.$el,(function(){t.sandbox&&t.sandbox.resize()}))},computed:{editLink:function(){var t=["c="+ot.c];return ot.theme&&t.push(["theme="+ot.theme]),ot.gl&&t.push(["gl="+ot.gl]),"./editor.html?"+t.join("&")}},watch:{"shared.runCode":function(t){!this.autoRun&&this.sandbox||(this.debouncedRun?this.debouncedRun():this.run())},"shared.renderer":function(){this.refreshAll()},"shared.darkMode":function(){this.refreshAll()},"shared.enableDecal":function(){this.refreshAll()},"shared.useDirtyRect":function(){this.refreshAll()}},methods:{run:function t(){var e=this;if("undefined"!=typeof echarts){this.sandbox||(this.sandbox=function(t){var e,i={},n=[],a=[],r=window.setTimeout,o=window.setInterval;function l(t,e){var i=r(t,e);return a.push(i),i}function s(t,e){var i=o(t,e);return n.push(i),i}var c,d=[];return{resize:function(){c&&c.resize()},dispose:function(){c&&(c.dispose(),c=null)},getDataURL:function(){return c.getDataURL({pixelRatio:2,excludeComponents:["toolbox"]})},getOption:function(){return c.getOption()},run:function(r,o){if(!c){if(c=echarts.init(r,o.darkMode?"dark":"",{renderer:o.renderer,useDirtyRect:o.useDirtyRect}),o.useDirtyRect&&"canvas"===o.renderer)try{!function(t,e){e=e||{};var i=t.painter;if(!i.getLayers)throw new Error("Debug dirty rect can only been used on canvas renderer.");if(i.isSingleCanvas())throw new Error("Debug dirty rect can only been used on zrender inited with container.");var n=document.createElement("div");n.style.cssText="\nposition:absolute;\nleft:0;\ntop:0;\nright:0;\nbottom:0;\npointer-events:none;\n",n.className="ec-debug-dirty-rect-container";var a=[],r=t.dom;r.appendChild(n),"static"===getComputedStyle(r).position&&(r.style.position="relative"),t.on("rendered",(function(){if(i.getLayers){var t=0;i.eachBuiltinLayer((function(i){if(i.debugGetPaintRects)for(var r=i.debugGetPaintRects(),o=0;o<r.length;o++)a[t]||(a[t]=new vt(e.style),n.appendChild(a[t].dom)),a[t].show(),a[t].update(r[o]),t++}));for(var r=t;r<a.length;r++)a[r].hide()}}))}(c.getZr(),{autoHideDelay:500})}catch(t){console.error(t)}p=(u=c).on,f=u.setOption,u.on=function(t){var e=p.apply(u,arguments);return d.push(t),e},u.setOption=function(){var e=f.apply(this,arguments);return t&&t(u),e}}var u,p,f;!function(){for(var t=0;t<n.length;t++)clearInterval(n[t]);for(t=0;t<a.length;t++)clearTimeout(a[t]);n=[],a=[]}(),function(t){d.forEach((function(e){t&&t.off(e)})),d.length=0}(c),i.config=null;var g=o.runCode,h=new Function("myChart","app","setTimeout","setInterval","ROOT_PATH","var option;\n"+g+"\nreturn option;")(c,i,l,s,o.cdnRoot),m=0;if(h&&"object"===bt(h)){var C=+new Date;c.setOption(h,!0),m=+new Date-C}if(e&&($(e.domElement).remove(),e.destroy(),e=null),i.config){e=new dat.GUI({autoPlace:!1}),$(e.domElement).css({position:"absolute",right:5,top:0,zIndex:1e3}),$(".right-container").append(e.domElement);var y=i.configParameters||{};for(var v in i.config){var b=i.config[v];if("onChange"!==v&&"onFinishChange"!==v){var _=!1,L=null;if(y[v]&&(y[v].options?L=e.add(i.config,v,y[v].options):null!=y[v].min&&(L=e.add(i.config,v,y[v].min,y[v].max))),"string"==typeof obj)try{var w=echarts.color.parse(b);(_=!!w)&&(b=echarts.color.stringify(w,"rgba"))}catch(t){}L||(L=e[_?"addColor":"add"](i.config,v)),i.config.onChange&&L.onChange(i.config.onChange),i.config.onFinishChange&&L.onFinishChange(i.config.onFinishChange)}}}return m}}}((function(t){var i=t.getOption();"string"==typeof i.backgroundColor&&"transparent"!==i.backgroundColor?e.backgroundColor=i.backgroundColor:e.backgroundColor="#fff"})));try{var i=this.sandbox.run(this.$el.querySelector("#chart-panel"),dt);Wt(this.$t("editor.chartOK")+i+"ms");for(var n=[0,500,2e3,5e3,1e4],a=n.length-1;a>=0;a--){var r=n[a+1]||1e6;if(i>=n[a]&&this.debouncedTime!==r){this.debouncedRun=Lt()(t,r,{trailing:!0}),this.debouncedTime=r;break}}dt.runHash=ft++}catch(t){Wt(this.$t("editor.errorInEditor"),"error"),console.error(t)}}},refreshAll:function(){this.dispose(),this.run()},dispose:function(){this.sandbox&&this.sandbox.dispose()},downloadExample:function(){!function(){var t='<!DOCTYPE html>\n<html style="height: 100%">\n    <head>\n        <meta charset="utf-8">\n    </head>\n    <body style="height: 100%; margin: 0">\n        <div id="container" style="height: 100%"></div>\n\n        <script type="text/javascript" src="'.concat(ct.echartsMinJS,'"><\/script>\n        \x3c!-- Uncomment this line if you want to dataTool extension\n        <script type="text/javascript" src="').concat(ct.echartsDir,'/dist/extension/dataTool.min.js"><\/script>\n        --\x3e\n        \x3c!-- Uncomment this line if you want to use gl extension\n        <script type="text/javascript" src="').concat(ct.echartsGLMinJS,'"><\/script>\n        --\x3e\n        \x3c!-- Uncomment this line if you want to echarts-stat extension\n        <script type="text/javascript" src="').concat(ct.echartsStatMinJS,'"><\/script>\n        --\x3e\n        \x3c!-- Uncomment this line if you want to use map\n        <script type="text/javascript" src="').concat(ct.echartsDir,'/map/js/china.js"><\/script>\n        <script type="text/javascript" src="').concat(ct.echartsDir,'/map/js/world.js"><\/script>\n        --\x3e\n        \x3c!-- Uncomment these two lines if you want to use bmap extension\n        <script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=<Your Key Here>"><\/script>\n        <script type="text/javascript" src="').concat(ct.echartsDir,'/dist/extension/bmap.min.js"><\/script>\n        --\x3e\n\n        <script type="text/javascript">\nvar dom = document.getElementById("container");\nvar myChart = echarts.init(dom);\nvar app = {};\n\nvar option;\n\n').concat(Bt,"\n\n").concat(dt.code,"\n\nif (option && typeof option === 'object') {\n    myChart.setOption(option);\n}\n\n        <\/script>\n    </body>\n</html>\n    "),e=new Blob([t],{type:"text/html;charset=UTF-8",encoding:"UTF-8"}),i=document.createElement("a");i.href=URL.createObjectURL(e),i.download=ot.c+".html",i.click()}()},screenshot:function(){if(this.sandbox){var t=this.sandbox.getDataURL(),e=document.createElement("a");e.download=ot.c+"."+("svg"===dt.renderer?"svg":"png"),e.target="_blank",e.href=t;var i=new MouseEvent("click",{bubbles:!0,cancelable:!1});e.dispatchEvent(i)}},getOption:function(){return this.sandbox&&this.sandbox.getOption()}}},yt,[],!1,null,null,null);Vt.options.__file="src/editor/Preview.vue";const Ht=Vt.exports;var qt=gt({props:["initialCode"],data:function(){return{shared:dt,loading:!1}},mounted:function(){var t=this;this.loading=!0,Zt().then((function(){return"undefined"==typeof monaco?nt([ct.monacoDir+"/loader.js",dt.cdnRoot+"/js/example-transform-ts-bundle.js"]).then((function(){return window.require.config({paths:{vs:ct.monacoDir}}),new Promise((function(t){window.require(["vs/editor/editor.main"],(function(){fetch(dt.cdnRoot+"/types/echarts.d.ts",{mode:"cors"}).then((function(t){return t.text()})).then((function(t){monaco.languages.typescript.typescriptDefaults.setDiagnosticsOptions({noSemanticValidation:!1,noSyntaxValidation:!1}),monaco.languages.typescript.typescriptDefaults.setCompilerOptions({target:monaco.languages.typescript.ScriptTarget.ES6,allowNonTsExtensions:!0,noResolve:!1}),monaco.languages.typescript.typescriptDefaults.addExtraLib(t,"file:///node_modules/@types/echarts/index.d.ts"),monaco.languages.typescript.typescriptDefaults.addExtraLib("import {init, EChartsOption} from 'echarts';\n// Declare to global namespace.\ndeclare global {\ndeclare const $: any;\ndeclare const ROOT_PATH: string;\ndeclare const app: {\n    configParameters: {\n        [key: string]: ({\n            options: { [key: string]: string\n        }) | ({\n            min?: number\n            max?: number\n        })\n    }\n    config: {\n        onChange: () => void\n        [key: string]: string | number | function\n    }\n    [key: string]: any\n};\ndeclare const myChart: ReturnType<typeof init>;\ndeclare var option: EChartsOption;\n}\n","file:///example.d.ts")})).then((function(){t()}))}))}))})):Promise.resolve()})).then((function(){t.loading=!1;var e=monaco.editor.createModel(t.initialCode||"","typescript",monaco.Uri.parse("file:///main.ts")),i=monaco.editor.create(t.$el,{model:e,fontFamily:"'Source Code Pro', 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', monospace",minimap:{enabled:!1},automaticLayout:!0});t._editor=i,t.initialCode&&(dt.sourceCode=t.initialCode,dt.runCode=echartsExampleTransformTs(dt.sourceCode)),i.onDidChangeModelContent((function(){dt.sourceCode=i.getValue(),dt.runCode=echartsExampleTransformTs(dt.sourceCode)}))}))},destroyed:function(){this._editor&&(this._editor.getModel().dispose(),this._editor.dispose())},methods:{setInitialCode:function(t){this._editor&&t&&this._editor.setValue(t||"")}},watch:{initialCode:function(t){this.setInitialCode(t)}}},Ct,[],!1,null,null,null);qt.options.__file="src/editor/CodeMonaco.vue";const Kt=qt.exports;var Jt=function(){var t=this,e=t.$createElement;return(t._self._c||e)("div",{directives:[{name:"loading",rawName:"v-loading",value:t.loading,expression:"loading"}],staticClass:"full-code-preview"})};Jt._withStripped=!0;var Qt=gt({props:["code"],data:function(){return{shared:dt,loading:!1}},mounted:function(){var t=this;this.loading=!0,("undefined"==typeof ace?nt([ct.aceDir+"/ace.js"]):Promise.resolve()).then((function(){t.loading=!1;var e=ace.edit(t.$el);e.getSession().setMode("ace/mode/javascript"),e.setOptions({readOnly:!0,showLineNumbers:!1,showFoldWidgets:!1,highlightActiveLine:!1,highlightGutterLine:!1}),e.renderer.$cursorLayer.element.style.display="none",t._editor=e,t.setCode(t.code)}))},methods:{setCode:function(t){this._editor&&(this._editor.setValue(t),this._editor.selection.setSelectionRange({start:{row:1,column:4},end:{row:1,column:4}}))}},watch:{code:function(t){this.setCode(t)}}},Jt,[],!1,null,null,null);Qt.options.__file="src/editor/FullCodePreview.vue";const Yt=Qt.exports;var Xt=i(913);function te(t,e){const i=Object.create(null),n=t.split(",");for(let t=0;t<n.length;t++)i[n[t]]=!0;return e?t=>!!i[t.toLowerCase()]:t=>!!i[t]}const ee=te("Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl"),ie=te("itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly");function ne(t){if(_e(t)){const e={};for(let i=0;i<t.length;i++){const n=t[i],a=ne(ke(n)?oe(n):n);if(a)for(const t in a)e[t]=a[t]}return e}if(Ne(t))return t}const ae=/;(?![^(]*\))/g,re=/:(.+)/;function oe(t){const e={};return t.split(ae).forEach((t=>{if(t){const i=t.split(re);i.length>1&&(e[i[0].trim()]=i[1].trim())}})),e}function le(t){let e="";if(ke(t))e=t;else if(_e(t))for(let i=0;i<t.length;i++)e+=le(t[i])+" ";else if(Ne(t))for(const i in t)t[i]&&(e+=i+" ");return e.trim()}const se=t=>null==t?"":Ne(t)?JSON.stringify(t,ce,2):String(t),ce=(t,e)=>Le(e)?{[`Map(${e.size})`]:[...e.entries()].reduce(((t,[e,i])=>(t[`${e} =>`]=i,t)),{})}:we(e)?{[`Set(${e.size})`]:[...e.values()]}:!Ne(e)||_e(e)||De(e)?e:String(e),de={},ue=[],pe=()=>{},fe=()=>!1,ge=/^on[^a-z]/,he=t=>ge.test(t),me=t=>t.startsWith("onUpdate:"),Ce=Object.assign,ye=(t,e)=>{const i=t.indexOf(e);i>-1&&t.splice(i,1)},ve=Object.prototype.hasOwnProperty,be=(t,e)=>ve.call(t,e),_e=Array.isArray,Le=t=>"[object Map]"===Ae(t),we=t=>"[object Set]"===Ae(t),xe=t=>"function"==typeof t,ke=t=>"string"==typeof t,Se=t=>"symbol"==typeof t,Ne=t=>null!==t&&"object"==typeof t,Me=t=>Ne(t)&&xe(t.then)&&xe(t.catch),Te=Object.prototype.toString,Ae=t=>Te.call(t),De=t=>"[object Object]"===Ae(t),Oe=t=>ke(t)&&"NaN"!==t&&"-"!==t[0]&&""+parseInt(t,10)===t,Ee=te(",key,ref,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Pe=t=>{const e=Object.create(null);return i=>e[i]||(e[i]=t(i))},Fe=/-(\w)/g,Re=Pe((t=>t.replace(Fe,((t,e)=>e?e.toUpperCase():"")))),Be=/\B([A-Z])/g,Ie=Pe((t=>t.replace(Be,"-$1").toLowerCase())),je=Pe((t=>t.charAt(0).toUpperCase()+t.slice(1))),Ge=Pe((t=>t?`on${je(t)}`:"")),$e=(t,e)=>t!==e&&(t==t||e==e),ze=(t,e)=>{for(let i=0;i<t.length;i++)t[i](e)},Ue=(t,e,i)=>{Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:i})},Ze=t=>{const e=parseFloat(t);return isNaN(e)?t:e};let We;const Ve=()=>We||(We="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==i.g?i.g:{}),He=new WeakMap,qe=[];let Ke;const Je=Symbol(""),Qe=Symbol("");function Ye(t,e=de){(function(t){return t&&!0===t._isEffect})(t)&&(t=t.raw);const i=function(t,e){const i=function(){if(!i.active)return e.scheduler?void 0:t();if(!qe.includes(i)){ei(i);try{return ni.push(ii),ii=!0,qe.push(i),Ke=i,t()}finally{qe.pop(),ri(),Ke=qe[qe.length-1]}}};return i.id=ti++,i.allowRecurse=!!e.allowRecurse,i._isEffect=!0,i.active=!0,i.raw=t,i.deps=[],i.options=e,i}(t,e);return e.lazy||i(),i}function Xe(t){t.active&&(ei(t),t.options.onStop&&t.options.onStop(),t.active=!1)}let ti=0;function ei(t){const{deps:e}=t;if(e.length){for(let i=0;i<e.length;i++)e[i].delete(t);e.length=0}}let ii=!0;const ni=[];function ai(){ni.push(ii),ii=!1}function ri(){const t=ni.pop();ii=void 0===t||t}function oi(t,e,i){if(!ii||void 0===Ke)return;let n=He.get(t);n||He.set(t,n=new Map);let a=n.get(i);a||n.set(i,a=new Set),a.has(Ke)||(a.add(Ke),Ke.deps.push(a))}function li(t,e,i,n,a,r){const o=He.get(t);if(!o)return;const l=new Set,s=t=>{t&&t.forEach((t=>{(t!==Ke||t.allowRecurse)&&l.add(t)}))};if("clear"===e)o.forEach(s);else if("length"===i&&_e(t))o.forEach(((t,e)=>{("length"===e||e>=n)&&s(t)}));else switch(void 0!==i&&s(o.get(i)),e){case"add":_e(t)?Oe(i)&&s(o.get("length")):(s(o.get(Je)),Le(t)&&s(o.get(Qe)));break;case"delete":_e(t)||(s(o.get(Je)),Le(t)&&s(o.get(Qe)));break;case"set":Le(t)&&s(o.get(Je))}l.forEach((t=>{t.options.scheduler?t.options.scheduler(t):t()}))}const si=new Set(Object.getOwnPropertyNames(Symbol).map((t=>Symbol[t])).filter(Se)),ci=gi(),di=gi(!1,!0),ui=gi(!0),pi=gi(!0,!0),fi={};function gi(t=!1,e=!1){return function(i,n,a){if("__v_isReactive"===n)return!t;if("__v_isReadonly"===n)return t;if("__v_raw"===n&&a===(t?$i:Gi).get(i))return i;const r=_e(i);if(!t&&r&&be(fi,n))return Reflect.get(fi,n,a);const o=Reflect.get(i,n,a);return(Se(n)?si.has(n):"__proto__"===n||"__v_isRef"===n)?o:(t||oi(i,0,n),e?o:Ji(o)?r&&Oe(n)?o:o.value:Ne(o)?t?Ui(o):zi(o):o)}}function hi(t=!1){return function(e,i,n,a){const r=e[i];if(!t&&(n=qi(n),!_e(e)&&Ji(r)&&!Ji(n)))return r.value=n,!0;const o=_e(e)&&Oe(i)?Number(i)<e.length:be(e,i),l=Reflect.set(e,i,n,a);return e===qi(a)&&(o?$e(n,r)&&li(e,"set",i,n):li(e,"add",i,n)),l}}["includes","indexOf","lastIndexOf"].forEach((t=>{const e=Array.prototype[t];fi[t]=function(...t){const i=qi(this);for(let t=0,e=this.length;t<e;t++)oi(i,0,t+"");const n=e.apply(i,t);return-1===n||!1===n?e.apply(i,t.map(qi)):n}})),["push","pop","shift","unshift","splice"].forEach((t=>{const e=Array.prototype[t];fi[t]=function(...t){ai();const i=e.apply(this,t);return ri(),i}}));const mi={get:ci,set:hi(),deleteProperty:function(t,e){const i=be(t,e),n=(t[e],Reflect.deleteProperty(t,e));return n&&i&&li(t,"delete",e,void 0),n},has:function(t,e){const i=Reflect.has(t,e);return Se(e)&&si.has(e)||oi(t,0,e),i},ownKeys:function(t){return oi(t,0,_e(t)?"length":Je),Reflect.ownKeys(t)}},Ci={get:ui,set:(t,e)=>!0,deleteProperty:(t,e)=>!0},yi=Ce({},mi,{get:di,set:hi(!0)}),vi=(Ce({},Ci,{get:pi}),t=>Ne(t)?zi(t):t),bi=t=>Ne(t)?Ui(t):t,_i=t=>t,Li=t=>Reflect.getPrototypeOf(t);function wi(t,e,i=!1,n=!1){const a=qi(t=t.__v_raw),r=qi(e);e!==r&&!i&&oi(a,0,e),!i&&oi(a,0,r);const{has:o}=Li(a),l=i?bi:n?_i:vi;return o.call(a,e)?l(t.get(e)):o.call(a,r)?l(t.get(r)):void 0}function xi(t,e=!1){const i=this.__v_raw,n=qi(i),a=qi(t);return t!==a&&!e&&oi(n,0,t),!e&&oi(n,0,a),t===a?i.has(t):i.has(t)||i.has(a)}function ki(t,e=!1){return t=t.__v_raw,!e&&oi(qi(t),0,Je),Reflect.get(t,"size",t)}function Si(t){t=qi(t);const e=qi(this),i=Li(e).has.call(e,t);return e.add(t),i||li(e,"add",t,t),this}function Ni(t,e){e=qi(e);const i=qi(this),{has:n,get:a}=Li(i);let r=n.call(i,t);r||(t=qi(t),r=n.call(i,t));const o=a.call(i,t);return i.set(t,e),r?$e(e,o)&&li(i,"set",t,e):li(i,"add",t,e),this}function Mi(t){const e=qi(this),{has:i,get:n}=Li(e);let a=i.call(e,t);a||(t=qi(t),a=i.call(e,t)),n&&n.call(e,t);const r=e.delete(t);return a&&li(e,"delete",t,void 0),r}function Ti(){const t=qi(this),e=0!==t.size,i=t.clear();return e&&li(t,"clear",void 0,void 0),i}function Ai(t,e){return function(i,n){const a=this,r=a.__v_raw,o=qi(r),l=t?bi:e?_i:vi;return!t&&oi(o,0,Je),r.forEach(((t,e)=>i.call(n,l(t),l(e),a)))}}function Di(t,e,i){return function(...n){const a=this.__v_raw,r=qi(a),o=Le(r),l="entries"===t||t===Symbol.iterator&&o,s="keys"===t&&o,c=a[t](...n),d=e?bi:i?_i:vi;return!e&&oi(r,0,s?Qe:Je),{next(){const{value:t,done:e}=c.next();return e?{value:t,done:e}:{value:l?[d(t[0]),d(t[1])]:d(t),done:e}},[Symbol.iterator](){return this}}}}function Oi(t){return function(...e){return"delete"!==t&&this}}const Ei={get(t){return wi(this,t)},get size(){return ki(this)},has:xi,add:Si,set:Ni,delete:Mi,clear:Ti,forEach:Ai(!1,!1)},Pi={get(t){return wi(this,t,!1,!0)},get size(){return ki(this)},has:xi,add:Si,set:Ni,delete:Mi,clear:Ti,forEach:Ai(!1,!0)},Fi={get(t){return wi(this,t,!0)},get size(){return ki(this,!0)},has(t){return xi.call(this,t,!0)},add:Oi("add"),set:Oi("set"),delete:Oi("delete"),clear:Oi("clear"),forEach:Ai(!0,!1)};function Ri(t,e){const i=e?Pi:t?Fi:Ei;return(e,n,a)=>"__v_isReactive"===n?!t:"__v_isReadonly"===n?t:"__v_raw"===n?e:Reflect.get(be(i,n)&&n in e?i:e,n,a)}["keys","values","entries",Symbol.iterator].forEach((t=>{Ei[t]=Di(t,!1,!1),Fi[t]=Di(t,!0,!1),Pi[t]=Di(t,!1,!0)}));const Bi={get:Ri(!1,!1)},Ii={get:Ri(!1,!0)},ji={get:Ri(!0,!1)},Gi=new WeakMap,$i=new WeakMap;function zi(t){return t&&t.__v_isReadonly?t:Zi(t,!1,mi,Bi)}function Ui(t){return Zi(t,!0,Ci,ji)}function Zi(t,e,i,n){if(!Ne(t))return t;if(t.__v_raw&&(!e||!t.__v_isReactive))return t;const a=e?$i:Gi,r=a.get(t);if(r)return r;const o=function(t){return t.__v_skip||!Object.isExtensible(t)?0:function(t){switch(t){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}((t=>Ae(t).slice(8,-1))(t))}(t);if(0===o)return t;const l=new Proxy(t,2===o?n:i);return a.set(t,l),l}function Wi(t){return Vi(t)?Wi(t.__v_raw):!(!t||!t.__v_isReactive)}function Vi(t){return!(!t||!t.__v_isReadonly)}function Hi(t){return Wi(t)||Vi(t)}function qi(t){return t&&qi(t.__v_raw)||t}const Ki=t=>Ne(t)?zi(t):t;function Ji(t){return Boolean(t&&!0===t.__v_isRef)}function Qi(t){return function(t,e=!1){return Ji(t)?t:new Yi(t,e)}(t)}class Yi{constructor(t,e=!1){this._rawValue=t,this._shallow=e,this.__v_isRef=!0,this._value=e?t:Ki(t)}get value(){return oi(qi(this),0,"value"),this._value}set value(t){$e(qi(t),this._rawValue)&&(this._rawValue=t,this._value=this._shallow?t:Ki(t),li(qi(this),"set","value",t))}}const Xi={get:(t,e,i)=>function(t){return Ji(t)?t.value:t}(Reflect.get(t,e,i)),set:(t,e,i,n)=>{const a=t[e];return Ji(a)&&!Ji(i)?(a.value=i,!0):Reflect.set(t,e,i,n)}};function tn(t){return Wi(t)?t:new Proxy(t,Xi)}class en{constructor(t,e){this._object=t,this._key=e,this.__v_isRef=!0}get value(){return this._object[this._key]}set value(t){this._object[this._key]=t}}class nn{constructor(t,e,i){this._setter=e,this._dirty=!0,this.__v_isRef=!0,this.effect=Ye(t,{lazy:!0,scheduler:()=>{this._dirty||(this._dirty=!0,li(qi(this),"set","value"))}}),this.__v_isReadonly=i}get value(){return this._dirty&&(this._value=this.effect(),this._dirty=!1),oi(qi(this),0,"value"),this._value}set value(t){this._setter(t)}}function an(t,e,i,n){let a;try{a=n?t(...n):t()}catch(t){on(t,e,i)}return a}function rn(t,e,i,n){if(xe(t)){const a=an(t,e,i,n);return a&&Me(a)&&a.catch((t=>{on(t,e,i)})),a}const a=[];for(let r=0;r<t.length;r++)a.push(rn(t[r],e,i,n));return a}function on(t,e,i,n=!0){if(e&&e.vnode,e){let n=e.parent;const a=e.proxy,r=i;for(;n;){const e=n.ec;if(e)for(let i=0;i<e.length;i++)if(!1===e[i](t,a,r))return;n=n.parent}const o=e.appContext.config.errorHandler;if(o)return void an(o,null,10,[t,a,r])}!function(t,e,i,n=!0){console.error(t)}(t,0,0,n)}let ln=!1,sn=!1;const cn=[];let dn=0;const un=[];let pn=null,fn=0;const gn=[];let hn=null,mn=0;const Cn=Promise.resolve();let yn=null,vn=null;function bn(t){const e=yn||Cn;return t?e.then(this?t.bind(this):t):e}function _n(t){cn.length&&cn.includes(t,ln&&t.allowRecurse?dn+1:dn)||t===vn||(cn.push(t),Ln())}function Ln(){ln||sn||(sn=!0,yn=Cn.then(Nn))}function wn(t,e,i,n){_e(t)?i.push(...t):e&&e.includes(t,t.allowRecurse?n+1:n)||i.push(t),Ln()}function xn(t,e=null){if(un.length){for(vn=e,pn=[...new Set(un)],un.length=0,fn=0;fn<pn.length;fn++)pn[fn]();pn=null,fn=0,vn=null,xn(t,e)}}function kn(t){if(gn.length){const t=[...new Set(gn)];if(gn.length=0,hn)return void hn.push(...t);for(hn=t,hn.sort(((t,e)=>Sn(t)-Sn(e))),mn=0;mn<hn.length;mn++)hn[mn]();hn=null,mn=0}}const Sn=t=>null==t.id?1/0:t.id;function Nn(t){sn=!1,ln=!0,xn(t),cn.sort(((t,e)=>Sn(t)-Sn(e)));try{for(dn=0;dn<cn.length;dn++){const t=cn[dn];t&&an(t,null,14)}}finally{dn=0,cn.length=0,kn(),ln=!1,yn=null,(cn.length||gn.length)&&Nn(t)}}function Mn(t,e,...i){const n=t.vnode.props||de;let a=i;const r=e.startsWith("update:"),o=r&&e.slice(7);if(o&&o in n){const t=`${"modelValue"===o?"model":o}Modifiers`,{number:e,trim:r}=n[t]||de;r?a=i.map((t=>t.trim())):e&&(a=i.map(Ze))}__VUE_PROD_DEVTOOLS__;let l=Ge(Re(e)),s=n[l];!s&&r&&(l=Ge(Ie(e)),s=n[l]),s&&rn(s,t,6,a);const c=n[l+"Once"];if(c){if(t.emitted){if(t.emitted[l])return}else(t.emitted={})[l]=!0;rn(c,t,6,a)}}function Tn(t,e,i=!1){if(!e.deopt&&void 0!==t.__emits)return t.__emits;const n=t.emits;let a={},r=!1;if(__VUE_OPTIONS_API__&&!xe(t)){const n=t=>{r=!0,Ce(a,Tn(t,e,!0))};!i&&e.mixins.length&&e.mixins.forEach(n),t.extends&&n(t.extends),t.mixins&&t.mixins.forEach(n)}return n||r?(_e(n)?n.forEach((t=>a[t]=null)):Ce(a,n),t.__emits=a):t.__emits=null}function An(t,e){return!(!t||!he(e))&&(e=e.slice(2).replace(/Once$/,""),be(t,e[0].toLowerCase()+e.slice(1))||be(t,Ie(e))||be(t,e))}let Dn=null;function On(t){Dn=t}function En(t){const{type:e,vnode:i,proxy:n,withProxy:a,props:r,propsOptions:[o],slots:l,attrs:s,emit:c,render:d,renderCache:u,data:p,setupState:f,ctx:g}=t;let h;Dn=t;try{let t;if(4&i.shapeFlag){const e=a||n;h=qa(d.call(e,e,u,r,f,p,g)),t=s}else{const i=e;h=qa(i.length>1?i(r,{attrs:s,slots:l,emit:c}):i(r,null)),t=e.props?s:Pn(s)}let m=h;if(!1!==e.inheritAttrs&&t){const e=Object.keys(t),{shapeFlag:i}=m;e.length&&(1&i||6&i)&&(o&&e.some(me)&&(t=Fn(t,o)),m=Wa(m,t))}i.dirs&&(m.dirs=m.dirs?m.dirs.concat(i.dirs):i.dirs),i.transition&&(m.transition=i.transition),h=m}catch(e){on(e,t,1),h=Za(Oa)}return Dn=null,h}const Pn=t=>{let e;for(const i in t)("class"===i||"style"===i||he(i))&&((e||(e={}))[i]=t[i]);return e},Fn=(t,e)=>{const i={};for(const n in t)me(n)&&n.slice(9)in e||(i[n]=t[n]);return i};function Rn(t,e,i){const n=Object.keys(e);if(n.length!==Object.keys(t).length)return!0;for(let a=0;a<n.length;a++){const r=n[a];if(e[r]!==t[r]&&!An(i,r))return!0}return!1}function Bn(t){return xe(t)&&(t=t()),_e(t)&&(t=function(t){let e;for(let i=0;i<t.length;i++){const n=t[i];if(!ja(n))return;if(n.type!==Oa||"v-if"===n.children){if(e)return;e=n}}return e}(t)),qa(t)}let In=0;const jn=t=>In+=t;function Gn(t,e,i,n){const[a,r]=t.propsOptions;if(e)for(const r in e){const o=e[r];if(Ee(r))continue;let l;a&&be(a,l=Re(r))?i[l]=o:An(t.emitsOptions,r)||(n[r]=o)}if(r){const e=qi(i);for(let n=0;n<r.length;n++){const o=r[n];i[o]=$n(a,e,o,e[o],t)}}}function $n(t,e,i,n,a){const r=t[i];if(null!=r){const t=be(r,"default");if(t&&void 0===n){const t=r.default;r.type!==Function&&xe(t)?(gr(a),n=t(e),gr(null)):n=t}r[0]&&(be(e,i)||t?!r[1]||""!==n&&n!==Ie(i)||(n=!0):n=!1)}return n}function zn(t,e,i=!1){if(!e.deopt&&t.__props)return t.__props;const n=t.props,a={},r=[];let o=!1;if(__VUE_OPTIONS_API__&&!xe(t)){const n=t=>{o=!0;const[i,n]=zn(t,e,!0);Ce(a,i),n&&r.push(...n)};!i&&e.mixins.length&&e.mixins.forEach(n),t.extends&&n(t.extends),t.mixins&&t.mixins.forEach(n)}if(!n&&!o)return t.__props=ue;if(_e(n))for(let t=0;t<n.length;t++){const e=Re(n[t]);Un(e)&&(a[e]=de)}else if(n)for(const t in n){const e=Re(t);if(Un(e)){const i=n[t],o=a[e]=_e(i)||xe(i)?{type:i}:i;if(o){const t=Vn(Boolean,o.type),i=Vn(String,o.type);o[0]=t>-1,o[1]=i<0||t<i,(t>-1||be(o,"default"))&&r.push(e)}}}return t.__props=[a,r]}function Un(t){return"$"!==t[0]}function Zn(t){const e=t&&t.toString().match(/^\s*function (\w+)/);return e?e[1]:""}function Wn(t,e){return Zn(t)===Zn(e)}function Vn(t,e){if(_e(e)){for(let i=0,n=e.length;i<n;i++)if(Wn(e[i],t))return i}else if(xe(e))return Wn(e,t)?0:-1;return-1}function Hn(t,e,i=fr,n=!1){if(i){const a=i[t]||(i[t]=[]),r=e.__weh||(e.__weh=(...n)=>{if(i.isUnmounted)return;ai(),gr(i);const a=rn(e,i,t,n);return gr(null),ri(),a});return n?a.unshift(r):a.push(r),r}}const qn=t=>(e,i=fr)=>!hr&&Hn(t,e,i),Kn=qn("bm"),Jn=qn("m"),Qn=qn("bu"),Yn=qn("u"),Xn=qn("bum"),ta=qn("um"),ea=qn("rtg"),ia=qn("rtc"),na={};function aa(t,e,i){return ra(t,e,i)}function ra(t,e,{immediate:i,deep:n,flush:a,onTrack:r,onTrigger:o}=de,l=fr){let s,c,d=!1;if(Ji(t)?(s=()=>t.value,d=!!t._shallow):Wi(t)?(s=()=>t,n=!0):s=_e(t)?()=>t.map((t=>Ji(t)?t.value:Wi(t)?la(t):xe(t)?an(t,l,2):void 0)):xe(t)?e?()=>an(t,l,2):()=>{if(!l||!l.isUnmounted)return c&&c(),an(t,l,3,[u])}:pe,e&&n){const t=s;s=()=>la(t())}const u=t=>{c=h.options.onStop=()=>{an(t,l,4)}};let p=_e(t)?[]:na;const f=()=>{if(h.active)if(e){const t=h();(n||d||$e(t,p))&&(c&&c(),rn(e,l,3,[t,p===na?void 0:p,u]),p=t)}else h()};let g;f.allowRecurse=!!e,g="sync"===a?f:"post"===a?()=>La(f,l&&l.suspense):()=>{!l||l.isMounted?function(t){wn(t,pn,un,fn)}(f):f()};const h=Ye(s,{lazy:!0,onTrack:r,onTrigger:o,scheduler:g});return yr(h,l),e?i?f():p=h():"post"===a?La(h,l&&l.suspense):h(),()=>{Xe(h),l&&ye(l.effects,h)}}function oa(t,e,i){const n=this.proxy;return ra(ke(t)?()=>n[t]:t.bind(n),e.bind(n),i,this)}function la(t,e=new Set){if(!Ne(t)||e.has(t))return t;if(e.add(t),Ji(t))la(t.value,e);else if(_e(t))for(let i=0;i<t.length;i++)la(t[i],e);else if(we(t)||Le(t))t.forEach((t=>{la(t,e)}));else for(const i in t)la(t[i],e);return t}const sa=t=>t.type.__isKeepAlive;function ca(t,e,i=fr){const n=t.__wdc||(t.__wdc=()=>{let e=i;for(;e;){if(e.isDeactivated)return;e=e.parent}t()});if(Hn(e,n,i),i){let t=i.parent;for(;t&&t.parent;)sa(t.parent.vnode)&&da(n,e,i,t),t=t.parent}}function da(t,e,i,n){const a=Hn(e,t,n,!0);ta((()=>{ye(n[e],a)}),i)}const ua=t=>"_"===t[0]||"$stable"===t,pa=t=>_e(t)?t.map(qa):[qa(t)],fa=(t,e,i)=>function(t,e=Dn){if(!e)return t;const i=(...i)=>{In||Ra(!0);const n=Dn;On(e);const a=t(...i);return On(n),In||Ba(),a};return i._c=!0,i}((t=>pa(e(t))),i),ga=(t,e)=>{const i=t._ctx;for(const n in t){if(ua(n))continue;const a=t[n];if(xe(a))e[n]=fa(0,a,i);else if(null!=a){const t=pa(a);e[n]=()=>t}}},ha=(t,e)=>{const i=pa(e);t.slots.default=()=>i};function ma(t,e){if(null===Dn)return t;const i=Dn.proxy,n=t.dirs||(t.dirs=[]);for(let t=0;t<e.length;t++){let[a,r,o,l=de]=e[t];xe(a)&&(a={mounted:a,updated:a}),n.push({dir:a,instance:i,value:r,oldValue:void 0,arg:o,modifiers:l})}return t}function Ca(t,e,i,n){const a=t.dirs,r=e&&e.dirs;for(let o=0;o<a.length;o++){const l=a[o];r&&(l.oldValue=r[o].value);const s=l.dir[n];s&&rn(s,i,8,[t.el,l,t,e])}}function ya(){return{app:null,config:{isNativeTag:fe,performance:!1,globalProperties:{},optionMergeStrategies:{},isCustomElement:fe,errorHandler:void 0,warnHandler:void 0},mixins:[],components:{},directives:{},provides:Object.create(null)}}let va=0;function ba(t,e){return function(i,n=null){null==n||Ne(n)||(n=null);const a=ya(),r=new Set;let o=!1;const l=a.app={_uid:va++,_component:i,_props:n,_container:null,_context:a,version:_r,get config(){return a.config},set config(t){},use:(t,...e)=>(r.has(t)||(t&&xe(t.install)?(r.add(t),t.install(l,...e)):xe(t)&&(r.add(t),t(l,...e))),l),mixin:t=>(__VUE_OPTIONS_API__&&(a.mixins.includes(t)||(a.mixins.push(t),(t.props||t.emits)&&(a.deopt=!0))),l),component:(t,e)=>e?(a.components[t]=e,l):a.components[t],directive:(t,e)=>e?(a.directives[t]=e,l):a.directives[t],mount(r,s){if(!o){const c=Za(i,n);return c.appContext=a,s&&e?e(c,r):t(c,r),o=!0,l._container=r,r.__vue_app__=l,__VUE_PROD_DEVTOOLS__,c.component.proxy}},unmount(){o&&(t(null,l._container),__VUE_PROD_DEVTOOLS__)},provide:(t,e)=>(a.provides[t]=e,l)};return l}}const _a={scheduler:_n,allowRecurse:!0},La=function(t,e){e&&e.pendingBranch?_e(t)?e.effects.push(...t):e.effects.push(t):wn(t,hn,gn,mn)},wa=(t,e,i,n)=>{if(_e(t))return void t.forEach(((t,a)=>wa(t,e&&(_e(e)?e[a]:e),i,n)));let a;a=!n||n.type.__asyncLoader?null:4&n.shapeFlag?n.component.exposed||n.component.proxy:n.el;const{i:r,r:o}=t,l=e&&e.r,s=r.refs===de?r.refs={}:r.refs,c=r.setupState;if(null!=l&&l!==o&&(ke(l)?(s[l]=null,be(c,l)&&(c[l]=null)):Ji(l)&&(l.value=null)),ke(o)){const t=()=>{s[o]=a,be(c,o)&&(c[o]=a)};a?(t.id=-1,La(t,i)):t()}else if(Ji(o)){const t=()=>{o.value=a};a?(t.id=-1,La(t,i)):t()}else xe(o)&&an(o,r,12,[a,s])};function xa(t,e,i,n=null){rn(t,e,7,[i,n])}function ka(t,e,i=!1){const n=t.children,a=e.children;if(_e(n)&&_e(a))for(let t=0;t<n.length;t++){const e=n[t];let r=a[t];1&r.shapeFlag&&!r.dynamicChildren&&((r.patchFlag<=0||32===r.patchFlag)&&(r=a[t]=Ka(a[t]),r.el=e.el),i||ka(e,r))}}const Sa=t=>t&&(t.disabled||""===t.disabled);function Na(t){return function(t,e,i=!0){const n=Dn||fr;if(n){const i=n.type;if("components"===t){if("_self"===e)return i;const t=i.displayName||i.name;if(t&&(t===e||t===Re(e)||t===je(Re(e))))return i}return Ta(n[t]||i[t],e)||Ta(n.appContext[t],e)}}("components",t)||t}const Ma=Symbol();function Ta(t,e){return t&&(t[e]||t[Re(e)]||t[je(Re(e))])}const Aa=Symbol(void 0),Da=Symbol(void 0),Oa=Symbol(void 0),Ea=Symbol(void 0),Pa=[];let Fa=null;function Ra(t=!1){Pa.push(Fa=t?null:[])}function Ba(){Pa.pop(),Fa=Pa[Pa.length-1]||null}function Ia(t,e,i,n,a){const r=Za(t,e,i,n,a,!0);return r.dynamicChildren=Fa||ue,Ba(),Fa&&Fa.push(r),r}function ja(t){return!!t&&!0===t.__v_isVNode}function Ga(t,e){return t.type===e.type&&t.key===e.key}const $a="__vInternal",za=({key:t})=>null!=t?t:null,Ua=({ref:t})=>null!=t?ke(t)||Ji(t)||xe(t)?{i:Dn,r:t}:t:null,Za=function(t,e=null,i=null,n=0,a=null,r=!1){if(t&&t!==Ma||(t=Oa),ja(t)){const n=Wa(t,e,!0);return i&&Ja(n,i),n}var o;if(xe(o=t)&&"__vccOpts"in o&&(t=t.__vccOpts),e){(Hi(e)||$a in e)&&(e=Ce({},e));let{class:t,style:i}=e;t&&!ke(t)&&(e.class=le(t)),Ne(i)&&(Hi(i)&&!_e(i)&&(i=Ce({},i)),e.style=ne(i))}const l=ke(t)?1:(t=>t.__isSuspense)(t)?128:(t=>t.__isTeleport)(t)?64:Ne(t)?4:xe(t)?2:0,s={__v_isVNode:!0,__v_skip:!0,type:t,props:e,key:e&&za(e),ref:e&&Ua(e),scopeId:null,children:null,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:l,patchFlag:n,dynamicProps:a,dynamicChildren:null,appContext:null};if(Ja(s,i),128&l){const{content:t,fallback:e}=function(t){const{shapeFlag:e,children:i}=t;let n,a;return 32&e?(n=Bn(i.default),a=Bn(i.fallback)):(n=Bn(i),a=qa(null)),{content:n,fallback:a}}(s);s.ssContent=t,s.ssFallback=e}return!r&&Fa&&(n>0||6&l)&&32!==n&&Fa.push(s),s};function Wa(t,e,i=!1){const{props:n,ref:a,patchFlag:r}=t,o=e?function(...t){const e=Ce({},t[0]);for(let i=1;i<t.length;i++){const n=t[i];for(const t in n)if("class"===t)e.class!==n.class&&(e.class=le([e.class,n.class]));else if("style"===t)e.style=ne([e.style,n.style]);else if(he(t)){const i=e[t],a=n[t];i!==a&&(e[t]=i?[].concat(i,n[t]):a)}else""!==t&&(e[t]=n[t])}return e}(n||{},e):n;return{__v_isVNode:!0,__v_skip:!0,type:t.type,props:o,key:o&&za(o),ref:e&&e.ref?i&&a?_e(a)?a.concat(Ua(e)):[a,Ua(e)]:Ua(e):a,scopeId:t.scopeId,children:t.children,target:t.target,targetAnchor:t.targetAnchor,staticCount:t.staticCount,shapeFlag:t.shapeFlag,patchFlag:e&&t.type!==Aa?-1===r?16:16|r:r,dynamicProps:t.dynamicProps,dynamicChildren:t.dynamicChildren,appContext:t.appContext,dirs:t.dirs,transition:t.transition,component:t.component,suspense:t.suspense,ssContent:t.ssContent&&Wa(t.ssContent),ssFallback:t.ssFallback&&Wa(t.ssFallback),el:t.el,anchor:t.anchor}}function Va(t=" ",e=0){return Za(Da,null,t,e)}function Ha(t="",e=!1){return e?(Ra(),Ia(Oa,null,t)):Za(Oa,null,t)}function qa(t){return null==t||"boolean"==typeof t?Za(Oa):_e(t)?Za(Aa,null,t):"object"==typeof t?null===t.el?t:Wa(t):Za(Da,null,String(t))}function Ka(t){return null===t.el?t:Wa(t)}function Ja(t,e){let i=0;const{shapeFlag:n}=t;if(null==e)e=null;else if(_e(e))i=16;else if("object"==typeof e){if(1&n||64&n){const i=e.default;return void(i&&(i._c&&jn(1),Ja(t,i()),i._c&&jn(-1)))}{i=32;const n=e._;n||$a in e?3===n&&Dn&&(1024&Dn.vnode.patchFlag?(e._=2,t.patchFlag|=1024):e._=1):e._ctx=Dn}}else xe(e)?(e={default:e,_ctx:Dn},i=32):(e=String(e),64&n?(i=16,e=[Va(e)]):i=8);t.children=e,t.shapeFlag|=i}function Qa(t,e,i=!1){const n=fr||Dn;if(n){const a=null==n.parent?n.vnode.appContext&&n.vnode.appContext.provides:n.parent.provides;if(a&&t in a)return a[t];if(arguments.length>1)return i&&xe(e)?e():e}}let Ya=!1;function Xa(t,e,i=[],n=[],a=[],r=!1){const{mixins:o,extends:l,data:s,computed:c,methods:d,watch:u,provide:p,inject:f,components:g,directives:h,beforeMount:m,mounted:C,beforeUpdate:y,updated:v,activated:b,deactivated:_,beforeDestroy:L,beforeUnmount:w,destroyed:x,unmounted:k,render:S,renderTracked:N,renderTriggered:M,errorCaptured:T,expose:A}=e,D=t.proxy,O=t.ctx,E=t.appContext.mixins;if(r&&S&&t.render===pe&&(t.render=S),r||(Ya=!0,tr("beforeCreate","bc",e,t,E),Ya=!1,nr(t,E,i,n,a)),l&&Xa(t,l,i,n,a,!0),o&&nr(t,o,i,n,a),f)if(_e(f))for(let t=0;t<f.length;t++){const e=f[t];O[e]=Qa(e)}else for(const t in f){const e=f[t];Ne(e)?O[t]=Qa(e.from||t,e.default,!0):O[t]=Qa(e)}if(d)for(const t in d){const e=d[t];xe(e)&&(O[t]=e.bind(D))}if(r?s&&i.push(s):(i.length&&i.forEach((e=>ar(t,e,D))),s&&ar(t,s,D)),c)for(const t in c){const e=c[t],i=vr({get:xe(e)?e.bind(D,D):xe(e.get)?e.get.bind(D,D):pe,set:!xe(e)&&xe(e.set)?e.set.bind(D):pe});Object.defineProperty(O,t,{enumerable:!0,configurable:!0,get:()=>i.value,set:t=>i.value=t})}if(u&&n.push(u),!r&&n.length&&n.forEach((t=>{for(const e in t)rr(t[e],O,D,e)})),p&&a.push(p),!r&&a.length&&a.forEach((t=>{const e=xe(t)?t.call(D):t;Reflect.ownKeys(e).forEach((t=>{!function(t,e){if(fr){let i=fr.provides;const n=fr.parent&&fr.parent.provides;n===i&&(i=fr.provides=Object.create(n)),i[t]=e}}(t,e[t])}))})),r&&(g&&Ce(t.components||(t.components=Ce({},t.type.components)),g),h&&Ce(t.directives||(t.directives=Ce({},t.type.directives)),h)),r||tr("created","c",e,t,E),m&&Kn(m.bind(D)),C&&Jn(C.bind(D)),y&&Qn(y.bind(D)),v&&Yn(v.bind(D)),b&&ca(b.bind(D),"a",void 0),_&&function(t,e){ca(t,"da",void 0)}(_.bind(D)),T&&((t,e=fr)=>{Hn("ec",t,e)})(T.bind(D)),N&&ia(N.bind(D)),M&&ea(M.bind(D)),w&&Xn(w.bind(D)),k&&ta(k.bind(D)),_e(A)&&!r)if(A.length){const e=t.exposed||(t.exposed=tn({}));A.forEach((t=>{e[t]=function(t,e){return Ji(t[e])?t[e]:new en(t,e)}(D,t)}))}else t.exposed||(t.exposed=de)}function tr(t,e,i,n,a){ir(t,e,a,n);const{extends:r,mixins:o}=i;r&&er(t,e,r,n),o&&ir(t,e,o,n);const l=i[t];l&&rn(l.bind(n.proxy),n,e)}function er(t,e,i,n){i.extends&&er(t,e,i.extends,n);const a=i[t];a&&rn(a.bind(n.proxy),n,e)}function ir(t,e,i,n){for(let a=0;a<i.length;a++){const r=i[a].mixins;r&&ir(t,e,r,n);const o=i[a][t];o&&rn(o.bind(n.proxy),n,e)}}function nr(t,e,i,n,a){for(let r=0;r<e.length;r++)Xa(t,e[r],i,n,a,!0)}function ar(t,e,i){const n=e.call(i,i);Ne(n)&&(t.data===de?t.data=zi(n):Ce(t.data,n))}function rr(t,e,i,n){const a=n.includes(".")?function(t,e){const i=e.split(".");return()=>{let e=t;for(let t=0;t<i.length&&e;t++)e=e[i[t]];return e}}(i,n):()=>i[n];if(ke(t)){const i=e[t];xe(i)&&aa(a,i)}else if(xe(t))aa(a,t.bind(i));else if(Ne(t))if(_e(t))t.forEach((t=>rr(t,e,i,n)));else{const n=xe(t.handler)?t.handler.bind(i):e[t.handler];xe(n)&&aa(a,n,t)}}function or(t,e,i){const n=i.appContext.config.optionMergeStrategies,{mixins:a,extends:r}=e;r&&or(t,r,i),a&&a.forEach((e=>or(t,e,i)));for(const a in e)n&&be(n,a)?t[a]=n[a](t[a],e[a],i.proxy,a):t[a]=e[a]}const lr=t=>t&&(t.proxy?t.proxy:lr(t.parent)),sr=Ce(Object.create(null),{$:t=>t,$el:t=>t.vnode.el,$data:t=>t.data,$props:t=>t.props,$attrs:t=>t.attrs,$slots:t=>t.slots,$refs:t=>t.refs,$parent:t=>lr(t.parent),$root:t=>t.root&&t.root.proxy,$emit:t=>t.emit,$options:t=>__VUE_OPTIONS_API__?function(t){const e=t.type,{__merged:i,mixins:n,extends:a}=e;if(i)return i;const r=t.appContext.mixins;if(!r.length&&!n&&!a)return e;const o={};return r.forEach((e=>or(o,e,t))),or(o,e,t),e.__merged=o}(t):t.type,$forceUpdate:t=>()=>_n(t.update),$nextTick:t=>bn.bind(t.proxy),$watch:t=>__VUE_OPTIONS_API__?oa.bind(t):pe}),cr={get({_:t},e){const{ctx:i,setupState:n,data:a,props:r,accessCache:o,type:l,appContext:s}=t;if("__v_skip"===e)return!0;let c;if("$"!==e[0]){const l=o[e];if(void 0!==l)switch(l){case 0:return n[e];case 1:return a[e];case 3:return i[e];case 2:return r[e]}else{if(n!==de&&be(n,e))return o[e]=0,n[e];if(a!==de&&be(a,e))return o[e]=1,a[e];if((c=t.propsOptions[0])&&be(c,e))return o[e]=2,r[e];if(i!==de&&be(i,e))return o[e]=3,i[e];__VUE_OPTIONS_API__&&Ya||(o[e]=4)}}const d=sr[e];let u,p;return d?("$attrs"===e&&oi(t,0,e),d(t)):(u=l.__cssModules)&&(u=u[e])?u:i!==de&&be(i,e)?(o[e]=3,i[e]):(p=s.config.globalProperties,be(p,e)?p[e]:void 0)},set({_:t},e,i){const{data:n,setupState:a,ctx:r}=t;if(a!==de&&be(a,e))a[e]=i;else if(n!==de&&be(n,e))n[e]=i;else if(e in t.props)return!1;return!("$"===e[0]&&e.slice(1)in t||(r[e]=i,0))},has({_:{data:t,setupState:e,accessCache:i,ctx:n,appContext:a,propsOptions:r}},o){let l;return void 0!==i[o]||t!==de&&be(t,o)||e!==de&&be(e,o)||(l=r[0])&&be(l,o)||be(n,o)||be(sr,o)||be(a.config.globalProperties,o)}},dr=Ce({},cr,{get(t,e){if(e!==Symbol.unscopables)return cr.get(t,e,t)},has:(t,e)=>"_"!==e[0]&&!ee(e)}),ur=ya();let pr=0,fr=null;const gr=t=>{fr=t};let hr=!1;function mr(t,e,i){xe(e)?t.render=e:Ne(e)&&(__VUE_PROD_DEVTOOLS__&&(t.devtoolsRawSetupState=e),t.setupState=tn(e)),Cr(t)}function Cr(t,e){const i=t.type;t.render||(t.render=i.render||pe,t.render._rc&&(t.withProxy=new Proxy(t.ctx,dr))),__VUE_OPTIONS_API__&&(fr=t,ai(),Xa(t,i),ri(),fr=null)}function yr(t,e=fr){e&&(e.effects||(e.effects=[])).push(t)}function vr(t){const e=function(t){let e,i;return xe(t)?(e=t,i=pe):(e=t.get,i=t.set),new nn(e,i,xe(t)||!t.set)}(t);return yr(e.effect),e}function br(t,e){let i;if(_e(t)||ke(t)){i=new Array(t.length);for(let n=0,a=t.length;n<a;n++)i[n]=e(t[n],n)}else if("number"==typeof t){i=new Array(t);for(let n=0;n<t;n++)i[n]=e(n+1,n)}else if(Ne(t))if(t[Symbol.iterator])i=Array.from(t,e);else{const n=Object.keys(t);i=new Array(n.length);for(let a=0,r=n.length;a<r;a++){const r=n[a];i[a]=e(t[r],r,a)}}else i=[];return i}const _r="3.0.4",Lr="http://www.w3.org/2000/svg",wr="undefined"!=typeof document?document:null;let xr,kr;const Sr={insert:(t,e,i)=>{e.insertBefore(t,i||null)},remove:t=>{const e=t.parentNode;e&&e.removeChild(t)},createElement:(t,e,i)=>e?wr.createElementNS(Lr,t):wr.createElement(t,i?{is:i}:void 0),createText:t=>wr.createTextNode(t),createComment:t=>wr.createComment(t),setText:(t,e)=>{t.nodeValue=e},setElementText:(t,e)=>{t.textContent=e},parentNode:t=>t.parentNode,nextSibling:t=>t.nextSibling,querySelector:t=>wr.querySelector(t),setScopeId(t,e){t.setAttribute(e,"")},cloneNode:t=>t.cloneNode(!0),insertStaticContent(t,e,i,n){const a=n?kr||(kr=wr.createElementNS(Lr,"svg")):xr||(xr=wr.createElement("div"));a.innerHTML=t;const r=a.firstChild;let o=r,l=o;for(;o;)l=o,Sr.insert(o,e,i),o=a.firstChild;return[r,l]}},Nr=/\s*!important$/;function Mr(t,e,i){if(_e(i))i.forEach((i=>Mr(t,e,i)));else if(e.startsWith("--"))t.setProperty(e,i);else{const n=function(t,e){const i=Ar[e];if(i)return i;let n=Re(e);if("filter"!==n&&n in t)return Ar[e]=n;n=je(n);for(let i=0;i<Tr.length;i++){const a=Tr[i]+n;if(a in t)return Ar[e]=a}return e}(t,e);Nr.test(i)?t.setProperty(Ie(n),i.replace(Nr,""),"important"):t[n]=i}}const Tr=["Webkit","Moz","ms"],Ar={},Dr="http://www.w3.org/1999/xlink";let Or=Date.now;"undefined"!=typeof document&&Or()>document.createEvent("Event").timeStamp&&(Or=()=>performance.now());let Er=0;const Pr=Promise.resolve(),Fr=()=>{Er=0},Rr=/(?:Once|Passive|Capture)$/,Br=/^on[a-z]/,Ir={beforeMount(t,{value:e},{transition:i}){t._vod="none"===t.style.display?"":t.style.display,i&&e?i.beforeEnter(t):jr(t,e)},mounted(t,{value:e},{transition:i}){i&&e&&i.enter(t)},updated(t,{value:e,oldValue:i},{transition:n}){n&&e!==i?e?(n.beforeEnter(t),jr(t,!0),n.enter(t)):n.leave(t,(()=>{jr(t,!1)})):jr(t,e)},beforeUnmount(t,{value:e}){jr(t,e)}};function jr(t,e){t.style.display=e?t._vod:"none"}const Gr=Ce({patchProp:(t,e,i,n,a=!1,r,o,l,s)=>{switch(e){case"class":!function(t,e,i){if(null==e&&(e=""),i)t.setAttribute("class",e);else{const i=t._vtc;i&&(e=(e?[e,...i]:[...i]).join(" ")),t.className=e}}(t,n,a);break;case"style":!function(t,e,i){const n=t.style;if(i)if(ke(i))e!==i&&(n.cssText=i);else{for(const t in i)Mr(n,t,i[t]);if(e&&!ke(e))for(const t in e)null==i[t]&&Mr(n,t,"")}else t.removeAttribute("style")}(t,i,n);break;default:he(e)?me(e)||function(t,e,i,n,a=null){const r=t._vei||(t._vei={}),o=r[e];if(n&&o)o.value=n;else{const[i,l]=function(t){let e;if(Rr.test(t)){let i;for(e={};i=t.match(Rr);)t=t.slice(0,t.length-i[0].length),e[i[0].toLowerCase()]=!0}return[t.slice(2).toLowerCase(),e]}(e);n?function(t,e,i,n){t.addEventListener(e,i,n)}(t,i,r[e]=function(t,e){const i=t=>{(t.timeStamp||Or())>=i.attached-1&&rn(function(t,e){if(_e(e)){const i=t.stopImmediatePropagation;return t.stopImmediatePropagation=()=>{i.call(t),t._stopped=!0},e.map((t=>e=>!e._stopped&&t(e)))}return e}(t,i.value),e,5,[t])};return i.value=t,i.attached=Er||(Pr.then(Fr),Er=Or()),i}(n,a),l):o&&(function(t,e,i,n){t.removeEventListener(e,i,n)}(t,i,o,l),r[e]=void 0)}}(t,e,0,n,o):function(t,e,i,n){return n?"innerHTML"===e||!!(e in t&&Br.test(e)&&xe(i)):!("spellcheck"===e||"draggable"===e||"form"===e&&"string"==typeof i||"list"===e&&"INPUT"===t.tagName||Br.test(e)&&ke(i)||!(e in t))}(t,e,n,a)?function(t,e,i,n,a,r,o){if("innerHTML"===e||"textContent"===e)return n&&o(n,a,r),void(t[e]=null==i?"":i);if("value"!==e||"PROGRESS"===t.tagName){if(""===i||null==i){const n=typeof t[e];if(""===i&&"boolean"===n)return void(t[e]=!0);if(null==i&&"string"===n)return t[e]="",void t.removeAttribute(e);if("number"===n)return t[e]=0,void t.removeAttribute(e)}try{t[e]=i}catch(t){}}else{t._value=i;const e=null==i?"":i;t.value!==e&&(t.value=e)}}(t,e,n,r,o,l,s):("true-value"===e?t._trueValue=n:"false-value"===e&&(t._falseValue=n),function(t,e,i,n){if(n&&e.startsWith("xlink:"))null==i?t.removeAttributeNS(Dr,e.slice(6,e.length)):t.setAttributeNS(Dr,e,i);else{const n=ie(e);null==i||n&&!1===i?t.removeAttribute(e):t.setAttribute(e,n?"":i)}}(t,e,n,a))}},forcePatchProp:(t,e)=>"value"===e},Sr);let $r;function zr(){return $r||($r=function(t){return function(t,e){"boolean"!=typeof __VUE_OPTIONS_API__&&(Ve().__VUE_OPTIONS_API__=!0),"boolean"!=typeof __VUE_PROD_DEVTOOLS__&&(Ve().__VUE_PROD_DEVTOOLS__=!1);const{insert:i,remove:n,patchProp:a,forcePatchProp:r,createElement:o,createText:l,createComment:s,setText:c,setElementText:d,parentNode:u,nextSibling:p,setScopeId:f=pe,cloneNode:g,insertStaticContent:h}=t,m=(t,e,i,n=null,a=null,r=null,o=!1,l=!1)=>{t&&!Ga(t,e)&&(n=z(t),B(t,a,r,!0),t=null),-2===e.patchFlag&&(l=!1,e.dynamicChildren=null);const{type:s,ref:c,shapeFlag:d}=e;switch(s){case Da:C(t,e,i,n);break;case Oa:y(t,e,i,n);break;case Ea:null==t&&v(e,i,n,o);break;case Aa:N(t,e,i,n,a,r,o,l);break;default:1&d?b(t,e,i,n,a,r,o,l):6&d?M(t,e,i,n,a,r,o,l):(64&d||128&d)&&s.process(t,e,i,n,a,r,o,l,Z)}null!=c&&a&&wa(c,t&&t.ref,r,e)},C=(t,e,n,a)=>{if(null==t)i(e.el=l(e.children),n,a);else{const i=e.el=t.el;e.children!==t.children&&c(i,e.children)}},y=(t,e,n,a)=>{null==t?i(e.el=s(e.children||""),n,a):e.el=t.el},v=(t,e,i,n)=>{[t.el,t.anchor]=h(t.children,e,i,n)},b=(t,e,i,n,a,r,o,l)=>{o=o||"svg"===e.type,null==t?_(e,i,n,a,r,o,l):x(t,e,a,r,o,l)},_=(t,e,n,r,l,s,c)=>{let u,p;const{type:f,props:h,shapeFlag:m,transition:C,scopeId:y,patchFlag:v,dirs:b}=t;if(t.el&&void 0!==g&&-1===v)u=t.el=g(t.el);else{if(u=t.el=o(t.type,s,h&&h.is),8&m?d(u,t.children):16&m&&w(t.children,u,null,r,l,s&&"foreignObject"!==f,c||!!t.dynamicChildren),b&&Ca(t,null,r,"created"),h){for(const e in h)Ee(e)||a(u,e,null,h[e],s,t.children,r,l,$);(p=h.onVnodeBeforeMount)&&xa(p,r,t)}L(u,y,t,r)}__VUE_PROD_DEVTOOLS__&&(Object.defineProperty(u,"__vnode",{value:t,enumerable:!1}),Object.defineProperty(u,"__vueParentComponent",{value:r,enumerable:!1})),b&&Ca(t,null,r,"beforeMount");const _=(!l||l&&!l.pendingBranch)&&C&&!C.persisted;_&&C.beforeEnter(u),i(u,e,n),((p=h&&h.onVnodeMounted)||_||b)&&La((()=>{p&&xa(p,r,t),_&&C.enter(u),b&&Ca(t,null,r,"mounted")}),l)},L=(t,e,i,n)=>{if(e&&f(t,e),n){const a=n.type.__scopeId;a&&a!==e&&f(t,a+"-s"),i===n.subTree&&L(t,n.vnode.scopeId,n.vnode,n.parent)}},w=(t,e,i,n,a,r,o,l=0)=>{for(let s=l;s<t.length;s++){const l=t[s]=o?Ka(t[s]):qa(t[s]);m(null,l,e,i,n,a,r,o)}},x=(t,e,i,n,o,l)=>{const s=e.el=t.el;let{patchFlag:c,dynamicChildren:u,dirs:p}=e;c|=16&t.patchFlag;const f=t.props||de,g=e.props||de;let h;if((h=g.onVnodeBeforeUpdate)&&xa(h,i,e,t),p&&Ca(e,t,i,"beforeUpdate"),c>0){if(16&c)S(s,e,f,g,i,n,o);else if(2&c&&f.class!==g.class&&a(s,"class",null,g.class,o),4&c&&a(s,"style",f.style,g.style,o),8&c){const l=e.dynamicProps;for(let e=0;e<l.length;e++){const c=l[e],d=f[c],u=g[c];(u!==d||r&&r(s,c))&&a(s,c,d,u,o,t.children,i,n,$)}}1&c&&t.children!==e.children&&d(s,e.children)}else l||null!=u||S(s,e,f,g,i,n,o);const m=o&&"foreignObject"!==e.type;u?k(t.dynamicChildren,u,s,i,n,m):l||E(t,e,s,null,i,n,m),((h=g.onVnodeUpdated)||p)&&La((()=>{h&&xa(h,i,e,t),p&&Ca(e,t,i,"updated")}),n)},k=(t,e,i,n,a,r)=>{for(let o=0;o<e.length;o++){const l=t[o],s=e[o],c=l.type===Aa||!Ga(l,s)||6&l.shapeFlag||64&l.shapeFlag?u(l.el):i;m(l,s,c,null,n,a,r,!0)}},S=(t,e,i,n,o,l,s)=>{if(i!==n){for(const c in n){if(Ee(c))continue;const d=n[c],u=i[c];(d!==u||r&&r(t,c))&&a(t,c,u,d,s,e.children,o,l,$)}if(i!==de)for(const r in i)Ee(r)||r in n||a(t,r,i[r],null,s,e.children,o,l,$)}},N=(t,e,n,a,r,o,s,c)=>{const d=e.el=t?t.el:l(""),u=e.anchor=t?t.anchor:l("");let{patchFlag:p,dynamicChildren:f}=e;p>0&&(c=!0),null==t?(i(d,n,a),i(u,n,a),w(e.children,n,u,r,o,s,c)):p>0&&64&p&&f?(k(t.dynamicChildren,f,n,r,o,s),(null!=e.key||r&&e===r.subTree)&&ka(t,e,!0)):E(t,e,n,u,r,o,s,c)},M=(t,e,i,n,a,r,o,l)=>{null==t?512&e.shapeFlag?a.ctx.activate(e,i,n,o,l):T(e,i,n,a,r,o,l):A(t,e,l)},T=(t,e,i,n,a,r,o)=>{const l=t.component=function(t,e,i){const n=t.type,a=(e?e.appContext:t.appContext)||ur,r={uid:pr++,vnode:t,type:n,parent:e,appContext:a,root:null,next:null,subTree:null,update:null,render:null,proxy:null,exposed:null,withProxy:null,effects:null,provides:e?e.provides:Object.create(a.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:zn(n,a),emitsOptions:Tn(n,a),emit:null,emitted:null,ctx:de,data:de,props:de,attrs:de,slots:de,refs:de,setupState:de,setupContext:null,suspense:i,suspenseId:i?i.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null};return r.ctx={_:r},r.root=e?e.root:r,r.emit=Mn.bind(null,r),__VUE_PROD_DEVTOOLS__,r}(t,n,a);if(sa(t)&&(l.ctx.renderer=Z),function(t,e=!1){hr=e;const{props:i,children:n,shapeFlag:a}=t.vnode,r=4&a;(function(t,e,i,n=!1){const a={},r={};Ue(r,$a,1),Gn(t,e,a,r),i?t.props=n?a:Zi(a,!1,yi,Ii):t.type.props?t.props=a:t.props=r,t.attrs=r})(t,i,r,e),((t,e)=>{if(32&t.vnode.shapeFlag){const i=e._;i?(t.slots=e,Ue(e,"_",i)):ga(e,t.slots={})}else t.slots={},e&&ha(t,e);Ue(t.slots,$a,1)})(t,n),r&&function(t,e){const i=t.type;t.accessCache=Object.create(null),t.proxy=new Proxy(t.ctx,cr);const{setup:n}=i;if(n){const i=t.setupContext=n.length>1?function(t){return{attrs:t.attrs,slots:t.slots,emit:t.emit,expose:e=>{t.exposed=tn(e)}}}(t):null;fr=t,ai();const a=an(n,t,0,[t.props,i]);if(ri(),fr=null,Me(a)){if(e)return a.then((e=>{mr(t,e)}));t.asyncDep=a}else mr(t,a)}else Cr(t)}(t,e),hr=!1}(l),l.asyncDep){if(a&&a.registerDep(l,D),!t.el){const t=l.subTree=Za(Oa);y(null,t,e,i)}}else D(l,t,e,i,a,r,o)},A=(t,e,i)=>{const n=e.component=t.component;if(function(t,e,i){const{props:n,children:a,component:r}=t,{props:o,children:l,patchFlag:s}=e,c=r.emitsOptions;if(e.dirs||e.transition)return!0;if(!(i&&s>=0))return!(!a&&!l||l&&l.$stable)||n!==o&&(n?!o||Rn(n,o,c):!!o);if(1024&s)return!0;if(16&s)return n?Rn(n,o,c):!!o;if(8&s){const t=e.dynamicProps;for(let e=0;e<t.length;e++){const i=t[e];if(o[i]!==n[i]&&!An(c,i))return!0}}return!1}(t,e,i)){if(n.asyncDep&&!n.asyncResolved)return void O(n,e,i);n.next=e,function(t){const e=cn.indexOf(t);e>-1&&cn.splice(e,1)}(n.update),n.update()}else e.component=t.component,e.el=t.el,n.vnode=e},D=(t,e,i,n,a,r,o)=>{t.update=Ye((function(){if(t.isMounted){let e,{next:i,bu:n,u:l,parent:s,vnode:c}=t,d=i;i?(i.el=c.el,O(t,i,o)):i=c,n&&ze(n),(e=i.props&&i.props.onVnodeBeforeUpdate)&&xa(e,s,i,c);const p=En(t),f=t.subTree;t.subTree=p,m(f,p,u(f.el),z(f),t,a,r),i.el=p.el,null===d&&function({vnode:t,parent:e},i){for(;e&&e.subTree===t;)(t=e.vnode).el=i,e=e.parent}(t,p.el),l&&La(l,a),(e=i.props&&i.props.onVnodeUpdated)&&La((()=>{xa(e,s,i,c)}),a),__VUE_PROD_DEVTOOLS__}else{let o;const{el:l,props:s}=e,{bm:c,m:d,parent:u}=t;c&&ze(c),(o=s&&s.onVnodeBeforeMount)&&xa(o,u,e);const p=t.subTree=En(t);m(null,p,i,n,t,a,r),e.el=p.el,d&&La(d,a),(o=s&&s.onVnodeMounted)&&La((()=>{xa(o,u,e)}),a);const{a:f}=t;f&&256&e.shapeFlag&&La(f,a),t.isMounted=!0}}),_a)},O=(t,e,i)=>{e.component=t;const n=t.vnode.props;t.vnode=e,t.next=null,function(t,e,i,n){const{props:a,attrs:r,vnode:{patchFlag:o}}=t,l=qi(a),[s]=t.propsOptions;if(!(n||o>0)||16&o){let n;Gn(t,e,a,r);for(const r in l)e&&(be(e,r)||(n=Ie(r))!==r&&be(e,n))||(s?!i||void 0===i[r]&&void 0===i[n]||(a[r]=$n(s,e||de,r,void 0,t)):delete a[r]);if(r!==l)for(const t in r)e&&be(e,t)||delete r[t]}else if(8&o){const i=t.vnode.dynamicProps;for(let n=0;n<i.length;n++){const o=i[n],c=e[o];if(s)if(be(r,o))r[o]=c;else{const e=Re(o);a[e]=$n(s,l,e,c,t)}else r[o]=c}}li(t,"set","$attrs")}(t,e.props,n,i),((t,e)=>{const{vnode:i,slots:n}=t;let a=!0,r=de;if(32&i.shapeFlag){const t=e._;t?1===t?a=!1:Ce(n,e):(a=!e.$stable,ga(e,n)),r=e}else e&&(ha(t,e),r={default:1});if(a)for(const t in n)ua(t)||t in r||delete n[t]})(t,e.children),xn(void 0,t.update)},E=(t,e,i,n,a,r,o,l=!1)=>{const s=t&&t.children,c=t?t.shapeFlag:0,u=e.children,{patchFlag:p,shapeFlag:f}=e;if(p>0){if(128&p)return void F(s,u,i,n,a,r,o,l);if(256&p)return void P(s,u,i,n,a,r,o,l)}8&f?(16&c&&$(s,a,r),u!==s&&d(i,u)):16&c?16&f?F(s,u,i,n,a,r,o,l):$(s,a,r,!0):(8&c&&d(i,""),16&f&&w(u,i,n,a,r,o,l))},P=(t,e,i,n,a,r,o,l)=>{e=e||ue;const s=(t=t||ue).length,c=e.length,d=Math.min(s,c);let u;for(u=0;u<d;u++){const n=e[u]=l?Ka(e[u]):qa(e[u]);m(t[u],n,i,null,a,r,o,l)}s>c?$(t,a,r,!0,!1,d):w(e,i,n,a,r,o,l,d)},F=(t,e,i,n,a,r,o,l)=>{let s=0;const c=e.length;let d=t.length-1,u=c-1;for(;s<=d&&s<=u;){const n=t[s],c=e[s]=l?Ka(e[s]):qa(e[s]);if(!Ga(n,c))break;m(n,c,i,null,a,r,o,l),s++}for(;s<=d&&s<=u;){const n=t[d],s=e[u]=l?Ka(e[u]):qa(e[u]);if(!Ga(n,s))break;m(n,s,i,null,a,r,o,l),d--,u--}if(s>d){if(s<=u){const t=u+1,d=t<c?e[t].el:n;for(;s<=u;)m(null,e[s]=l?Ka(e[s]):qa(e[s]),i,d,a,r,o),s++}}else if(s>u)for(;s<=d;)B(t[s],a,r,!0),s++;else{const p=s,f=s,g=new Map;for(s=f;s<=u;s++){const t=e[s]=l?Ka(e[s]):qa(e[s]);null!=t.key&&g.set(t.key,s)}let h,C=0;const y=u-f+1;let v=!1,b=0;const _=new Array(y);for(s=0;s<y;s++)_[s]=0;for(s=p;s<=d;s++){const n=t[s];if(C>=y){B(n,a,r,!0);continue}let c;if(null!=n.key)c=g.get(n.key);else for(h=f;h<=u;h++)if(0===_[h-f]&&Ga(n,e[h])){c=h;break}void 0===c?B(n,a,r,!0):(_[c-f]=s+1,c>=b?b=c:v=!0,m(n,e[c],i,null,a,r,o,l),C++)}const L=v?function(t){const e=t.slice(),i=[0];let n,a,r,o,l;const s=t.length;for(n=0;n<s;n++){const s=t[n];if(0!==s){if(a=i[i.length-1],t[a]<s){e[n]=a,i.push(n);continue}for(r=0,o=i.length-1;r<o;)l=(r+o)/2|0,t[i[l]]<s?r=l+1:o=l;s<t[i[r]]&&(r>0&&(e[n]=i[r-1]),i[r]=n)}}for(r=i.length,o=i[r-1];r-- >0;)i[r]=o,o=e[o];return i}(_):ue;for(h=L.length-1,s=y-1;s>=0;s--){const t=f+s,l=e[t],d=t+1<c?e[t+1].el:n;0===_[s]?m(null,l,i,d,a,r,o):v&&(h<0||s!==L[h]?R(l,i,d,2):h--)}}},R=(t,e,n,a,r=null)=>{const{el:o,type:l,transition:s,children:c,shapeFlag:d}=t;if(6&d)R(t.component.subTree,e,n,a);else if(128&d)t.suspense.move(e,n,a);else if(64&d)l.move(t,e,n,Z);else if(l!==Aa)if(l!==Ea)if(2!==a&&1&d&&s)if(0===a)s.beforeEnter(o),i(o,e,n),La((()=>s.enter(o)),r);else{const{leave:t,delayLeave:a,afterLeave:r}=s,l=()=>i(o,e,n),c=()=>{t(o,(()=>{l(),r&&r()}))};a?a(o,l,c):c()}else i(o,e,n);else(({el:t,anchor:e},n,a)=>{let r;for(;t&&t!==e;)r=p(t),i(t,n,a),t=r;i(e,n,a)})(t,e,n);else{i(o,e,n);for(let t=0;t<c.length;t++)R(c[t],e,n,a);i(t.anchor,e,n)}},B=(t,e,i,n=!1,a=!1)=>{const{type:r,props:o,ref:l,children:s,dynamicChildren:c,shapeFlag:d,patchFlag:u,dirs:p}=t;if(null!=l&&wa(l,null,i,null),256&d)return void e.ctx.deactivate(t);const f=1&d&&p;let g;if((g=o&&o.onVnodeBeforeUnmount)&&xa(g,e,t),6&d)G(t.component,i,n);else{if(128&d)return void t.suspense.unmount(i,n);f&&Ca(t,null,e,"beforeUnmount"),c&&(r!==Aa||u>0&&64&u)?$(c,e,i,!1,!0):(r===Aa&&(128&u||256&u)||!a&&16&d)&&$(s,e,i),64&d&&(n||!Sa(t.props))&&t.type.remove(t,Z),n&&I(t)}((g=o&&o.onVnodeUnmounted)||f)&&La((()=>{g&&xa(g,e,t),f&&Ca(t,null,e,"unmounted")}),i)},I=t=>{const{type:e,el:i,anchor:a,transition:r}=t;if(e===Aa)return void j(i,a);if(e===Ea)return void(({el:t,anchor:e})=>{let i;for(;t&&t!==e;)i=p(t),n(t),t=i;n(e)})(t);const o=()=>{n(i),r&&!r.persisted&&r.afterLeave&&r.afterLeave()};if(1&t.shapeFlag&&r&&!r.persisted){const{leave:e,delayLeave:n}=r,a=()=>e(i,o);n?n(t.el,o,a):a()}else o()},j=(t,e)=>{let i;for(;t!==e;)i=p(t),n(t),t=i;n(e)},G=(t,e,i)=>{const{bum:n,effects:a,update:r,subTree:o,um:l}=t;if(n&&ze(n),a)for(let t=0;t<a.length;t++)Xe(a[t]);r&&(Xe(r),B(o,t,e,i)),l&&La(l,e),La((()=>{t.isUnmounted=!0}),e),e&&e.pendingBranch&&!e.isUnmounted&&t.asyncDep&&!t.asyncResolved&&t.suspenseId===e.pendingId&&(e.deps--,0===e.deps&&e.resolve()),__VUE_PROD_DEVTOOLS__},$=(t,e,i,n=!1,a=!1,r=0)=>{for(let o=r;o<t.length;o++)B(t[o],e,i,n,a)},z=t=>6&t.shapeFlag?z(t.component.subTree):128&t.shapeFlag?t.suspense.next():p(t.anchor||t.el),U=(t,e)=>{null==t?e._vnode&&B(e._vnode,null,null,!0):m(e._vnode||null,t,e),kn(),e._vnode=t},Z={p:m,um:B,m:R,r:I,mt:T,mc:w,pc:E,pbc:k,n:z,o:t};let W;return{render:U,hydrate:W,createApp:ba(U,W)}}(t)}(Gr))}const Ur=(...t)=>Object.prototype.toString.call(...t).slice(8,-1);var Zr={props:{data:{required:!0,validator:t=>"Null"===Ur(t)},name:{required:!0,type:String}}};const Wr={class:"null"},Vr={class:"key"},Hr={key:0,class:"separator"},qr=Za("span",{class:"value"},"null",-1);Zr.render=function(t,e,i,n,a,r){return Ra(),Ia("span",Wr,[Za("span",Vr,se(i.name),1),""!==i.name?(Ra(),Ia("span",Hr,": ")):Ha("v-if",!0),qr])},Zr.__file="src/components/NullWrapper.vue";var Kr={props:{data:{required:!0,validator:t=>"Boolean"===Ur(t)},name:{required:!0,type:String}}};const Jr={class:"boolean"},Qr={class:"key"},Yr={key:0,class:"separator"},Xr={class:"value"};Kr.render=function(t,e,i,n,a,r){return Ra(),Ia("span",Jr,[Za("span",Qr,se(i.name),1),""!==i.name?(Ra(),Ia("span",Yr,": ")):Ha("v-if",!0),Za("span",Xr,se(i.data),1)])},Kr.__file="src/components/BooleanWrapper.vue";var to={props:{data:{required:!0,validator:t=>"Number"===Ur(t)},name:{required:!0,type:String}}};const eo={class:"number"},io={class:"key"},no={key:0,class:"separator"},ao={class:"value"};to.render=function(t,e,i,n,a,r){return Ra(),Ia("span",eo,[Za("span",io,se(i.name),1),""!==i.name?(Ra(),Ia("span",no,": ")):Ha("v-if",!0),Za("span",ao,se(i.data),1)])},to.__file="src/components/NumberWrapper.vue";var ro={props:{data:{required:!0,validator:t=>"String"===Ur(t)},name:{required:!0,type:String}}};const oo={class:"string"},lo={class:"key"},so={key:0,class:"separator"},co=Za("span",{class:"quotes"},'"',-1),uo={class:"value"},po=Za("span",{class:"quotes"},'"',-1);ro.render=function(t,e,i,n,a,r){return Ra(),Ia("span",oo,[Za("span",lo,se(i.name),1),""!==i.name?(Ra(),Ia("span",so,": ")):Ha("v-if",!0),co,Za("span",uo,se(i.data),1),po])},ro.__file="src/components/StringWrapper.vue";const fo=new Set;function go(t={collapseSignal,expandSignal}){const e=Qi(!1),i=Qi(!1),n=()=>{e.value=!1,i.value=!i.value};aa((()=>t.collapseSignal),n);const a=Qi(!1),r=()=>{e.value=!0,a.value=!a.value};return aa((()=>t.expandSignal),r),aa((()=>t.data),(()=>{t.expandOnCreatedAndUpdated(t.path)?r():n()}),{immediate:!0}),{isExpanding:e,innerCollapseSignal:i,innerExpandSignal:a,handleClick:t=>{fo.clear(),!0===t.metaKey&&!0===t.shiftKey?n():!0===t.metaKey?r():e.value=!e.value}}}var ho={name:"array-wrapper",props:{path:{required:!0,validator:t=>"Array"===Ur(t)&&t.every((t=>"String"===Ur(t)||"Number"===Ur(t)))},data:{required:!0,validator:t=>"Array"===Ur(t)},name:{required:!0,type:String},collapseSignal:{default:!1,type:Boolean},expandSignal:{default:!1,type:Boolean},expandOnCreatedAndUpdated:{required:!0,type:Function},getKeys:{required:!0,type:Function}},setup(t){const{isExpanding:e,innerExpandSignal:i,innerCollapseSignal:n,handleClick:a}=go(t),r=vr((()=>t.getKeys(t.data,t.path))),o=fo.has(t.data);return fo.add(t.data),{keys:r,isExpanding:e,innerExpandSignal:i,innerCollapseSignal:n,handleClick:a,isCircular:o}},components:{}};const mo={class:"array"},Co={key:0,class:"value"},yo={key:0,class:"value"};ho.render=function(t,e,i,n,a,r){const o=Na("wrapper");return Ra(),Ia("span",mo,[Za("span",{class:"indicator",onClick:e[1]||(e[1]=(...t)=>n.handleClick&&n.handleClick(...t))},se(n.isExpanding?"▼":"▶"),1),Za("span",{class:"key",onClick:e[2]||(e[2]=(...t)=>n.handleClick&&n.handleClick(...t))},se(""===i.name?"":i.name),1),Za("span",{class:"separator",onClick:e[3]||(e[3]=(...t)=>n.handleClick&&n.handleClick(...t))},se(""===i.name?"":": "),1),Za("span",{class:"count",onClick:e[4]||(e[4]=(...t)=>n.handleClick&&n.handleClick(...t))},se(!1===n.isExpanding&&i.data.length>=2?"("+i.data.length+")":""),1),Za("span",{class:"preview",onClick:e[5]||(e[5]=(...t)=>n.handleClick&&n.handleClick(...t))},se(n.isExpanding?"Array("+i.data.length+")":"[...]"),1),n.isCircular?(Ra(),Ia(Aa,{key:0},[n.isExpanding?(Ra(),Ia("span",Co,[(Ra(!0),Ia(Aa,null,br(n.keys,(t=>(Ra(),Ia(o,{key:t,name:t,path:i.path.concat(t),data:i.data[t],"expand-signal":n.innerExpandSignal,"collapse-signal":n.innerCollapseSignal,expandOnCreatedAndUpdated:()=>!1,getKeys:i.getKeys},null,8,["name","path","data","expand-signal","collapse-signal","expandOnCreatedAndUpdated","getKeys"])))),128))])):Ha("v-if",!0)],64)):(Ra(),Ia(Aa,{key:1},[n.isExpanding?(Ra(),Ia("span",yo,[(Ra(!0),Ia(Aa,null,br(n.keys,(t=>(Ra(),Ia(o,{key:t,name:t,path:i.path.concat(t),data:i.data[t],"expand-signal":n.innerExpandSignal,"collapse-signal":n.innerCollapseSignal,expandOnCreatedAndUpdated:i.expandOnCreatedAndUpdated,getKeys:i.getKeys},null,8,["name","path","data","expand-signal","collapse-signal","expandOnCreatedAndUpdated","getKeys"])))),128))])):Ha("v-if",!0)],64))])},ho.__file="src/components/ArrayWrapper.vue";var vo={name:"object-wrapper",props:{path:{required:!0,validator:t=>"Array"===Ur(t)&&t.every((t=>"String"===Ur(t)||"Number"===Ur(t)))},data:{required:!0,validator:t=>"Object"===Ur(t)},name:{required:!0,type:String},collapseSignal:{default:!1,type:Boolean},expandSignal:{default:!1,type:Boolean},expandOnCreatedAndUpdated:{required:!0,type:Function},getKeys:{required:!0,type:Function}},setup(t){const{isExpanding:e,innerExpandSignal:i,innerCollapseSignal:n,handleClick:a}=go(t),r=vr((()=>t.getKeys(t.data,t.path))),o=fo.has(t.data);return fo.add(t.data),{keys:r,isExpanding:e,innerExpandSignal:i,innerCollapseSignal:n,handleClick:a,isCircular:o}},components:{}};const bo={class:"object"},_o={key:0,class:"value"},Lo={key:1,class:"value"};vo.render=function(t,e,i,n,a,r){const o=Na("wrapper");return Ra(),Ia("span",bo,[Za("span",{class:"indicator",onClick:e[1]||(e[1]=(...t)=>n.handleClick&&n.handleClick(...t))},se(n.isExpanding?"▼":"▶"),1),Za("span",{class:"key",onClick:e[2]||(e[2]=(...t)=>n.handleClick&&n.handleClick(...t))},se(""===i.name?"":i.name),1),Za("span",{class:"separator",onClick:e[3]||(e[3]=(...t)=>n.handleClick&&n.handleClick(...t))},se(""===i.name?"":": "),1),Za("span",{class:"preview",onClick:e[4]||(e[4]=(...t)=>n.handleClick&&n.handleClick(...t))},se(n.isExpanding?"":"{...}"),1),n.isCircular?(Ra(),Ia(Aa,{key:0},[n.isExpanding?(Ra(),Ia("span",_o,[(Ra(!0),Ia(Aa,null,br(n.keys,(t=>(Ra(),Ia(o,{key:t,class:"value",name:t,path:i.path.concat(t),data:i.data[t],"expand-signal":n.innerExpandSignal,"collapse-signal":n.innerCollapseSignal,expandOnCreatedAndUpdated:()=>!1,getKeys:i.getKeys},null,8,["name","path","data","expand-signal","collapse-signal","expandOnCreatedAndUpdated","getKeys"])))),128))])):Ha("v-if",!0)],64)):ma((Ra(),Ia("span",Lo,[(Ra(!0),Ia(Aa,null,br(n.keys,(t=>(Ra(),Ia(o,{key:t,class:"value",name:t,path:i.path.concat(t),data:i.data[t],"expand-signal":n.innerExpandSignal,"collapse-signal":n.innerCollapseSignal,expandOnCreatedAndUpdated:i.expandOnCreatedAndUpdated,getKeys:i.getKeys},null,8,["name","path","data","expand-signal","collapse-signal","expandOnCreatedAndUpdated","getKeys"])))),128))],512)),[[Ir,n.isExpanding]])])},vo.__file="src/components/ObjectWrapper.vue";const wo={name:"wrapper",props:{path:{required:!0,validator:t=>"Array"===Ur(t)&&t.every((t=>"String"===Ur(t)||"Number"===Ur(t)))},data:{required:!0,validator:t=>"Null"===Ur(t)||"Boolean"===Ur(t)||"Number"===Ur(t)||"String"===Ur(t)||"Array"===Ur(t)||"Object"===Ur(t)},name:{required:!0,type:String},collapseSignal:{default:!1,type:Boolean},expandSignal:{default:!1,type:Boolean},expandOnCreatedAndUpdated:{required:!0,type:Function},getKeys:{required:!0,type:Function}},setup:()=>({objectToString:Ur}),components:{NullWrapper:Zr,BooleanWrapper:Kr,NumberWrapper:to,StringWrapper:ro,ArrayWrapper:ho,ObjectWrapper:vo}};ho.components.Wrapper=wo,vo.components.Wrapper=wo,wo.render=function(t,e,i,n,a,r){const o=Na("null-wrapper"),l=Na("boolean-wrapper"),s=Na("number-wrapper"),c=Na("string-wrapper"),d=Na("array-wrapper"),u=Na("object-wrapper");return"Null"===t.objectToString(t.data)?(Ra(),Ia(o,{key:0,name:t.name,data:t.data},null,8,["name","data"])):"Boolean"===t.objectToString(t.data)?(Ra(),Ia(l,{key:1,name:t.name,data:t.data},null,8,["name","data"])):"Number"===t.objectToString(t.data)?(Ra(),Ia(s,{key:2,name:t.name,data:t.data},null,8,["name","data"])):"String"===t.objectToString(t.data)?(Ra(),Ia(c,{key:3,name:t.name,data:t.data},null,8,["name","data"])):"Array"===t.objectToString(t.data)?(Ra(),Ia(d,{key:4,name:t.name,path:t.path,data:t.data,"collapse-signal":t.collapseSignal,"expand-signal":t.expandSignal,expandOnCreatedAndUpdated:t.expandOnCreatedAndUpdated,getKeys:t.getKeys},null,8,["name","path","data","collapse-signal","expand-signal","expandOnCreatedAndUpdated","getKeys"])):"Object"===t.objectToString(t.data)?(Ra(),Ia(u,{key:5,name:t.name,path:t.path,data:t.data,"collapse-signal":t.collapseSignal,"expand-signal":t.expandSignal,expandOnCreatedAndUpdated:t.expandOnCreatedAndUpdated,getKeys:t.getKeys},null,8,["name","path","data","collapse-signal","expand-signal","expandOnCreatedAndUpdated","getKeys"])):Ha("v-if",!0)},wo.__file="src/components/Wrapper.vue";const xo=Object.freeze({expandOnCreatedAndUpdated:t=>!1,getKeys:(t,e)=>Object.keys(t)});var ko=gt({components:{CodeAce:mt,CodeMonaco:Kt,FullCodePreview:Yt,Preview:Ht},data:function(){return{mousedown:!1,leftContainerSize:40,mobileMode:!1,shared:dt,initialCode:"",currentTab:"code-editor",fullCode:"",fullCodeConfig:{mimimal:!1,esm:!0,node:!1}}},computed:{currentTime:function(){this.shared.message;for(var t=new Date,e=[t.getHours(),t.getMinutes(),t.getSeconds()],i="",n=0,a=e.length;n<a;++n)i+=(e[n]<10?"0":"")+e[n],n<a-1&&(i+=":");return i}},mounted:function(){var t=this;dt.isMobile?(this.leftContainerSize=0,ut().then((function(t){dt.runCode=pt(t)}))):(ut().then((function(e){t.initialCode=pt(e)})),window.addEventListener("mousemove",(function(e){if(t.mousedown){var i=e.clientX/window.innerWidth;i=Math.min(.9,Math.max(.1,i)),t.leftContainerSize=100*i}})),window.addEventListener("mouseup",(function(e){t.mousedown=!1})))},methods:{onSplitterDragStart:function(){this.mousedown=!0},disposeAndRun:function(){this.$refs.preview.refreshAll()},updateFullCode:function(){var t=this.$refs.preview.getOption();if(t){var e=(0,Xt.collectDeps)(t);e.push("svg"===dt.renderer?"SVGRenderer":"CanvasRenderer"),this.fullCode=(0,Xt.buildExampleCode)(dt.sourceCode,e,{minimal:this.fullCodeConfig.minimal,ts:!1,esm:this.fullCodeConfig.esm,theme:dt.darkMode?"dark":"",ROOT_PATH:dt.cdnRoot})}},updateOptionOutline:function(){var t=Object.freeze(this.$refs.preview.getOption());t&&((t,e,i={})=>{void 0===i.rootName&&(i.rootName=""),void 0===i.getKeys&&(i.getKeys=xo.getKeys),void 0===i.expandOnCreatedAndUpdated&&(i.expandOnCreatedAndUpdated=xo.expandOnCreatedAndUpdated),e.classList.add("object-visualizer"),((...t)=>{zr().render(...t)})(null,e),((...t)=>{const e=zr().createApp(...t),{mount:i}=e;return e.mount=t=>{const n=function(t){return ke(t)?document.querySelector(t):t}(t);if(!n)return;const a=e._component;xe(a)||a.render||a.template||(a.template=n.innerHTML),n.innerHTML="";const r=i(n);return n.removeAttribute("v-cloak"),n.setAttribute("data-v-app",""),r},e})(wo,{data:t,name:i.rootName,path:[],expandOnCreatedAndUpdated:i.expandOnCreatedAndUpdated,getKeys:i.getKeys}).mount(e)})(t,this.$el.querySelector("#option-outline"),{getKeys:function(t,e){return Object.keys(t).filter((function(e){return!(Array.isArray(t[e])&&!t[e].length)}))},expandOnCreatedAndUpdated:function(t){return 0===t.length||"series"===t[0]&&t.length<=1}})},updateTabContent:function(t){"full-code"===t?this.updateFullCode():"full-option"===t&&this.updateOptionOutline()}},watch:{"shared.typeCheck":function(t){this.initialCode=dt.sourceCode,this.updateFullCode()},currentTab:function(t){this.updateTabContent(t)},"shared.runHash":function(){this.updateTabContent(this.currentTab)},fullCodeConfig:{deep:!0,handler:function(){this.updateFullCode()}}}},X,[],!1,null,null,null);ko.options.__file="src/editor/Editor.vue";const So=ko.exports;var No=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{attrs:{id:"example-explore"}},[i("div",{attrs:{id:"left-container"}},[i("div",{attrs:{id:"left-chart-nav"}},[i("scrollactive",{attrs:{"active-class":"active",offset:80,duration:500,"scroll-container-selector":"#example-explore","bezier-easing-value":".5,0,.35,1"},on:{itemchanged:t.onActiveNavChanged}},[i("ul",t._l(t.EXAMPLE_CATEGORIES,(function(e){return i("li",{key:e},[i("a",{staticClass:"left-chart-nav-link scrollactive-item",attrs:{id:"left-chart-nav-"+e,href:"#chart-type-"+e}},[i("span",{staticClass:"chart-icon",domProps:{innerHTML:t._s(t.icons[e])}}),t._v(" "),i("span",{staticClass:"chart-name"},[t._v(t._s(t.$t("chartTypes."+e)))])])])})),0)])],1)]),t._v(" "),i("div",{attrs:{id:"explore-container"}},[i("div",{staticClass:"example-list-panel"},t._l(t.exampleList,(function(e){return i("div",{key:e.category},[i("h3",{staticClass:"chart-type-head",attrs:{id:"chart-type-"+e.category}},[t._v("\n                    "+t._s(t.$t("chartTypes."+e.category))+"\n                    "),i("span",[t._v(t._s(e.category))])]),t._v(" "),i("div",{staticClass:"row",attrs:{id:"chart-row-"+e.category}},t._l(e.examples,(function(t){return i("div",{key:t.id,staticClass:"col-xl-2 col-lg-3 col-md-4 col-sm-6"},[i("ExampleCard",{attrs:{example:t}})],1)})),0)])})),0)]),t._v(" "),i("div",{attrs:{id:"toolbar"}},[i("el-switch",{attrs:{"active-color":"#181432","active-text":t.$t("editor.darkMode"),"inactive-text":""},model:{value:t.shared.darkMode,callback:function(e){t.$set(t.shared,"darkMode",e)},expression:"shared.darkMode"}})],1)])};No._withStripped=!0;var Mo=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"example-list-item"},[n("a",{staticClass:"example-link",attrs:{target:"_blank",href:t.exampleLink}},[n("img",{staticClass:"chart-area",attrs:{src:i(555),"data-src":t.screenshotURL}}),t._v(" "),n("h4",{staticClass:"example-title"},[t._v(t._s(t.title))]),t._v(" "),t.showSubtitle?n("h5",{staticClass:"example-subtitle"},[t._v(t._s(t.subtitle))]):t._e()])])};Mo._withStripped=!0;var To=gt({props:["example"],computed:{title:function(){return("zh"===dt.locale?this.example.titleCN:this.example.title)||this.example.title||""},showSubtitle:function(){return"zh"===dt.locale},subtitle:function(){return this.example.title||""},exampleTheme:function(){return this.example.theme||(dt.darkMode?"dark":"")},exampleLink:function(){var t=this.example,e=["c="+t.id],i=this.exampleTheme;return t.isGL&&e.push("gl=1"),i&&e.push("theme="+i),"local"in ot&&e.push("local"),"useDirtyRect"in ot&&e.push("useDirtyRect"),"./editor.html?"+e.join("&")},screenshotURL:function(){var t=this.example,e=this.exampleTheme?"-"+this.exampleTheme:"",i=st?"webp":"png",n=t.isGL?"data-gl":"data";return"".concat(dt.cdnRoot,"/").concat(n,"/thumb").concat(e,"/").concat(t.id,".").concat(i,"?_v_=").concat(dt.version)}}},Mo,[],!1,null,null,null);To.options.__file="src/explore/ExampleCard.vue";const Ao=To.exports,Do="undefined"!=typeof window,Oo=Do&&!("onscroll"in window)||"undefined"!=typeof navigator&&/(gle|ing|ro)bot|crawl|spider/i.test(navigator.userAgent),Eo=Do&&"IntersectionObserver"in window,Po=Do&&"classList"in document.createElement("p"),Fo={elements_selector:"img",container:Oo||Do?document:null,threshold:300,thresholds:null,data_src:"src",data_srcset:"srcset",data_sizes:"sizes",data_bg:"bg",data_poster:"poster",class_loading:"loading",class_loaded:"loaded",class_error:"error",load_delay:0,auto_unobserve:!0,callback_enter:null,callback_exit:null,callback_reveal:null,callback_loaded:null,callback_error:null,callback_finish:null,use_native:!1},Ro=function(t,e){var i;let n="LazyLoad::Initialized",a=new t(e);try{i=new CustomEvent(n,{detail:{instance:a}})}catch(t){(i=document.createEvent("CustomEvent")).initCustomEvent(n,!1,!1,{instance:a})}window.dispatchEvent(i)},Bo="data-",Io="was-processed",jo="ll-timeout",Go="true",$o=(t,e)=>t.getAttribute(Bo+e),zo=(t,e,i)=>{var n=Bo+e;null!==i?t.setAttribute(n,i):t.removeAttribute(n)},Uo=t=>$o(t,Io)===Go,Zo=(t,e)=>zo(t,jo,e),Wo=t=>$o(t,jo),Vo=(t,e,i,n)=>{t&&(void 0===n?void 0===i?t(e):t(e,i):t(e,i,n))},Ho=(t,e)=>{t.loadingCount+=e,0===t._elements.length&&0===t.loadingCount&&Vo(t._settings.callback_finish,t)},qo=t=>{let e=[];for(let i,n=0;i=t.children[n];n+=1)"SOURCE"===i.tagName&&e.push(i);return e},Ko=(t,e,i)=>{i&&t.setAttribute(e,i)},Jo=(t,e)=>{Ko(t,"sizes",$o(t,e.data_sizes)),Ko(t,"srcset",$o(t,e.data_srcset)),Ko(t,"src",$o(t,e.data_src))},Qo={IMG:(t,e)=>{const i=t.parentNode;i&&"PICTURE"===i.tagName&&qo(i).forEach((t=>{Jo(t,e)})),Jo(t,e)},IFRAME:(t,e)=>{Ko(t,"src",$o(t,e.data_src))},VIDEO:(t,e)=>{qo(t).forEach((t=>{Ko(t,"src",$o(t,e.data_src))})),Ko(t,"poster",$o(t,e.data_poster)),Ko(t,"src",$o(t,e.data_src)),t.load()}},Yo=(t,e)=>{Po?t.classList.add(e):t.className+=(t.className?" ":"")+e},Xo=(t,e)=>{Po?t.classList.remove(e):t.className=t.className.replace(new RegExp("(^|\\s+)"+e+"(\\s+|$)")," ").replace(/^\s+/,"").replace(/\s+$/,"")},tl="load",el="loadeddata",il="error",nl=(t,e,i)=>{t.addEventListener(e,i)},al=(t,e,i)=>{t.removeEventListener(e,i)},rl=(t,e,i)=>{al(t,tl,e),al(t,el,e),al(t,il,i)},ol=function(t,e,i){var n=i._settings;const a=e?n.class_loaded:n.class_error,r=e?n.callback_loaded:n.callback_error,o=t.target;Xo(o,n.class_loading),Yo(o,a),Vo(r,o,i),Ho(i,-1)},ll=["IMG","IFRAME","VIDEO"],sl=(t,e)=>{var i=e._observer;dl(t,e),i&&e._settings.auto_unobserve&&i.unobserve(t)},cl=t=>{var e=Wo(t);e&&(clearTimeout(e),Zo(t,null))},dl=(t,e,i)=>{var n=e._settings;!i&&Uo(t)||(ll.indexOf(t.tagName)>-1&&(((t,e)=>{const i=a=>{ol(a,!0,e),rl(t,i,n)},n=a=>{ol(a,!1,e),rl(t,i,n)};((t,e,i)=>{nl(t,tl,e),nl(t,el,e),nl(t,il,i)})(t,i,n)})(t,e),Yo(t,n.class_loading)),((t,e)=>{const i=e._settings,n=t.tagName,a=Qo[n];if(a)return a(t,i),Ho(e,1),void(e._elements=(r=e._elements,o=t,r.filter((t=>t!==o))));var r,o;((t,e)=>{const i=$o(t,e.data_src),n=$o(t,e.data_bg);i&&(t.style.backgroundImage=`url("${i}")`),n&&(t.style.backgroundImage=n)})(t,i)})(t,e),(t=>{zo(t,Io,Go)})(t),Vo(n.callback_reveal,t,e),Vo(n.callback_set,t,e))},ul=t=>{return!!Eo&&(t._observer=new IntersectionObserver((e=>{e.forEach((e=>(t=>t.isIntersecting||t.intersectionRatio>0)(e)?((t,e,i)=>{const n=i._settings;Vo(n.callback_enter,t,e,i),n.load_delay?((t,e)=>{var i=e._settings.load_delay,n=Wo(t);n||(n=setTimeout((function(){sl(t,e),cl(t)}),i),Zo(t,n))})(t,i):sl(t,i)})(e.target,e,t):((t,e,i)=>{const n=i._settings;Vo(n.callback_exit,t,e,i),n.load_delay&&cl(t)})(e.target,e,t)))}),{root:(e=t._settings).container===document?null:e.container,rootMargin:e.thresholds||e.threshold+"px"}),!0);var e},pl=["IMG","IFRAME"],fl=(t,e)=>{return(t=>t.filter((t=>!Uo(t))))((i=t||(t=>t.container.querySelectorAll(t.elements_selector))(e),Array.prototype.slice.call(i)));var i},gl=function(t,e){var i;this._settings=(t=>Object.assign({},Fo,t))(t),this.loadingCount=0,ul(this),this.update(e),i=this,Do&&window.addEventListener("online",(t=>{(t=>{var e=t._settings;e.container.querySelectorAll("."+e.class_error).forEach((t=>{Xo(t,e.class_error),(t=>{zo(t,Io,null)})(t)})),t.update()})(i)}))};gl.prototype={update:function(t){var e,i=this._settings;this._elements=fl(t,i),!Oo&&this._observer?((t=>t.use_native&&"loading"in HTMLImageElement.prototype)(i)&&((e=this)._elements.forEach((t=>{-1!==pl.indexOf(t.tagName)&&(t.setAttribute("loading","lazy"),dl(t,e))})),this._elements=fl(t,i)),this._elements.forEach((t=>{this._observer.observe(t)}))):this.loadAll()},destroy:function(){this._observer&&(this._elements.forEach((t=>{this._observer.unobserve(t)})),this._observer=null),this._elements=null,this._settings=null},load:function(t,e){dl(t,this,e)},loadAll:function(){this._elements.forEach((t=>{sl(t,this)}))}},Do&&function(t,e){if(e)if(e.length)for(let i,n=0;i=e[n];n+=1)Ro(t,i);else Ro(t,e)}(gl,window.lazyLoadOptions);const hl=gl;var ml={};["line","bar","scatter","pie","radar","funnel","gauge","map","graph","treemap","parallel","sankey","candlestick","boxplot","heatmap","pictorialBar","themeRiver","calendar","custom","sunburst","tree","dataset","geo","lines","dataZoom","rich","drag"].forEach((function(t){ml[t]=i(472)("./"+t+".svg")}));var Cl=i(926);["globe","bar3D","scatter3D","surface","map3D","lines3D","line3D","scatterGL","linesGL","flowGL","graphGL","geo3D"].forEach((function(t){ml[t]=Cl}));var yl="ec-shot-loaded",vl=gt({components:{ExampleCard:Ao},data:function(){var t={};function e(e,i){var n=0;do{for(var a=!1,r=0;r<e.length;r++){var o=e[r];if(!rt.hasOwnProperty(o.id)){"string"==typeof o.category&&(o.category=[o.category]);var l=(o.category||[])[n];if(l){a=!0;var s=t[l];s||(s={category:l,examples:[]},t[l]=s),o.isGL=i,s.examples.push(o)}}}if(!a)break}while(++n&&n<4)}return e(Ft,!1),e(Rt,!0),{shared:dt,icons:ml,EXAMPLE_CATEGORIES:at,exampleListByCategory:t}},watch:{"shared.darkMode":function(){for(var t=this.$el.querySelectorAll("img.chart-area"),e=0;e<t.length;e++)t[e].classList.remove(yl),t[e].setAttribute("data-was-processed","false");this._lazyload.update()}},computed:{exampleList:function(){for(var t=[],e=0;e<at.length;e++){var i=at[e],n=this.exampleListByCategory[i];n&&n.examples.length>0&&t.push({category:i,examples:n.examples})}return t}},mounted:function(){this._lazyload=new hl({elements_selector:"img.chart-area",load_delay:400,class_loaded:yl})},methods:{onActiveNavChanged:function(t,e,i){}}},No,[],!1,null,null,null);vl.options.__file="src/explore/Explore.vue";const bl=vl.exports;var _l=function(){var t=this.$createElement;return(this._self._c||t)("preview")};_l._withStripped=!0;var Ll=gt({components:{Preview:Ht},mounted:function(){ut().then((function(t){dt.runCode=pt(t)}))}},_l,[],!1,null,null,null);Ll.options.__file="src/editor/View.vue";const wl=Ll.exports;var xl=i(463),kl=i.n(xl);function Sl(t,e){var i=new Q({locale:e.locale,fallbackLocale:"en",messages:Y});if(dt.cdnRoot=e.cdnRoot,dt.version=e.version,dt.locale=e.locale||"en","string"==typeof t&&(t=document.querySelector(t)),!t)throw new Error("Can't find el.");var n=document.createElement("div");t.appendChild(n),new(a())({i18n:i,el:n,render:function(t){return t({editor:So,explore:bl,view:wl}[e.page]||bl)}})}a().use(kl())},555:(t,e,i)=>{t.exports=i.p+"../asset/placeholder.jpg"},38:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="138px" viewBox="0 0 175 138" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>bar</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="bar" fill="#5067A2" fill-rule="nonzero"> <path d="M121.488231,0 L102.050114,0 C99.36627,-1.1969592e-16 97.1905846,2.17568537 97.1905846,4.85952929 L97.1905846,133.140471 C97.1905846,135.824315 99.36627,138 102.050114,138 L121.488231,138 C124.172075,138 126.34776,135.824315 126.34776,133.140471 L126.34776,4.85952929 C126.34776,2.17568537 124.172075,1.1969592e-16 121.488231,0 Z M170.083523,30.1571753 L150.645406,30.1571753 C147.961562,30.1571753 145.785877,32.3328607 145.785877,35.0167046 L145.785877,132.207289 C145.785877,134.891133 147.961562,137.066819 150.645406,137.066819 L170.083523,137.066819 C172.767367,137.066819 174.943052,134.891133 174.943052,132.207289 L174.943052,35.0167046 C174.943052,32.3328607 172.767367,30.1571753 170.083523,30.1571753 Z M53.4548215,39.8762339 C50.7709777,39.876234 48.5952924,42.0519193 48.5952924,44.7357631 L48.5952924,132.207289 C48.5952924,134.891133 50.7709777,137.066818 53.4548215,137.066819 L72.8929386,137.066819 C75.5767824,137.066818 77.7524677,134.891133 77.7524677,132.207289 L77.7524677,44.7357631 C77.7524676,42.0519193 75.5767824,39.876234 72.8929386,39.8762339 L53.4548215,39.8762339 Z M29.1571753,67.17388 L29.1571753,132.207289 C29.1571753,134.891133 26.9814901,137.066818 24.2976462,137.066819 L4.85952929,137.066819 C2.17568537,137.066819 3.28676086e-16,134.891133 0,132.207289 L0,67.17388 C7.33863613e-08,64.4900361 2.17568542,62.3143508 4.85952929,62.3143508 L24.2976462,62.3143508 C26.98149,62.3143509 29.1571753,64.4900362 29.1571753,67.17388 Z" id="Shape"></path> </g> </g> </svg>'},851:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="98px" viewBox="0 0 175 98" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>boxplot</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="boxplot" fill="#5067A2" fill-rule="nonzero"> <path d="M165.206074,4.85900217 L165.206074,43.7310195 L145.770065,43.7310195 L145.770065,14.5770065 C145.770065,11.8934537 143.594616,9.71800434 140.911063,9.71800434 L72.8850325,9.71800434 C70.2014797,9.71800434 68.0260304,11.8934537 68.0260304,14.5770065 L68.0260304,82.6030369 C68.0260304,85.2865897 70.2014797,87.462039 72.8850325,87.462039 L140.911063,87.462039 C143.594616,87.462039 145.770065,85.2865897 145.770065,82.6030369 L145.770065,53.4490239 L165.206074,53.4490239 L165.206074,92.3210412 C165.206074,95.004594 167.381523,97.1800434 170.065076,97.1800434 C172.748629,97.1800434 174.924078,95.004594 174.924078,92.3210412 L174.924078,4.85900217 C174.924078,2.17544937 172.748629,1.43751749e-14 170.065076,1.42108547e-14 C167.381523,-1.05827854e-15 165.206074,2.17544937 165.206074,4.85900217 Z M58.308026,14.5770065 L58.308026,82.6030369 C58.308026,83.8917244 57.7960969,85.1276306 56.8848572,86.0388703 C55.9736176,86.9501099 54.7377114,87.462039 53.4490239,87.462039 L34.0130152,87.462039 C31.3294624,87.462039 29.154013,85.2865897 29.154013,82.6030369 L29.154013,53.4490239 L9.71800434,53.4490239 L9.71800434,92.3210412 C9.71800434,95.004594 7.54255497,97.1800434 4.85900217,97.1800434 C2.17544937,97.1800434 3.28640434e-16,95.004594 0,92.3210412 L0,4.85900217 C-3.28640434e-16,2.17544937 2.17544937,4.31255248e-14 4.85900217,4.26325641e-14 C7.54255497,4.21396035e-14 9.71800434,2.17544937 9.71800434,4.85900217 L9.71800434,43.7310195 L29.154013,43.7310195 L29.154013,14.5770065 C29.154013,11.8934537 31.3294624,9.71800434 34.0130152,9.71800434 L53.4490239,9.71800434 C56.1325767,9.71800434 58.308026,11.8934537 58.308026,14.5770065 L58.308026,14.5770065 Z" id="Shape"></path> </g> </g> </svg>'},496:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="164px" height="138px" viewBox="0 0 164 138" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>calendar </title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="calendar-" transform="translate(-0.500000, -0.315789)" fill="#5067A2" fill-rule="nonzero"> <path d="M147.236842,56.3782895 C147.236842,53.9965615 145.304597,52.0657895 142.921053,52.0657895 L125.657895,52.0657895 C123.27435,52.0657895 121.342105,53.9965615 121.342105,56.3782895 L121.342105,65.0032895 C121.342105,67.3850175 123.27435,69.3157895 125.657895,69.3157895 L142.921053,69.3157895 C145.304597,69.3157895 147.236842,67.3850175 147.236842,65.0032895 L147.236842,56.3782895 Z M147.236842,82.2532895 C147.236842,79.8715615 145.304597,77.9407895 142.921053,77.9407895 L125.657895,77.9407895 C123.27435,77.9407895 121.342105,79.8715615 121.342105,82.2532895 L121.342105,90.8782895 C121.342105,93.2600175 123.27435,95.1907895 125.657895,95.1907895 L142.921053,95.1907895 C145.304597,95.1907895 147.236842,93.2600175 147.236842,90.8782895 L147.236842,82.2532895 Z M112.710526,56.3782895 C112.710526,53.9965615 110.778282,52.0657895 108.394737,52.0657895 L91.1315789,52.0657895 C88.7480342,52.0657895 86.8157895,53.9965615 86.8157895,56.3782895 L86.8157895,65.0032895 C86.8157895,67.3850175 88.7480342,69.3157895 91.1315789,69.3157895 L108.394737,69.3157895 C110.778282,69.3157895 112.710526,67.3850175 112.710526,65.0032895 L112.710526,56.3782895 Z M112.710526,82.2532895 C112.710526,79.8715615 110.778282,77.9407895 108.394737,77.9407895 L91.1315789,77.9407895 C88.7480342,77.9407895 86.8157895,79.8715615 86.8157895,82.2532895 L86.8157895,90.8782895 C86.8157895,93.2600175 88.7480342,95.1907895 91.1315789,95.1907895 L108.394737,95.1907895 C110.778282,95.1907895 112.710526,93.2600175 112.710526,90.8782895 L112.710526,82.2532895 Z M112.710526,108.128289 C112.710526,105.746561 110.778282,103.815789 108.394737,103.815789 L91.1315789,103.815789 C88.7480342,103.815789 86.8157895,105.746561 86.8157895,108.128289 L86.8157895,116.753289 C86.8157895,119.135017 88.7480342,121.065789 91.1315789,121.065789 L108.394737,121.065789 C110.778282,121.065789 112.710526,119.135017 112.710526,116.753289 L112.710526,108.128289 Z M78.1842105,56.3782895 C78.1842105,53.9965615 76.2519658,52.0657895 73.8684211,52.0657895 L56.6052632,52.0657895 C54.2217184,52.0657895 52.2894737,53.9965615 52.2894737,56.3782895 L52.2894737,65.0032895 C52.2894737,67.3850175 54.2217184,69.3157895 56.6052632,69.3157895 L73.8684211,69.3157895 C76.2519658,69.3157895 78.1842105,67.3850175 78.1842105,65.0032895 L78.1842105,56.3782895 Z M78.1842105,82.2532895 C78.1842105,79.8715615 76.2519658,77.9407895 73.8684211,77.9407895 L56.6052632,77.9407895 C54.2217184,77.9407895 52.2894737,79.8715615 52.2894737,82.2532895 L52.2894737,90.8782895 C52.2894737,93.2600175 54.2217184,95.1907895 56.6052632,95.1907895 L73.8684211,95.1907895 C76.2519658,95.1907895 78.1842105,93.2600175 78.1842105,90.8782895 L78.1842105,82.2532895 Z M78.1842105,108.128289 C78.1842105,105.746561 76.2519658,103.815789 73.8684211,103.815789 L56.6052632,103.815789 C54.2217184,103.815789 52.2894737,105.746561 52.2894737,108.128289 L52.2894737,116.753289 C52.2894737,119.135017 54.2217184,121.065789 56.6052632,121.065789 L73.8684211,121.065789 C76.2519658,121.065789 78.1842105,119.135017 78.1842105,116.753289 L78.1842105,108.128289 Z M43.6578947,82.2532895 C43.6578947,79.8715615 41.72565,77.9407895 39.3421053,77.9407895 L22.0789474,77.9407895 C19.6954027,77.9407895 17.7631579,79.8715615 17.7631579,82.2532895 L17.7631579,90.8782895 C17.7631579,93.2600175 19.6954027,95.1907895 22.0789474,95.1907895 L39.3421053,95.1907895 C41.72565,95.1907895 43.6578947,93.2600175 43.6578947,90.8782895 L43.6578947,82.2532895 Z M43.6578947,108.128289 C43.6578947,105.746561 41.72565,103.815789 39.3421053,103.815789 L22.0789474,103.815789 C19.6954027,103.815789 17.7631579,105.746561 17.7631579,108.128289 L17.7631579,116.753289 C17.7631579,119.135017 19.6954027,121.065789 22.0789474,121.065789 L39.3421053,121.065789 C41.72565,121.065789 43.6578947,119.135017 43.6578947,116.753289 L43.6578947,108.128289 Z M164.5,39.1282895 L164.5,134.003289 C164.5,136.385017 162.567755,138.315789 160.184211,138.315789 L4.81578947,138.315789 C2.43224476,138.315789 0.5,136.385017 0.5,134.003289 L0.5,39.1282895 C0.5,36.7465615 2.43224476,34.8157895 4.81578947,34.8157895 L160.184211,34.8157895 C162.567755,34.8157895 164.5,36.7465615 164.5,39.1282895 Z M164.5,4.62828947 L164.5,21.8782895 C164.5,24.2600175 162.567755,26.1907895 160.184211,26.1907895 L4.81578947,26.1907895 C2.43224476,26.1907895 0.5,24.2600175 0.5,21.8782895 L0.5,4.62828947 C0.5,2.24656149 2.43224476,0.315789474 4.81578947,0.315789474 L160.184211,0.315789474 C162.567755,0.315789474 164.5,2.24656149 164.5,4.62828947 Z" id="Shape"></path> </g> </g> </svg>'},173:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="138px" viewBox="0 0 175 138" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>Candlestick (1)</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="Candlestick-(1)" fill="#5067A2" fill-rule="nonzero"> <path d="M121.508001,34.0222403 L116.647681,33.0222403 L116.647681,4.86032 C116.647681,2.17603934 114.471642,-7.11961547e-08 111.787361,-7.11961549e-08 C109.10308,-7.1196155e-08 106.927041,2.17603934 106.927041,4.86032 L106.927041,33.0222403 L102.066721,33.0222403 C100.777684,33.0222403 99.5414424,33.5343082 98.6299556,34.4457951 C97.7184688,35.3572819 97.2064009,36.5935234 97.2064009,37.8825604 L97.2064009,105.927041 C97.2064009,107.216078 97.7184688,108.452319 98.6299556,109.363806 C99.5414424,110.275293 100.777684,110.787361 102.066721,110.787361 L106.927041,110.787361 L106.927041,125.572455 C106.927041,128.256735 109.10308,130.432775 111.787361,130.432775 C114.471642,130.432775 116.647681,128.256735 116.647681,125.572455 L116.647681,110.787361 L121.508001,110.787361 C122.797038,110.787361 124.03328,110.275293 124.944766,109.363806 C125.856253,108.452319 126.368321,107.216078 126.368321,105.927041 L126.368321,37.8825604 C126.368321,36.5935233 125.856253,35.3572819 124.944766,34.445795 C124.03328,33.5343082 122.797038,33.0222402 121.508001,33.0222403 L121.508001,34.0222403 Z M170.111202,41.6032004 L165.250881,41.6032004 L165.250881,27.0222403 C165.250881,24.3379598 163.074842,22.1619207 160.390561,22.1619207 C157.706281,22.1619207 155.530242,24.3379598 155.530241,27.0222403 L155.530241,41.6032004 L150.669921,41.6032004 C149.380884,41.6032004 148.144643,42.1152684 147.233156,43.0267552 C146.321669,43.938242 145.809601,45.1744835 145.809601,46.4635205 L145.809601,75.6254408 C145.809601,78.3097214 147.985641,80.4857608 150.669921,80.4857608 L155.530241,80.4857608 L155.530241,104.729037 C155.530241,107.413318 157.706281,109.589357 160.390561,109.589357 C163.074842,109.589357 165.250881,107.413318 165.250881,104.729037 L165.250881,80.4857608 L170.111202,80.4857608 C172.795482,80.4857608 174.971522,78.3097214 174.971522,75.6254408 L174.971522,46.4635205 C174.971522,45.1744835 174.459454,43.938242 173.547967,43.0267552 C172.63648,42.1152684 171.400239,41.6032004 170.111202,41.6032004 L170.111202,41.6032004 Z M72.9048007,84.3460808 L68.0444807,84.3460808 L68.0444807,55.1841605 C68.0444805,52.4998799 65.8684412,50.3238407 63.1841606,50.3238407 C60.49988,50.3238407 58.3238406,52.4998799 58.3238405,55.1841605 L58.3238405,84.3460808 L53.4635205,84.3460808 C52.1744835,84.3460807 50.938242,84.8581487 50.0267552,85.7696355 C49.1152683,86.6811224 48.6032003,87.9173639 48.6032004,89.2064009 L48.6032004,118.368321 C48.6032004,119.657358 49.1152684,120.8936 50.0267552,121.805086 C50.938242,122.716573 52.1744835,123.228641 53.4635205,123.228641 L58.3238405,123.228641 L58.3238405,132.949281 C58.3238406,135.633562 60.49988,137.809601 63.1841606,137.809601 C65.8684412,137.809601 68.0444805,135.633562 68.0444807,132.949281 L68.0444807,123.228641 L72.9048007,123.228641 C75.5890813,123.228641 77.7651206,121.052602 77.7651206,118.368321 L77.7651206,89.2064009 C77.7651207,87.9173639 77.2530527,86.6811224 76.3415659,85.7696356 C75.4300791,84.8581488 74.1938377,84.3460808 72.9048007,84.3460808 Z M29.1619203,41.6032004 L29.1619203,90.2064009 C29.1619203,92.8906815 26.9858809,95.0667209 24.3016003,95.0667209 L19.4412801,95.0667209 L19.4412801,119.572455 C19.4412801,122.256735 17.2652407,124.432775 14.5809601,124.432775 C11.8966795,124.432775 9.72064013,122.256735 9.72064013,119.572455 L9.72064013,95.0667209 L4.86032,95.0667209 C2.17603938,95.0667209 3.28729566e-16,92.8906815 0,90.2064009 L0,41.6032004 C-3.28729566e-16,38.9189198 2.17603938,36.7428804 4.86032,36.7428804 L9.72064013,36.7428804 L9.72064013,12.4412801 C9.72064013,9.75699951 11.8966795,7.58096013 14.5809601,7.58096013 C17.2652407,7.58096013 19.4412801,9.75699951 19.4412801,12.4412801 L19.4412801,36.7428804 L24.3016003,36.7428804 C26.9858809,36.7428804 29.1619203,38.9189198 29.1619203,41.6032004 Z" id="Shape"></path> </g> </g> </svg>'},353:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="159px" height="142px" viewBox="0 0 159 142" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>custom</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="custom" transform="translate(0.000000, -0.825151)" fill="#5067A2" fill-rule="nonzero"> <path d="M74.8235294,81.2918174 L74.8235294,138.091817 C74.8235294,140.705965 72.7298022,142.825151 70.1470588,142.825151 L4.67647054,142.825151 C2.09372718,142.825151 3.16294839e-16,140.705965 0,138.091817 L0,81.2918174 C-3.63362476e-08,80.0364594 0.492698108,78.8325175 1.36970646,77.9448453 C2.24671482,77.0571731 3.43619342,76.558484 4.67647054,76.558484 L70.1470588,76.558484 C71.387336,76.558484 72.5768146,77.0571731 73.4538229,77.9448453 C74.3308313,78.8325175 74.8235294,80.0364594 74.8235294,81.2918174 Z M74.8235294,5.55848402 L74.8235294,62.358484 C74.8235294,63.6138421 74.3308313,64.817784 73.4538229,65.7054562 C72.5768146,66.5931284 71.387336,67.0918174 70.1470588,67.0918174 L4.67647054,67.0918174 C3.43619342,67.0918174 2.24671482,66.5931284 1.36970646,65.7054562 C0.492698108,64.817784 -3.63362423e-08,63.6138421 0,62.358484 L0,5.55848402 C-2.35506485e-15,4.30312598 0.492698161,3.09918414 1.36970651,2.21151195 C2.24671486,1.32383977 3.43619344,0.825150732 4.67647054,0.825150732 L70.1470588,0.825150732 C72.7298022,0.825150732 74.8235294,2.94433623 74.8235294,5.55848402 Z M159,10.2918174 L159,57.6251507 C159,62.8534463 154.812546,67.0918174 149.647059,67.0918174 L93.5294118,67.0918174 C88.363925,67.0918174 84.1764706,62.8534464 84.1764706,57.6251507 L84.1764706,10.2918174 C84.1764706,5.06352179 88.363925,0.825150732 93.5294118,0.825150732 L149.647059,0.825150732 C154.812546,0.825150809 159,5.06352184 159,10.2918174 Z M154.323529,76.558484 C155.563807,76.558484 156.753285,77.0571731 157.630294,77.9448453 C158.507302,78.8325175 159,80.0364594 159,81.2918174 L159,138.091817 C159,140.705965 156.906273,142.825151 154.323529,142.825151 L88.8529412,142.825151 C86.2701978,142.825151 84.1764706,140.705965 84.1764706,138.091817 L84.1764706,81.2918174 C84.1764706,80.0364594 84.6691687,78.8325175 85.5461771,77.9448453 C86.4231854,77.0571731 87.612664,76.558484 88.8529412,76.558484 L154.323529,76.558484 L154.323529,76.558484 Z M93.5294118,133.358484 L149.647059,133.358484 L149.647059,86.0251507 L93.5294118,86.0251507 L93.5294118,133.358484 L93.5294118,133.358484 Z" id="Shape"></path> </g> </g> </svg>'},6:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="83px" viewBox="0 0 175 83" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>dataZoom</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="dataZoom" fill="#5067A2" fill-rule="nonzero"> <path d="M9.20037003,18.4191593 L9.20957963,13.8143694 L9.20957963,18.4191593 L41.4431082,18.4191593 L41.4431082,64.4670572 L9.20957963,64.4670572 L9.20957963,18.4191593 L9.20037003,18.4191593 Z M133.538904,64.4670572 L133.538904,18.4191593 L165.772433,18.4191593 L165.772433,64.4670572 L133.538904,64.4670572 L133.538904,64.4670572 Z M165.772433,9.20957963 L133.538904,9.20957963 L133.538904,4.60478981 C133.538904,2.06163473 131.47727,2.74466854e-07 128.934115,2.74466854e-07 C126.390959,2.74466855e-07 124.329325,2.06163473 124.329325,4.60478981 L124.329325,9.20957963 L50.6526879,9.20957963 L50.6526879,4.60478981 C50.6526879,2.06163462 48.5910532,-6.1602121e-15 46.047898,-6.31593544e-15 C43.5047429,-6.47165878e-15 41.4431082,2.06163462 41.4431082,4.60478981 L41.4431082,9.20957963 L9.20957963,9.20957963 C4.13510123,9.20957963 0,13.3446809 0,18.4191593 L0,64.4670572 C0,69.5507451 4.13510123,73.6766368 9.20957963,73.6766368 L41.4431082,73.6766368 L41.4431082,78.2814267 C41.4431082,80.8245818 43.5047429,82.8862165 46.047898,82.8862165 C48.5910532,82.8862165 50.6526879,80.8245818 50.6526879,78.2814267 L50.6526879,73.6766368 L124.329325,73.6766368 L124.329325,78.2814267 C124.329325,80.8245818 126.390959,82.8862165 128.934115,82.8862165 C131.47727,82.8862165 133.538904,80.8245818 133.538904,78.2814267 L133.538904,73.6766368 L165.772433,73.6766368 C170.858743,73.6766368 174.982013,69.5533676 174.982013,64.4670572 L174.982013,18.4191593 C174.982013,13.3446809 170.856121,9.20957963 165.772433,9.20957963 Z" id="Shape"></path> </g> </g> </svg>'},238:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="145px" height="157px" viewBox="0 0 145 157" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>dataset</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="dataset" fill="#5067A2" fill-rule="nonzero"> <path d="M77,133.051622 C77,135.720999 74.7614237,137.884956 72,137.884956 C69.2385763,137.884956 67,135.720999 67,133.051622 L67,92.7182891 C67,90.0489128 69.2385763,87.8849558 72,87.8849558 C74.7614237,87.8849558 77,90.0489128 77,92.7182891 L77,133.051622 Z M87,92.7182888 C87.0000002,90.0489126 89.2385764,87.8849558 92,87.8849558 C94.7614236,87.8849558 96.9999998,90.0489126 97,92.7182888 L97,133.051623 C96.9999998,135.720999 94.7614236,137.884956 92,137.884956 C89.2385764,137.884956 87.0000002,135.720999 87,133.051623 L87,92.7182888 Z M58,133.072456 C58,135.730326 55.7614237,137.884956 53,137.884956 C50.2385763,137.884956 48,135.730326 48,133.072456 L48,73.6974557 C48,71.0395854 50.2385763,68.8849558 53,68.8849558 C55.7614237,68.8849558 58,71.0395854 58,73.6974557 L58,133.072456 Z M39,133.066774 C38.9999999,135.727782 36.7614237,137.884956 34,137.884956 C31.2385763,137.884956 29.0000001,135.727782 29,133.066774 L29,44.7031376 C29,42.0421293 31.2385763,39.8849558 34,39.8849558 C36.7614237,39.8849558 39,42.0421293 39,44.7031376 L39,133.066774 Z M126.3,132.884956 L126.3,63.9913737 C126.403893,62.6917747 125.897136,61.4145164 124.9129,60.4952543 L83.0962,21.7192841 C82.9895,21.6282393 82.8537001,21.5918214 82.7469999,21.5098811 C81.8447692,20.5509026 80.5501183,19.997952 79.1870999,19.9894333 L39,19.9894333 L39,10.8849558 L135.9903,10.8849558 L136,132.884956 L126.3,132.884956 Z M116,146.884956 L10,146.884956 L10,28.8849558 L74.0143636,28.8849558 L74.0143636,58.8841865 C74.0143636,63.8855711 78.3314545,67.9611095 83.6507272,67.9611097 L116,67.9611097 L116,146.884956 Z M144.990333,10.0614263 C144.990333,5.00519104 140.659667,0.884955752 135.323667,0.884955752 L38.6666667,0.884955752 C33.3403334,0.884955752 29.0000001,5.00519104 28.9999999,10.0614263 L28.9999999,19.2378969 L9.66666665,19.2378969 C4.34033332,19.2378969 0,23.3581322 0,28.4143675 L0,147.708485 C0,152.773897 4.34033332,156.884956 9.66666665,156.884956 L116,156.884956 C121.338753,156.884956 125.666667,152.77651 125.666667,147.708485 L125.666667,142.202603 L135.333333,142.202603 C140.672086,142.202603 145,138.094157 145,133.026132 L144.990333,10.0614263 Z" id="Shape"></path> </g> </g> </svg>'},642:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="159px" viewBox="0 0 175 159" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>drag</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="drag" transform="translate(0.000000, 0.000000)" fill="#5067A2" fill-rule="nonzero"> <path d="M174.799112,77.2243509 C175.141784,80.4933122 173.860538,83.7226514 171.369927,85.8675022 L145.821493,107.665891 C143.704571,109.29545 140.681703,108.978807 138.948417,106.945941 C137.215132,104.913075 137.380357,101.878162 139.32409,100.045479 L158.345038,83.8019696 L92.4385031,83.8019696 L92.4385031,144.173679 L109.273597,130.085944 C111.397298,128.30558 114.562167,128.583909 116.342532,130.70761 C118.122896,132.83131 117.844567,135.99618 115.720867,137.776544 L93.3308935,156.516741 C89.5429956,159.697467 83.9995074,159.633553 80.2859517,156.366338 L59.0490671,137.706356 C57.140269,135.840194 57.0244102,132.80703 58.7852891,130.800695 C60.546168,128.79436 63.5687212,128.515654 65.6667932,130.166159 L82.4116455,144.885586 L82.4116455,83.8019696 L16.5051101,83.8019696 L35.5360859,100.045479 C36.9700273,101.186546 37.6671397,103.019075 37.3541473,104.824694 C37.041155,106.630312 35.7679333,108.121296 34.0335988,108.713163 C32.2992644,109.305031 30.380183,108.903467 29.0286553,107.665891 L3.52032945,85.8975828 C1.25557692,83.9644222 -0.0328273042,81.1246883 0.00397844461,78.147297 C0.0407841935,75.1699056 1.39899211,72.3628885 3.71083975,70.4863026 L29.118897,49.820949 C31.2816477,48.328475 34.2285594,48.7508003 35.8850928,50.7906204 C37.5416262,52.8304405 37.3503183,55.8013071 35.4458442,57.6118174 L15.5625855,73.7751119 L82.4116455,73.7751119 L82.4116455,14.1153089 L65.6667932,28.8347359 C64.3276607,30.0598688 62.43094,30.4655542 60.7078175,29.8954003 C58.9846951,29.3252464 57.7042897,27.8683002 57.360198,26.0862151 C57.0161064,24.30413 57.662069,22.4752334 59.0490671,21.3045658 L80.2759248,2.65461056 C83.9853287,-0.629787191 89.5418994,-0.698070701 93.3308935,2.49418084 L115.720867,21.2243509 C117.320514,22.5881211 117.904229,24.8023516 117.184781,26.777481 C116.465334,28.7526104 114.594242,30.0726692 112.492218,30.0880931 C111.314421,30.0896881 110.174126,29.6740664 109.273597,28.9149508 L92.4385031,14.8272158 L92.4385031,73.7751119 L159.29759,73.7751119 L139.414331,57.6118174 C138.022627,56.4816171 137.339593,54.6948034 137.622523,52.9244518 C137.905453,51.1541001 139.111362,49.669169 140.785997,49.0290176 C142.460631,48.3888662 144.349574,48.6907487 145.741278,49.820949 L171.149336,70.4863026 C173.218763,72.1532673 174.533435,74.5803549 174.799112,77.2243509" id="Path"></path> </g> </g> </svg>'},797:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="137px" viewBox="0 0 175 137" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>funnel </title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="funnel-" fill="#5067A2" fill-rule="nonzero"> <path d="M116.331467,108.325366 L60.5285591,108.325366 C58.9291301,108.325102 57.4459378,109.160985 56.6178211,110.52934 C55.7897045,111.897695 55.7371711,113.5994 56.4793063,115.016231 L66.3876358,133.863994 C67.1750739,135.367321 68.7306799,136.310539 70.4277481,136.313655 L106.432278,136.313655 C108.129346,136.310539 109.684952,135.367321 110.47239,133.863994 L120.380719,115.016231 C121.122854,113.5994 121.070321,111.897695 120.242204,110.52934 C119.414088,109.160985 117.930896,108.325102 116.331467,108.325366 L116.331467,108.325366 Z M134.968998,71.0137414 L41.9001683,71.0137414 C40.2925309,71.0025161 38.7981975,71.8401445 37.9688482,73.2173896 C37.139499,74.5946346 37.098146,76.3072185 37.8600561,77.722887 L47.8415098,96.5706503 C48.6348072,98.0648166 50.1899261,98.9971843 51.881622,98.9928896 L125.024106,98.9928896 C126.716211,98.9981743 128.270437,98.0607046 129.055078,96.5615098 L139.00911,77.7137465 C139.754942,76.2976526 139.705659,74.5945859 138.879188,73.2239903 C138.052717,71.8533948 136.569493,71.014997 134.968998,71.0137414 L134.968998,71.0137414 Z M153.63395,35.5759245 L23.2352156,35.5759245 C21.6347203,35.5771801 20.151496,36.4155778 19.325025,37.7861734 C18.498554,39.156769 18.4492717,40.8598357 19.1951033,42.2759296 L29.1491354,61.1145524 C29.9359394,62.6172637 31.4930184,63.5578521 33.1892477,63.5550727 L143.70734,63.5550727 C145.402425,63.5537423 146.957543,62.6143387 147.747452,61.1145524 L157.674063,42.266789 C158.415446,40.8514003 158.363824,39.1515952 157.537917,37.7838041 C156.712011,36.4160129 155.231751,35.5788553 153.63395,35.5759245 L153.63395,35.5759245 Z M174.995358,4.69922974 C174.994253,5.44166711 174.81229,6.17265769 174.465208,6.82897225 L164.538597,25.6767355 C163.746223,27.1729824 162.191592,28.108575 160.498485,28.1081153 L14.4968732,28.1081153 C12.8031994,28.1106197 11.2475937,27.1744407 10.4567611,25.6767355 L0.530150516,6.82897225 C-0.215681017,5.41287837 -0.166398756,3.70981169 0.660072225,2.33921611 C1.48654321,0.96862053 2.96976742,0.130222778 4.57026264,0.1289671 L170.425096,0.1289671 C172.949182,0.1289671 174.995358,2.17514338 174.995358,4.69922974 L174.995358,4.69922974 Z" id="Shape"></path> </g> </g> </svg>'},822:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="100px" viewBox="0 0 175 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>gange</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="gange" fill="#5067A2" fill-rule="nonzero"> <path d="M143.698895,82.9089367 C142.437361,67.6655629 135.026556,53.5920156 123.171797,43.9267897 L135.7146,25.9137777 C153.409366,39.7333892 164.305583,60.4959162 165.625777,82.9089367 L143.698895,82.9089367 L143.698895,82.9089367 Z M115.601912,38.6960173 C112.342946,36.8541942 108.909619,35.339582 105.352176,34.174346 L107.654453,22.8655635 C107.981818,21.2534161 107.424245,19.5890834 106.191766,18.4995036 C104.959288,17.4099237 103.239147,17.0606298 101.679304,17.5831975 C100.119461,18.1057651 98.9568933,19.4208039 98.6295287,21.0329513 L96.4193432,31.8996968 C93.4676767,31.3974455 90.4804994,31.132603 87.4865101,31.1077136 C77.1817177,31.1042083 67.0761605,33.9468942 58.284434,39.3222365 L45.5021944,21.4934066 C70.6181595,5.43266895 102.701308,5.12868193 128.117087,20.7106326 L115.601912,38.6960173 L115.601912,38.6960173 Z M31.2649159,82.9089367 L9.34724295,82.9089367 C10.6455448,61.0475255 21.0636813,40.7358347 38.0612364,26.9267794 L50.843476,44.7464001 C39.5322634,54.3814577 32.493597,68.101229 31.2649159,82.9089367 L31.2649159,82.9089367 Z M87.4865101,0.0269797767 C39.2492112,0.0269797767 0,39.276191 0,87.5134899 C5.46353103e-08,90.0565144 2.06152873,92.118043 4.60455321,92.118043 L35.685287,92.118043 C38.2283115,92.118043 40.2898401,90.0565144 40.2898401,87.5134899 C40.315223,61.4580101 61.4310302,40.3422029 87.4865101,40.31682 C89.908505,40.31682 92.2384089,40.6759751 94.5683128,41.0351302 L86.9247546,78.6451205 C82.0531374,79.4923583 78.2774037,83.5443651 78.2774037,88.6646282 C78.2774037,94.3864333 82.9158433,99.0248728 88.6376484,99.0248728 C94.3594535,99.0248728 98.997893,94.3864333 98.997893,88.6646282 C98.997893,85.7361324 97.7546637,83.102328 95.793124,81.2236703 L103.501146,43.3005704 C121.633876,49.8942906 134.68318,67.1337376 134.68318,87.5134899 C134.68318,90.0565144 136.744709,92.118043 139.287733,92.118043 L170.368467,92.118043 C172.911491,92.118043 174.97302,90.0565144 174.97302,87.5134899 C174.97302,39.276191 135.723809,0.0269798756 87.4865101,0.0269797767 L87.4865101,0.0269797767 Z" id="Shape"></path> </g> </g> </svg>'},317:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="142px" viewBox="0 0 175 142" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>geo</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="geo" fill="#5067A2" fill-rule="nonzero"> <path d="M9.20332621,34.019885 L55.2181167,56.861627 L55.2181167,128.571076 L9.20332621,103.207724 L9.20332621,34.019885 Z M171.819596,50.2815119 L151.996424,43.1124076 C149.63126,42.3318353 147.074346,43.5747977 146.227189,45.9169373 C145.380032,48.2590769 146.550177,50.8501245 148.867418,51.7631882 L165.653614,57.8371405 L165.653614,131.138702 L119.638823,119.625801 L119.638823,87.4706656 C119.638823,84.9293389 117.578671,82.8691865 115.037344,82.8691865 C112.496018,82.8691865 110.435865,84.9293389 110.435865,87.4706656 L110.435865,119.644207 L64.4210748,131.41479 L64.4210748,58.2236647 L81.060023,51.7263763 C83.2914479,50.7138845 84.3410975,48.1328302 83.4496557,45.8503474 C82.5582139,43.5678645 80.037126,42.3813901 77.7101463,43.1492194 L61.2460542,49.5820871 L6.64490386,22.4793755 C5.21943693,21.7614379 3.52312776,21.8367966 2.16693957,22.6783095 C0.810751382,23.5198224 -0.00997312356,25.0062796 0.000368118324,26.6023007 L0.000368118324,105.913394 C0.000368118324,107.597535 0.91146097,109.134429 2.38393426,109.944289 L58.8072703,141.059491 C59.8287987,141.620871 61.0435892,141.795727 62.16635,141.49203 L115.046547,127.963681 L169.141535,141.501233 C170.516378,141.840666 171.970958,141.532118 173.089604,140.663763 C174.206625,139.788526 174.858383,138.44767 174.856572,137.028595 L174.856572,54.6069022 C174.855748,52.6695411 173.64154,50.9402146 171.819596,50.2815119 Z M115.037344,16.5986853 C121.13907,16.6012266 126.083435,21.5497125 126.080894,27.651438 C126.078353,33.7531634 121.129867,38.697529 115.028141,38.6949877 C108.926416,38.6924463 103.98205,33.7439604 103.984592,27.642235 C103.987133,21.5405096 108.935619,16.596144 115.037344,16.5986853 L115.037344,16.5986853 Z M99.5763747,54.7173377 C102.208421,58.3341002 105.00612,61.9140509 107.813022,65.199507 C108.806942,66.3866886 109.718035,67.4358258 110.491083,68.3285127 C111.04326,68.8806902 111.402176,69.2856204 111.558626,69.4512736 C112.438859,70.4713636 113.723372,71.0524431 115.07068,71.0400337 C116.417988,71.0276243 117.69158,70.4229833 118.552874,69.3868529 C118.72773,69.2211997 119.06824,68.8254725 119.555997,68.264092 C120.506081,67.2663872 121.406012,66.2220982 122.252463,65.1350863 C125.059366,61.8496302 127.866268,58.2788825 130.498314,54.6437141 C133.121157,51.0177486 135.412694,47.4470008 137.262488,44.0879211 C140.741206,37.8851274 142.646219,32.5382087 142.646219,28.1207888 C142.701436,12.5861956 130.314255,0.0425636812 115.028141,0.0425636812 C99.7604339,0.0425636812 87.42847,12.5861956 87.42847,28.1207888 C87.42847,32.5382087 89.3334823,37.9403451 92.8029975,44.1523418 C94.7172128,47.5114215 97.0087494,51.0729663 99.5763747,54.7173377 Z" id="Shape"></path> </g> </g> </svg>'},926:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="120px" viewBox="0 0 175 120" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>gl</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="gl" fill="#5067A2"> <path d="M170.394737,101.315789 L119.736842,101.315789 L119.736842,4.60526316 C119.736842,2.06315789 117.673684,0 115.131579,0 L105.921053,0 C103.378947,0 101.315789,2.06315789 101.315789,4.60526316 L101.315789,115.131579 C101.315789,117.673684 103.378947,119.736842 105.921053,119.736842 L170.394737,119.736842 C172.936842,119.736842 175,117.673684 175,115.131579 L175,105.921053 C175,103.378947 172.936842,101.315789 170.394737,101.315789" id="Fill-1"></path> <path d="M78.2894737,0 L4.60526316,0 C2.06315789,0 0,2.06315789 0,4.60526316 L0,115.131579 C0,117.673684 2.06315789,119.736842 4.60526316,119.736842 L78.2894737,119.736842 C80.8315789,119.736842 82.8947368,117.673684 82.8947368,115.131579 L82.8947368,59.8684211 C82.8947368,57.3263158 80.8315789,55.2631579 78.2894737,55.2631579 L41.4473684,55.2631579 C38.9052632,55.2631579 36.8421053,57.3263158 36.8421053,59.8684211 L36.8421053,69.0789474 C36.8421053,71.6210526 38.9052632,73.6842105 41.4473684,73.6842105 L64.4736842,73.6842105 L64.4736842,101.315789 L18.4210526,101.315789 L18.4210526,18.4210526 L64.4736842,18.4210526 L64.4736842,32.2368421 C64.4736842,34.7789474 66.5368421,36.8421053 69.0789474,36.8421053 L78.2894737,36.8421053 C80.8315789,36.8421053 82.8947368,34.7789474 82.8947368,32.2368421 L82.8947368,4.60526316 C82.8947368,2.06315789 80.8315789,0 78.2894737,0" id="Fill-3"></path> </g> </g> </svg>'},769:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="171px" height="146px" viewBox="0 0 171 146" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>graph</title> <desc>Created with Sketch.</desc> <defs> <polygon id="path-1" points="0.06 0 171 0 171 146 0.06 146"></polygon> </defs> <g id="graph" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <mask id="mask-2" fill="white"> <use xlink:href="#path-1"></use> </mask> <g id="Clip-2"></g> <path d="M171,100 C171,106.075 166.075,111 160,111 C154.016,111 149.158,106.219 149.014,100.27 L114.105,83.503 C111.564,86.693 108.179,89.18 104.282,90.616 L108.698,124.651 C112.951,126.172 116,130.225 116,135 C116,141.075 111.075,146 105,146 C98.925,146 94,141.075 94,135 C94,131.233 95.896,127.912 98.781,125.93 L94.364,91.896 C82.94,90.82 74,81.206 74,69.5 C74,69.479 74.001,69.46 74.001,69.439 L53.719,64.759 C50.642,70.269 44.76,74 38,74 C36.07,74 34.215,73.689 32.472,73.127 L20.624,90.679 C21.499,92.256 22,94.068 22,96 C22,102.075 17.075,107 11,107 C4.925,107 0,102.075 0,96 C0,89.925 4.925,85 11,85 C11.452,85 11.895,85.035 12.332,85.089 L24.184,67.531 C21.574,64.407 20,60.389 20,56 C20,48.496 24.594,42.07 31.121,39.368 L29.111,21.279 C24.958,19.707 22,15.704 22,11 C22,4.925 26.925,0 33,0 C39.075,0 44,4.925 44,11 C44,14.838 42.031,18.214 39.051,20.182 L41.061,38.279 C49.223,39.681 55.49,46.564 55.95,55.011 L76.245,59.694 C79.889,52.181 87.589,47 96.5,47 C100.902,47 105.006,48.269 108.475,50.455 L131.538,27.391 C131.192,26.322 131,25.184 131,24 C131,17.925 135.925,13 142,13 C148.075,13 153,17.925 153,24 C153,30.075 148.075,35 142,35 C140.816,35 139.678,34.808 138.609,34.461 L115.546,57.525 C117.73,60.994 119,65.098 119,69.5 C119,71.216 118.802,72.884 118.438,74.49 L153.345,91.257 C155.193,89.847 157.495,89 160,89 C166.075,89 171,93.925 171,100" id="Fill-1" fill="#4F608A" mask="url(#mask-2)"></path> </g> </svg>'},781:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="165px" height="137px" viewBox="0 0 165 137" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>heatmap</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="heatmap" transform="translate(-0.500000, -0.474277)" fill-rule="nonzero"> <path d="M44.5999999,89.4742765 L5.40000005,89.4742765 C2.6938048,89.4742765 0.500000074,87.2916647 0.5,84.5992766 L0.5,55.3492765 C0.500000074,52.6568883 2.6938048,50.4742765 5.40000005,50.4742765 L44.5999999,50.4742765 C47.3061952,50.4742765 49.4999999,52.6568883 49.5,55.3492765 L49.5,84.5992766 C49.4999999,87.2916647 47.3061952,89.4742765 44.5999999,89.4742765" id="Path" fill="#687DB0"></path> <path d="M102.6,89.4742765 L63.3999999,89.4742765 C60.6938047,89.4742765 58.5000001,87.2916647 58.5,84.5992766 L58.5,55.3492765 C58.5000001,52.6568884 60.6938047,50.4742766 63.3999999,50.4742765 L102.6,50.4742765 C105.306195,50.4742765 107.5,52.6568883 107.5,55.3492765 L107.5,84.5992766 C107.5,87.2916647 105.306195,89.4742765 102.6,89.4742765" id="Path" fill="#8497C0"></path> <path d="M160.6,89.4742765 L121.4,89.4742765 C118.693805,89.4742765 116.5,87.2916647 116.5,84.5992766 L116.5,55.3492765 C116.5,52.6568884 118.693805,50.4742766 121.4,50.4742765 L160.6,50.4742765 C163.306195,50.4742766 165.5,52.6568884 165.5,55.3492765 L165.5,84.5992766 C165.5,87.2916647 163.306195,89.4742765 160.6,89.4742765" id="Path" fill="#A7B4D1"></path> <path d="M44.5999999,137.474277 L5.40000005,137.474277 C2.69380475,137.474277 0.5,135.291665 0.5,132.599276 L0.5,103.349277 C0.5,100.656888 2.69380475,98.4742765 5.40000005,98.4742765 L44.5999999,98.4742765 C45.8995608,98.4742765 47.1458949,98.9878911 48.0648232,99.902131 C48.9837515,100.816371 49.5,102.056346 49.5,103.349277 L49.5,132.599276 C49.5,135.291665 47.3061953,137.474277 44.5999999,137.474277" id="Path" fill="#8497C0"></path> <path d="M102.6,137.474277 L63.3999999,137.474277 C60.6938047,137.474276 58.5,135.291665 58.5,132.599276 L58.5,103.349277 C58.5,100.656888 60.6938047,98.4742766 63.3999999,98.4742765 L102.6,98.4742765 C105.306195,98.4742765 107.5,100.656888 107.5,103.349277 L107.5,132.599276 C107.5,135.291665 105.306195,137.474277 102.6,137.474277" id="Path" fill="#A7B4D1"></path> <path d="M160.6,137.474277 L121.4,137.474277 C118.693805,137.474276 116.5,135.291665 116.5,132.599276 L116.5,103.349277 C116.5,100.656888 118.693805,98.4742766 121.4,98.4742765 L160.6,98.4742765 C163.306195,98.4742766 165.5,100.656888 165.5,103.349277 L165.5,132.599276 C165.5,135.291665 163.306195,137.474276 160.6,137.474277" id="Path" fill="#CDD5E3"></path> <path d="M5.40000005,0.474276527 L44.5999999,0.474276527 C47.3061953,0.474276527 49.5,2.65688839 49.5,5.34927658 L49.5,34.5992765 C49.5,37.2916647 47.3061953,39.4742765 44.5999999,39.4742765 L5.40000005,39.4742765 C2.69380475,39.4742765 0.5,37.2916647 0.5,34.5992765 L0.5,5.34927658 C0.5,2.65688839 2.69380475,0.474276527 5.40000005,0.474276527" id="Path" fill="#5067A2"></path> <path d="M102.6,39.4742765 L63.3999999,39.4742765 C60.6938047,39.4742765 58.5,37.2916646 58.5,34.5992765 L58.5,5.34927658 C58.5,2.65688845 60.6938047,0.474276601 63.3999999,0.474276527 L102.6,0.474276527 C105.306195,0.474276527 107.5,2.65688839 107.5,5.34927658 L107.5,34.5992765 C107.5,37.2916647 105.306195,39.4742765 102.6,39.4742765" id="Path" fill="#687DB0"></path> <path d="M160.6,39.4742765 L121.4,39.4742765 C118.693805,39.4742765 116.5,37.2916646 116.5,34.5992765 L116.5,5.34927658 C116.5,2.65688845 118.693805,0.474276601 121.4,0.474276527 L160.6,0.474276527 C163.306195,0.474276601 165.5,2.65688845 165.5,5.34927658 L165.5,34.5992765 C165.5,37.2916646 163.306195,39.4742765 160.6,39.4742765" id="Path" fill="#8497C0"></path> </g> </g> </svg>'},69:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="138px" viewBox="0 0 175 138" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>line</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="line" fill="#5067A2" fill-rule="nonzero"> <path d="M25.2739189,111.655778 C26.7855309,111.657407 28.2007506,110.913642 29.0567232,109.667735 L69.3606163,51.4346379 L108.642876,94.5825372 C109.596174,95.6275458 110.977093,96.1760957 112.387618,96.0700817 C113.798143,95.9640677 115.081554,95.2152689 115.86794,94.0395069 L167.15209,17.582681 C168.126301,16.2187314 168.281888,14.4329668 167.558237,12.9210891 C166.834585,11.4092114 165.346152,10.4103472 163.672804,10.3136363 C161.999456,10.2169253 160.40586,11.0376639 159.512851,12.4561069 L111.496086,84.0348638 L72.2782537,40.9605957 C71.3313898,39.926718 69.968454,39.3754562 68.5690807,39.4603596 C67.1694417,39.5586882 65.8899144,40.2864616 65.0900052,41.4391988 L21.4911146,104.439918 C20.5200574,105.846972 20.4090348,107.676368 21.202809,109.190526 C21.9965833,110.704685 23.5643138,111.65402 25.2739189,111.655778" id="Path"></path> <path d="M170.272214,127.854648 L9.20390349,127.854648 L9.20390349,5.00465881 C9.20390349,2.46307104 7.14353951,0.402707066 4.60195174,0.402707066 C2.06036398,0.402707066 3.11254732e-16,2.46307104 0,5.00465881 L0,132.4566 C3.11254728e-16,134.998188 2.06036395,137.058552 4.60195168,137.058552 L170.272214,137.058552 C172.813801,137.058552 174.874165,134.998188 174.874165,132.4566 C174.874165,129.915012 172.813801,129.257355 170.272214,129.257355" id="Path"></path> </g> </g> </svg>'},276:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="163px" height="137px" viewBox="0 0 163 137" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>lines</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="lines" fill="#5067A2" fill-rule="nonzero"> <path d="M118.024118,118.8 C120.522388,118.8 122.566427,120.8475 122.566427,123.35 C122.566427,125.8525 120.522388,127.9 118.024118,127.9 C115.517543,127.894993 113.486807,125.860819 113.481809,123.35 C113.481809,120.8475 115.525848,118.8 118.024118,118.8 Z M142.434485,46 L64.9673569,46 C62.4587091,46 60.4250482,48.0371044 60.4250482,50.55 C60.4250482,53.0628956 62.4587091,55.1 64.9673569,55.1 L142.034762,55.0909 C149.519307,56.1087027 154.7743,62.9956941 153.790257,70.4972 C152.963556,76.6852 148.066948,81.5264 142.434485,82.2544 L20.6642736,82.2726 C14.6272756,82.8301001 9.06337697,85.7822231 5.21133949,90.4717 C0.0521031846,96.7506172 -1.39663076,105.298969 1.40493936,112.931618 C4.20650947,120.564268 10.8382585,126.136619 18.8291809,127.5724 L105.232977,127.8909 C107.143393,133.33221 112.265894,136.980155 118.024118,137 C125.537097,137 131.651044,130.8757 131.651044,123.35 C131.651044,115.8243 125.537097,109.7 118.024118,109.7 C112.110032,109.7 107.113492,113.5129 105.232977,118.8 L21.8634431,118.8728 L20.4099043,118.618 C14.3307333,117.521702 9.72082575,112.509885 9.12680957,106.3512 C8.77445503,102.712306 9.88625731,99.0830035 12.2155795,96.2684 C14.5594108,93.4383 17.8571269,91.6911 21.0912506,91.3544 L142.988646,91.3271 C153.280464,90.058092 161.421536,81.9929721 162.802197,71.6984 C164.446513,59.2314 155.679857,47.729 142.434485,46 Z" id="Shape"></path> <path d="M31.9999101,18.2496933 C36.9704563,18.2496933 40.9998801,22.3350263 40.9998801,27.37454 C40.9998801,32.4140537 36.9704563,36.4993867 31.9999101,36.4993867 C27.0293639,36.4993867 22.9999401,32.4140537 22.9999401,27.37454 C22.9999401,22.3350263 27.0293639,18.2496933 31.9999101,18.2496933 Z M16.8799604,56.2181803 C19.4539519,59.9411177 22.1809428,63.6184309 24.9259336,66.9946242 C25.9069304,68.2173537 26.7979274,69.3032104 27.5539249,70.2156951 C28.1029231,70.7814356 28.435922,71.1920537 28.5979214,71.3654258 C30.4699152,73.555389 33.5839048,73.555389 35.4378986,71.3015518 C35.617898,71.1373046 35.932897,70.7266865 36.4188954,70.1518212 C37.2648925,69.2393365 38.1288897,68.1443549 39.0558866,66.9307503 C41.8008774,63.554557 44.5368683,59.8863687 47.1108598,56.1451815 C49.6758512,52.4131192 51.9258437,48.7449309 53.7348377,45.2957388 C57.1368264,38.917471 58.9998202,33.4243133 58.9998202,28.8710148 C59.05382,12.911658 46.9398603,0 31.9909101,0 C17.0509599,0 5,12.911658 5,28.8710148 C5,33.4243133 6.8629938,38.9722201 10.2559825,45.3596128 C12.1279763,48.8088048 14.3689688,52.4678683 16.8799604,56.2181803 Z" id="Shape"></path> </g> </g> </svg>'},831:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="142px" viewBox="0 0 175 142" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>geo</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="geo" fill="#5067A2" fill-rule="nonzero"> <path d="M9.20332621,34.019885 L55.2181167,56.861627 L55.2181167,128.571076 L9.20332621,103.207724 L9.20332621,34.019885 Z M171.819596,50.2815119 L151.996424,43.1124076 C149.63126,42.3318353 147.074346,43.5747977 146.227189,45.9169373 C145.380032,48.2590769 146.550177,50.8501245 148.867418,51.7631882 L165.653614,57.8371405 L165.653614,131.138702 L119.638823,119.625801 L119.638823,87.4706656 C119.638823,84.9293389 117.578671,82.8691865 115.037344,82.8691865 C112.496018,82.8691865 110.435865,84.9293389 110.435865,87.4706656 L110.435865,119.644207 L64.4210748,131.41479 L64.4210748,58.2236647 L81.060023,51.7263763 C83.2914479,50.7138845 84.3410975,48.1328302 83.4496557,45.8503474 C82.5582139,43.5678645 80.037126,42.3813901 77.7101463,43.1492194 L61.2460542,49.5820871 L6.64490386,22.4793755 C5.21943693,21.7614379 3.52312776,21.8367966 2.16693957,22.6783095 C0.810751382,23.5198224 -0.00997312356,25.0062796 0.000368118324,26.6023007 L0.000368118324,105.913394 C0.000368118324,107.597535 0.91146097,109.134429 2.38393426,109.944289 L58.8072703,141.059491 C59.8287987,141.620871 61.0435892,141.795727 62.16635,141.49203 L115.046547,127.963681 L169.141535,141.501233 C170.516378,141.840666 171.970958,141.532118 173.089604,140.663763 C174.206625,139.788526 174.858383,138.44767 174.856572,137.028595 L174.856572,54.6069022 C174.855748,52.6695411 173.64154,50.9402146 171.819596,50.2815119 Z M115.037344,16.5986853 C121.13907,16.6012266 126.083435,21.5497125 126.080894,27.651438 C126.078353,33.7531634 121.129867,38.697529 115.028141,38.6949877 C108.926416,38.6924463 103.98205,33.7439604 103.984592,27.642235 C103.987133,21.5405096 108.935619,16.596144 115.037344,16.5986853 L115.037344,16.5986853 Z M99.5763747,54.7173377 C102.208421,58.3341002 105.00612,61.9140509 107.813022,65.199507 C108.806942,66.3866886 109.718035,67.4358258 110.491083,68.3285127 C111.04326,68.8806902 111.402176,69.2856204 111.558626,69.4512736 C112.438859,70.4713636 113.723372,71.0524431 115.07068,71.0400337 C116.417988,71.0276243 117.69158,70.4229833 118.552874,69.3868529 C118.72773,69.2211997 119.06824,68.8254725 119.555997,68.264092 C120.506081,67.2663872 121.406012,66.2220982 122.252463,65.1350863 C125.059366,61.8496302 127.866268,58.2788825 130.498314,54.6437141 C133.121157,51.0177486 135.412694,47.4470008 137.262488,44.0879211 C140.741206,37.8851274 142.646219,32.5382087 142.646219,28.1207888 C142.701436,12.5861956 130.314255,0.0425636812 115.028141,0.0425636812 C99.7604339,0.0425636812 87.42847,12.5861956 87.42847,28.1207888 C87.42847,32.5382087 89.3334823,37.9403451 92.8029975,44.1523418 C94.7172128,47.5114215 97.0087494,51.0729663 99.5763747,54.7173377 Z" id="Shape"></path> </g> </g> </svg>'},582:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="148px" viewBox="0 0 175 148" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>parallel</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="parallel" fill="#5067A2" fill-rule="nonzero"> <path d="M119.966527,90.2642567 L119.966527,71.4595035 L164.953975,91.1040224 L164.953975,117.16675 L119.966527,90.2642567 Z M99.5422259,68.8202399 L109.969317,68.8202399 L109.969317,80.2370544 L99.5422259,68.8202399 Z M64.9818688,58.8230293 L64.9818688,45.8666444 L76.8485579,58.8230293 L64.9818688,58.8230293 L64.9818688,58.8230293 Z M9.99721065,95.6627504 L9.99721065,37.9888424 L54.9846583,37.9888424 L54.9846583,61.3523236 L9.99721065,95.6627504 Z M170,2.04051565e-11 C167.238576,2.04245402e-11 165,2.23857623 165,4.99999995 L165,80.2194419 L120,60.5694419 L120,5.00139509 C120,2.23997133 117.761424,0.00139506489 115,0.00139506489 C112.238576,0.00139506489 110,2.23997133 110,5.00139509 L110,58.8394419 L90.42,58.8394419 L64.9999999,31.059442 L64.9999999,5.00139509 C64.9999999,2.23997137 62.7614237,0.00139513813 60,0.00139513813 C57.2385763,0.00139513813 55,2.23997137 55,5.00139509 L55,27.999442 L10,27.999442 L10,4.99999995 C10,2.23857619 7.76142378,-7.3221713e-08 5.00000002,-7.32217131e-08 C2.23857626,-7.32217133e-08 3.38176877e-16,2.23857619 0,4.99999995 L0,142.999442 C3.38176877e-16,145.760866 2.23857626,147.999442 5.00000002,147.999442 C7.76142378,147.999442 10,145.760866 10,142.999442 L10,108.249442 L55,73.9494419 L55,142.999442 C55,145.760866 57.2385763,147.999442 60,147.999442 C62.7614237,147.999442 64.9999999,145.760866 64.9999999,142.999442 L64.9999999,68.839442 L86.01,68.839442 L110,95.0694419 L110,142.999442 C110,145.760866 112.238576,147.999442 115,147.999442 C117.761424,147.999442 120,145.760866 120,142.999442 L120,101.939442 L165,128.839442 L165,142.999442 C165,145.760866 167.238576,147.999442 170,147.999442 C172.761424,147.999442 175,145.760866 175,142.999442 L175,4.99999995 C175,3.67391749 174.473216,2.40214791 173.535534,1.46446603 C172.597852,0.526784141 171.326082,-3.88296707e-08 170,2.04051565e-11 Z" id="Shape"></path> </g> </g> </svg>'},689:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="141px" viewBox="0 0 175 141" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>pictorialBar</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="pictorialBar" fill="#5067A2" fill-rule="nonzero"> <path d="M165.182447,113.123194 C161.75364,113.169204 158.605604,115.027549 156.908673,118.007359 L62.4782339,118.007359 C59.7807842,118.007359 57.5940692,120.194074 57.5940692,122.891524 C57.5940692,125.588973 59.7807842,127.775688 62.4782339,127.775688 L156.908673,127.775688 C158.605604,130.755498 161.75364,132.613843 165.182447,132.659853 C170.576885,132.6592 174.949595,128.285961 174.949595,122.891524 C174.949595,117.497086 170.576885,113.123847 165.182447,113.123194 L165.182447,113.123194 Z M165.182447,78.9340419 C161.75364,78.980052 158.605603,80.8383969 156.908673,83.8182066 L77.2674843,83.8182066 C74.5700347,83.8182066 72.3833197,86.0049216 72.3833197,88.7023712 C72.3833197,91.3998208 74.5700347,93.5865358 77.2674843,93.5865358 L156.908673,93.5865358 C158.605603,96.5663455 161.75364,98.4246904 165.182447,98.4707005 C170.577347,98.4707005 174.950777,94.0972705 174.950777,88.7023712 C174.950777,83.3074719 170.577347,78.9340419 165.182447,78.9340419 L165.182447,78.9340419 Z M165.182447,44.7448896 C170.407595,44.9786234 174.523583,49.2828462 174.523583,54.5132188 C174.523583,59.7435915 170.407595,64.0478142 165.182447,64.2815481 C161.75364,64.235538 158.605604,62.3771932 156.908673,59.3973835 L77.2674843,59.3973835 C74.5700346,59.3973835 72.3833196,57.2106685 72.3833196,54.5132188 C72.3833196,51.8157692 74.5700346,49.6290542 77.2674843,49.6290542 L156.908673,49.6290542 C158.605604,46.6492445 161.75364,44.7908997 165.182447,44.7448896 Z M62.6149904,20.3240665 C62.6149904,19.0287054 63.1295706,17.7863991 64.0455291,16.8704405 C64.9614877,15.954482 66.2037941,15.4399018 67.4991551,15.4399019 L156.908673,15.4399019 C158.605604,12.4600922 161.75364,10.6017474 165.182447,10.5557373 C170.407595,10.7894711 174.523583,15.0936938 174.523583,20.3240665 C174.523583,25.5544392 170.407595,29.8586619 165.182447,30.0923957 C161.75364,30.0463857 158.605604,28.1880408 156.908673,25.2082312 L67.4991551,25.2082312 C66.2037941,25.2082312 64.9614877,24.6936511 64.0455291,23.7776925 C63.1295705,22.8617339 62.6149904,21.6194275 62.6149904,20.3240665 Z M23.5416735,29.3240665 C31.6340224,29.3240665 38.1941674,22.7639215 38.1941674,14.6715726 C38.1941674,6.57922368 31.6340224,0.0190787204 23.5416735,0.0190787204 C15.4493246,0.0190787204 8.88917966,6.57922368 8.88917966,14.6715726 C8.88917966,22.7639215 15.4493246,29.3240665 23.5416735,29.3240665 Z M34.0523957,34.2082312 L13.0211829,34.2082312 C10.6337153,34.2093302 8.59694107,35.9362503 8.20539657,38.2913927 L0.0683783524,87.133039 C-0.166957522,88.5485838 0.232108973,89.996 1.15960938,91.0909397 C2.08710979,92.1858793 3.44919091,92.8175461 4.88416457,92.8182066 L8.88917966,92.8182066 L9.0426883,136.115835 C9.0426883,138.813285 11.2294033,141 13.9268529,141 L33.4635113,141 C34.7588723,141 36.0011787,140.48542 36.9171373,139.569461 C37.8330959,138.653503 38.347676,137.411196 38.347676,136.115835 L38.1941674,92.8182066 L42.189414,92.8182066 C43.6255482,92.8209447 44.9898051,92.1902296 45.9180572,91.0944026 C46.8463094,89.9985755 47.2440794,88.5491696 47.0052003,87.133039 L38.8681821,38.2913927 C38.4766376,35.9362503 36.4398634,34.2093302 34.0523957,34.2082312 Z" id="Shape"></path> </g> </g> </svg>'},931:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="144px" height="152px" viewBox="0 0 144 152" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>pie (2)</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="pie-(2)" transform="translate(0.000000, -0.612903)" fill="#5067A2" fill-rule="nonzero"> <path d="M72.1778824,12.9606446 L72.1778824,73.6462877 C72.1779317,75.129331 72.9386663,76.5065116 74.1881954,77.2856176 C75.4377246,78.0647237 76.9977039,78.1345538 78.3105882,77.4701504 L128.354824,52.1402676 L132.666353,49.9503148 C134.757503,48.8920984 137.302156,49.7461658 138.350118,51.857969 L138.468706,52.1060495 L138.782118,52.8930638 C140.942118,58.6416896 144,65.8873535 144,83.8518095 C144,116.316148 115.123765,152.612903 73.2282353,152.612903 C31.3242354,152.612903 0,119.994584 0,80.8406245 C0,44.5353146 27.216,13.7391044 62.2588236,9.22232682 C64.122353,8.98280072 65.9265883,8.80315611 67.6715294,8.69194766 C68.8395088,8.61630135 69.986418,9.03213213 70.8400527,9.84074781 C71.6936873,10.6493635 72.1779411,11.7786714 72.1778824,12.9606446 Z M90.0254118,0.659269609 C88.9814749,0.488081123 87.9163292,0.795987208 87.1201941,1.49909291 C86.324059,2.20219861 85.8798887,3.22724309 85.9087059,4.29493319 L85.9087059,54.6039644 C85.9087059,56.9393437 87.6028236,57.8717845 89.5680001,56.7511446 L133.149176,31.9088684 C134.092985,31.4117209 134.762111,30.50855 134.968019,29.4538349 C135.173928,28.3991197 134.894328,27.3070442 134.208,26.4853136 C134.208,26.4853136 133.538824,25.5357637 132.446118,24.3381334 C127.296,18.6921614 122.832,14.7399812 116.860235,10.9417819 C109.345997,6.07770841 100.978781,2.71218494 92.2108235,1.0271132 C89.9745882,0.599388123 90.0254118,0.659269609 90.0254118,0.659269609 L90.0254118,0.659269609 Z" id="Shape"></path> </g> </g> </svg>'},702:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="151px" height="170px" viewBox="0 0 151 170" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>radar</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="radar" transform="translate(0.500000, 0.000000)" fill="#5067A2" fill-rule="nonzero"> <path d="M79.573911,32.0195055 C79.7511468,32.0807796 79.9252225,32.1507623 80.0954971,32.2291958 L126.376239,53.5077701 C128.225278,54.3572545 129.374745,56.2354539 129.285085,58.2607506 L126.927916,110.733256 C126.832633,112.851954 125.405699,114.680595 123.367088,115.296516 L76.444394,129.315811 C75.5054275,129.595861 74.5046062,129.595861 73.5656397,129.315811 L32.4706683,117.053921 C30.8367372,116.566659 29.5635821,115.286115 29.0909814,113.654618 C28.6183807,112.023122 29.0111288,110.264354 30.133561,108.985836 L59.2822032,75.635091 C59.7218624,75.142978 60.0532763,74.5647698 60.2551619,73.937598 L73.2246026,35.1848307 C74.1062345,32.570839 76.9431645,31.1565423 79.573911,32.0195055 L79.573911,32.0195055 Z M139.476076,121.926724 L75.0000016,158.991984 L10.5239274,121.926724 L10.5239274,47.816176 L75.0000016,10.7509165 L139.476076,47.816176 L139.476076,121.926724 Z M146.998953,40.6068232 L77.5076273,0.665810956 C75.9548023,-0.221936985 74.0452007,-0.221936985 72.4923757,0.665810956 L3.00105014,40.6068232 C1.44784731,41.4971353 0.491395456,43.1462367 0.493424274,44.9304378 L0.493424274,124.812462 C0.493424274,126.599823 1.44632208,128.247389 3.00105014,129.136077 L72.4923757,169.077089 C74.047355,169.95676 75.9526481,169.95676 77.5076273,169.077089 L146.998953,129.136077 C148.550638,128.244253 149.506533,126.596111 149.506579,124.812462 L149.506579,44.9304378 C149.506533,43.1467894 148.550638,41.4986473 146.998953,40.6068232 L146.998953,40.6068232 Z" id="Shape"></path> </g> </g> </svg>'},989:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="167px" height="162px" viewBox="0 0 167 162" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>rich</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="rich" fill="#5067A2" fill-rule="nonzero"> <path d="M5.52634288,101.24857 L96.0005147,101.24857 C98.7764873,101.24857 101.026858,98.9820436 101.026858,96.1861415 C101.026858,93.3902395 98.7764873,91.123713 96.0005147,91.123713 L5.52634288,91.123713 C2.75037036,91.123713 0.5,93.3902395 0.5,96.1861415 C0.5,98.9820436 2.75037036,101.24857 5.52634288,101.24857 Z M75.8951432,121.498284 L5.52634288,121.498284 C2.75037036,121.498284 0.5,123.76481 0.5,126.560713 C0.5,129.356615 2.75037036,131.623141 5.52634288,131.623141 L75.8951432,131.623141 C78.6711157,131.623141 80.9214861,129.356615 80.9214861,126.560713 C80.9214861,123.76481 78.6711157,121.498284 75.8951432,121.498284 Z M146.394628,92.0653247 L128.923061,116.435856 L146.394628,116.435856 L146.394628,92.0653247 Z M166.5,60.749142 L166.5,151.872855 C166.5,157.464659 161.999259,161.997712 156.447314,161.997712 C150.895369,161.997712 146.394628,157.464659 146.394628,151.872855 L146.394628,136.68557 L114.406982,136.68557 L99.2575849,157.806021 C96.0041451,162.338178 89.7188607,163.355849 85.2190093,160.079052 C80.7191578,156.802254 79.7087415,150.471846 82.9621813,145.939689 L148.304639,54.8261007 C148.455429,54.6033538 148.706746,54.4919804 148.867589,54.2894832 C149.318111,53.7697312 149.823755,53.3011987 150.375492,52.892253 C150.857637,52.4854402 151.379728,52.1292264 151.933658,51.829143 C152.481136,51.5631055 153.053631,51.3528145 153.642615,51.2014019 C154.31205,50.9842108 155.003114,50.8416105 155.703415,50.7761579 C155.954733,50.7559082 156.185944,50.624285 156.447314,50.624285 C156.819264,50.624285 157.130897,50.7964076 157.492794,50.836907 C158.850886,50.9717079 160.164137,51.3999382 161.342972,52.0923893 C161.674711,52.2746367 162.036608,52.3151361 162.338188,52.537883 C162.559347,52.7100056 162.659874,52.9428773 162.87098,53.1251247 C163.403773,53.5807433 163.836038,54.0869861 164.268304,54.6337284 C164.650306,55.1399712 165.022255,55.6259644 165.30373,56.1929564 C165.585206,56.7498235 165.766154,57.3370652 165.947102,57.9546815 C166.138103,58.6330469 166.298946,59.2709129 166.34921,59.969528 C166.369315,60.2428992 166.5,60.4757709 166.5,60.749142 L166.5,60.749142 Z M55.7897717,151.872855 L5.52634288,151.872855 C2.75037036,151.872855 0.5,154.139381 0.5,156.935284 C0.5,159.731186 2.75037036,161.997712 5.52634288,161.997712 L55.7897717,161.997712 C58.5657442,161.997712 60.8161146,159.731186 60.8161146,156.935284 C60.8161146,154.139381 58.5657442,151.872855 55.7897717,151.872855 Z M86.3887335,40.499428 L161.100608,40.499428 C164.04791,40.499428 166.437171,38.2329016 166.437171,35.4369995 C166.437171,32.6410974 164.04791,30.374571 161.100608,30.374571 L86.3887335,30.374571 C83.4414314,30.374571 81.052171,32.6410974 81.052171,35.4369995 C81.052171,38.2329016 83.4414314,40.499428 86.3887335,40.499428 Z M86.3887335,10.124857 L161.100608,10.124857 C164.04791,10.124857 166.437171,7.85833056 166.437171,5.0624285 C166.437171,2.26652644 164.04791,1.71199625e-16 161.100608,0 L86.3887335,0 C83.4414314,-1.71199625e-16 81.052171,2.26652644 81.052171,5.0624285 C81.052171,7.85833056 83.4414314,10.124857 86.3887335,10.124857 Z M5.6570278,70.873999 L60.9467995,70.873999 C63.722772,70.873999 65.9731424,68.6074726 65.9731424,65.8115705 L65.9731424,5.0624285 C65.9731424,2.26652644 63.722772,1.71199625e-16 60.9467995,0 L5.6570278,0 C2.88105528,-1.71199625e-16 0.630684915,2.26652644 0.630684915,5.0624285 L0.630684915,65.8115705 C0.630684915,68.6074726 2.88105528,70.873999 5.6570278,70.873999 Z M81.052171,65.8115705 C81.052171,63.0156685 83.3025414,60.749142 86.0785139,60.749142 L116.236571,60.749142 C119.012544,60.749142 121.262914,63.0156685 121.262914,65.8115705 C121.262914,68.6074726 119.012544,70.873999 116.236571,70.873999 L86.0785139,70.873999 C83.3025414,70.873999 81.052171,68.6074726 81.052171,65.8115705 Z" id="Shape"></path> </g> </g> </svg>'},827:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="139px" viewBox="0 0 175 139" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>sankey</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="sankey" fill-rule="nonzero"> <path d="M4.60195168,138.058552 C2.06036395,138.058552 3.11254728e-16,135.998188 0,133.4566 L0,115.048793 C-3.11254732e-16,112.507205 2.06036398,110.446841 4.60195174,110.446841 C7.14353951,110.446841 9.20390349,112.507205 9.20390349,115.048793 L9.20390349,133.4566 C9.20390349,134.677113 8.71905638,135.847638 7.856023,136.710671 C6.99298962,137.573705 5.82246517,138.058552 4.60195168,138.058552 M4.60195168,106.820503 C2.06036395,106.820503 3.11254728e-16,104.760139 0,102.218552 L0,4.60195168 C-3.11254732e-16,2.06036391 2.06036398,-6.74114049e-08 4.60195174,-6.74114054e-08 C7.14353951,-6.74114058e-08 9.20390349,2.06036391 9.20390349,4.60195168 L9.20390349,102.218552 C9.20390349,103.439065 8.71905638,104.60959 7.856023,105.472623 C6.99298962,106.335656 5.82246517,106.820503 4.60195168,106.820503" id="Shape" fill="#5067A2"></path> <path d="M4.60195168,106.820503 C2.06036395,106.820503 3.11254728e-16,104.760139 0,102.218552 L0,4.60195168 C-3.11254732e-16,2.06036391 2.06036398,-6.74114049e-08 4.60195174,-6.74114054e-08 C7.14353951,-6.74114058e-08 9.20390349,2.06036391 9.20390349,4.60195168 L9.20390349,102.218552 C9.20390349,103.439065 8.71905638,104.60959 7.856023,105.472623 C6.99298962,106.335656 5.82246517,106.820503 4.60195168,106.820503" id="Path" fill="#5067A2"></path> <path d="M87.4370826,64.4273241 C86.2165692,64.4273241 85.0460447,63.942477 84.1830114,63.0794436 C83.319978,62.2164103 82.8351309,61.0458858 82.835131,59.8253723 L82.835131,4.60195168 C82.835131,2.06036391 84.8954949,-6.74113054e-08 87.4370827,-6.74113059e-08 C89.9786705,-6.74113063e-08 92.0390345,2.06036391 92.0390345,4.60195168 L92.0390345,59.8253723 C92.0390345,61.0458858 91.5541874,62.2164103 90.691154,63.0794437 C89.8281206,63.9424771 88.6575962,64.4273242 87.4370826,64.4273241 M170.272214,38.2054031 C167.730626,38.2054031 165.670262,36.1450392 165.670262,33.6034515 L165.670262,4.60195168 C165.670262,2.06036391 167.730626,-6.74114049e-08 170.272214,-6.74114054e-08 C172.813801,-6.74114058e-08 174.874165,2.06036391 174.874165,4.60195168 L174.874165,33.6034515 C174.874165,34.823965 174.389318,35.9944894 173.526285,36.8575227 C172.663252,37.7205561 171.492727,38.2054032 170.272214,38.2054031 M105.84489,138.058552 C104.624376,138.058552 103.453852,137.573705 102.590818,136.710671 C101.727785,135.847638 101.242938,134.677113 101.242938,133.4566 L101.242938,78.2331793 C101.242938,75.6915915 103.303302,73.6312276 105.84489,73.6312276 C108.386477,73.6312276 110.446841,75.6915915 110.446841,78.2331793 L110.446841,133.4566 C110.446841,135.998188 108.386477,138.058552 105.84489,138.058552 M170.272214,138.058552 C167.730626,138.058552 165.670262,135.998188 165.670262,133.4566 L165.670262,48.3020853 C165.670262,45.7604975 167.730626,43.7001336 170.272214,43.7001336 C172.813801,43.7001336 174.874165,45.7604975 174.874165,48.3020853 L174.874165,133.4566 C174.874165,134.677113 174.389318,135.847638 173.526285,136.710671 C172.663252,137.573705 171.492727,138.058552 170.272214,138.058552" id="Shape" fill="#5067A2"></path> <polygon id="Path" fill="#95A5C8" points="110.446841 133.4566 165.670262 133.4566 165.670262 78.2331793 110.446841 78.2331793"></polygon> <polygon id="Path" fill="#5067A2" points="165.670262 133.4566 174.874165 133.4566 174.874165 78.2331793 165.670262 78.2331793"></polygon> <path d="M165.670262,77.9478582 C124.491998,75.6100668 130.198418,59.8345763 92.0390345,59.8253723 L92.0390345,32.213662 C124.832542,32.2228659 136.825229,48.0167643 165.670262,48.6242219 L165.670262,77.9478582" id="Path" fill="#95A5C8"></path> <path d="M92.0390345,59.8253723 L92.0022188,59.8253723 L92.0022188,32.213662 L92.0390345,32.213662 L92.0390345,59.8253723 M174.874165,78.2331793 C171.56076,78.2055676 168.505064,78.1135285 165.670262,77.9478582 L165.670262,48.6242219 L167.400596,48.6426296 C169.765999,48.6426296 172.260257,48.5413867 174.874165,48.3204931 L174.874165,78.2331793" id="Shape" fill="#5067A2"></path> <polygon id="Path" fill="#95A5C8" points="92.0390345 32.213662 165.670262 32.213662 165.670262 4.60195168 92.0390345 4.60195168"></polygon> <path d="M82.835131,32.213662 L92.0390345,32.213662 L92.0390345,4.60195168 L82.835131,4.60195168 L82.835131,32.213662 Z M165.670262,32.213662 L174.506009,32.213662 L174.506009,4.60195168 L165.670262,4.60195168 L165.670262,32.213662 Z" id="Shape" fill="#5067A2"></path> <polygon id="Path" fill="#95A5C8" points="9.20390349 59.8253723 82.835131 59.8253723 82.835131 4.60195168 9.20390349 4.60195168"></polygon> <polyline id="Path" fill="#5067A2" points="82.835131 59.8253723 82.835131 4.60195168 82.835131 59.8253723"></polyline> <polygon id="Path" fill="#95A5C8" points="9.20390349 133.4566 101.242938 133.4566 101.242938 115.048793 9.20390349 115.048793"></polygon> <polygon id="Path" fill="#5067A2" points="101.242938 133.4566 110.446841 133.4566 110.446841 115.048793 101.242938 115.048793"></polygon> <path d="M101.242938,115.048793 C43.4792398,114.699045 52.1585208,101.445424 9.20390349,101.445424 L9.20390349,59.8253723 C56.5579867,59.8253723 47.7682589,78.1319363 101.242938,78.2331793 L101.242938,115.048793" id="Path" fill="#95A5C8"></path> <path d="M101.675521,115.048793 L101.242938,115.048793 L101.242938,78.2331793 L101.675521,78.2331793 C104.335449,78.2331793 100.46981,113.723431 101.675521,115.048793" id="Path" fill="#5067A2"></path> </g> </g> </svg>'},687:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="138px" viewBox="0 0 175 138" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>scatter</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="scatter" fill="#5067A2" fill-rule="nonzero"> <path d="M173.526285,129.202529 C172.663252,128.339495 171.492727,127.854648 170.272214,127.854648 L9.20390349,127.854648 L9.20390349,4.60195168 C9.20390349,2.06036391 7.14353951,-6.74112924e-08 4.60195174,-6.74112925e-08 C2.06036398,-6.74112927e-08 3.11254732e-16,2.06036391 0,4.60195168 L0,132.4566 C3.11254728e-16,134.998188 2.06036395,137.058552 4.60195168,137.058552 L170.272214,137.058552 C171.492727,137.058552 172.663252,136.573705 173.526285,135.710671 C174.389318,134.847638 174.874165,133.677113 174.874165,132.4566 C174.874165,131.236086 174.389318,130.065562 173.526285,129.202529 Z M151.864407,12.8058552 C155.15291,12.8054572 158.191783,14.5596242 159.836149,17.4074853 C161.480516,20.2553464 161.480516,23.7641708 159.836149,26.6120319 C158.191783,29.459893 155.15291,31.21406 151.864407,31.213662 C146.781666,31.2130468 142.661617,27.0924991 142.661617,22.0097586 C142.661617,16.9270181 146.781666,12.8064703 151.864407,12.8058552 Z M142.660503,58.8253723 C147.743679,58.8253723 151.864407,62.9461003 151.864407,68.0292758 C151.864407,73.1124513 147.743679,77.2331793 142.660503,77.2331793 C137.577328,77.2331793 133.4566,73.1124513 133.4566,68.0292758 C133.4566,62.9461003 137.577328,58.8253723 142.660503,58.8253723 Z M124.252696,40.4175655 C127.5412,40.4171675 130.580072,42.1713345 132.224439,45.0191956 C133.868806,47.8670567 133.868806,51.3758811 132.224439,54.2237422 C130.580072,57.0716033 127.5412,58.8257703 124.252696,58.8253723 C119.169956,58.8247572 115.049907,54.7042094 115.049907,49.6214689 C115.049907,44.5387284 119.169956,40.4181807 124.252696,40.4175655 L124.252696,40.4175655 Z M105.84489,22.0097586 C109.133393,22.0093606 112.172266,23.7635277 113.816632,26.6113888 C115.460999,29.4592498 115.460999,32.9680743 113.816632,35.8159354 C112.172266,38.6637965 109.133393,40.4179635 105.84489,40.4175655 C100.762149,40.4169503 96.6421001,36.2964026 96.6421001,31.2136621 C96.6421001,26.1309216 100.762149,22.0103738 105.84489,22.0097586 L105.84489,22.0097586 Z M105.84489,58.8253723 C110.928065,58.8253723 115.048793,62.9461003 115.048793,68.0292758 C115.048793,73.1124513 110.928065,77.2331793 105.84489,77.2331793 C100.761714,77.2331793 96.6409861,73.1124513 96.6409861,68.0292758 C96.6409861,62.9461003 100.761714,58.8253723 105.84489,58.8253723 L105.84489,58.8253723 Z M87.4370826,77.2331793 C90.8200008,77.0784213 94.0146452,78.7938663 95.7543045,81.6993216 C97.4939639,84.6047768 97.4975937,88.2308616 95.7637545,91.1397939 C94.0299154,94.0487262 90.8387117,95.7705634 87.4554905,95.6225784 C82.5370015,95.4074394 78.6587219,91.3598697 78.6537937,86.4366802 C78.6488656,81.5134907 82.5190342,77.4581647 87.4370826,77.2331793 L87.4370826,77.2331793 Z M59.8253723,68.0292758 C63.1138756,68.0288778 66.1527483,69.7830448 67.7971148,72.6309059 C69.4414814,75.478767 69.4414814,78.9875915 67.7971148,81.8354525 C66.1527483,84.6833136 63.1138756,86.4374807 59.8253723,86.4370826 C54.7426318,86.4364675 50.6225828,82.3159197 50.6225828,77.2331792 C50.6225828,72.1504387 54.7426318,68.029891 59.8253723,68.0292758 L59.8253723,68.0292758 Z M32.213662,95.6409861 C35.5021653,95.6405881 38.541038,97.3947552 40.1854045,100.242616 C41.8297711,103.090477 41.8297711,106.599302 40.1854045,109.447163 C38.541038,112.295024 35.5021653,114.049191 32.213662,114.048793 C27.1309215,114.048178 23.0108725,109.92763 23.0108725,104.84489 C23.0108725,99.762149 27.1309215,95.6416013 32.213662,95.6409861 L32.213662,95.6409861 Z" id="Shape"></path> </g> </g> </svg>'},31:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="176px" height="154px" viewBox="0 0 176 154" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>sunburst</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="sunburst" transform="translate(-0.500000, -0.495167)" fill="#5067A2" fill-rule="nonzero"> <path d="M119.233629,98.0044542 L110.718691,87.8510962 C116.698944,81.6134116 119.776927,73.1460671 119.198407,64.5239101 L132.221771,61.7588152 C132.389075,63.3350954 132.468325,64.9289877 132.468325,66.5404921 C132.486789,78.3855449 127.713147,89.7343283 119.233629,98.0044542 L119.233629,98.0044542 Z M63.3185781,30.3829135 C74.7931609,22.4121709 89.3686325,20.3583561 102.598787,24.8479794 C115.828942,29.3376027 126.144611,39.8381699 130.399028,53.1465133 L117.38447,55.9116082 C114.163414,47.1482037 107.14477,40.3166874 98.2978797,37.3338959 C89.4509892,34.3511045 79.7290566,35.5384174 71.8599325,40.5626897 L63.3185781,30.3829135 L63.3185781,30.3829135 Z M57.4981296,97.8547516 L67.6773104,89.3128978 C73.1543438,94.3147256 80.4453141,97.3616135 88.4495316,97.3616137 C93.8284022,97.3676833 99.1146581,95.9617789 103.779942,93.2844195 L112.365323,103.508226 C105.247152,108.132446 96.9377023,110.586264 88.4495316,110.570666 C76.8578752,110.587037 65.7306915,106.015602 57.4981296,97.8547516 L57.4981296,97.8547516 Z M51.880208,91.0741048 C47.0035405,83.8229191 44.4062144,75.2791485 44.4219328,66.5404921 C44.4219328,54.7315996 49.0624416,44.0146553 56.6263832,36.1068361 L65.194154,46.3130303 C60.3076881,51.9176198 57.6201378,59.1046557 57.6302124,66.5404921 C57.6302124,72.3876992 59.2592335,77.8562467 62.0858054,82.5146391 L51.880208,91.0741048 L51.880208,91.0741048 Z M40.5915316,112.05008 L50.7354904,103.534644 C60.658337,113.682313 74.2570793,119.394563 88.4495316,119.3767 C99.4212094,119.3767 109.618001,116.030407 118.062495,110.306485 L126.586238,120.468649 C115.441046,128.370969 102.111678,132.606084 88.4495316,132.585752 C70.3533434,132.605952 53.0459635,125.179425 40.5915316,112.05008 L40.5915316,112.05008 Z M0.5,62.1374747 C1.61718015,39.3368661 11.5653323,17.8665508 28.2373873,2.27405071 L36.7435195,12.4097967 C23.0478109,25.4703646 14.8209875,43.2437342 13.7258907,62.1374747 L0.5,62.1374747 Z M0.5,70.9435094 L13.7258907,70.9435094 C14.5580363,85.4042184 19.5854188,99.3091254 28.1933598,110.958131 L18.0582064,119.464761 C7.47186066,105.41813 1.35420505,88.5122858 0.5,70.9435094 L0.5,70.9435094 Z M22.5490216,62.1374747 C23.6176776,45.8469855 30.7006658,30.5346593 42.4230797,19.1728312 L50.9380174,29.3261893 C42.1806215,38.1364527 36.8165849,49.7571326 35.7925234,62.1374747 L22.5490216,62.1374747 L22.5490216,62.1374747 Z M22.5490216,70.9435094 L35.7925234,70.9435094 C36.5571371,80.2216635 39.7688087,89.1310032 45.0999577,96.7628032 L34.9559989,105.278239 C27.6604148,95.2350677 23.3587128,83.3306553 22.5490216,70.9435094 Z M160.064824,88.3354281 C162.208458,81.2692542 163.294499,73.9246962 163.287644,66.5404921 C163.287927,62.7888436 163.014228,59.0421838 162.468731,55.3304099 L175.40404,52.5829271 C177.539642,66.0542744 176.545357,79.8364744 172.498218,92.86173 L160.064824,88.3354281 Z M157.009309,96.5954887 L169.451508,101.130596 C164.453629,112.804913 156.992417,123.261434 147.578597,131.784403 L139.08127,121.666269 C146.731696,114.64362 152.837128,106.105711 157.009309,96.5954887 L157.009309,96.5954887 Z M139.336631,80.7886563 C141.234304,74.0037443 141.75525,66.9076826 140.868791,59.9183539 L153.830516,57.1620651 C155.148964,66.5886629 154.449628,76.187832 151.77883,85.3237642 L139.336631,80.7886563 Z M136.263504,89.0487169 L148.714509,93.5750188 C145.090489,101.633987 139.889912,108.885878 133.419321,114.903235 L124.913189,104.776295 C129.629614,100.274719 133.477161,94.943361 136.263504,89.0487169 L136.263504,89.0487169 Z M84.1260215,141.268503 L84.1260215,154.495167 C61.049526,153.386197 39.3397973,143.226766 23.7025446,126.218989 L33.8288923,117.71236 C46.9380429,131.745712 64.9535467,140.183088 84.1260215,141.268503 L84.1260215,141.268503 Z M104.94227,2.57345585 C127.679056,8.4576749 145.591926,25.956003 152.007773,48.5497632 L139.046048,51.306052 C133.813709,33.9700374 120.081572,20.5128194 102.64403,15.6328053 L104.933465,2.64390412 L104.94227,2.57345585 L104.94227,2.57345585 Z M96.2952498,0.953145396 L96.2600278,1.12046007 L93.9970091,13.9948829 C81.1068487,12.6102912 68.1594065,16.034712 57.6390179,23.6110727 L49.1240802,13.4665207 C60.4957814,5.02434618 74.2870046,0.475385223 88.4495316,0.495231624 C91.0999932,0.495231624 93.7152325,0.644934198 96.2952498,0.953145396 L96.2952498,0.953145396 Z" id="Shape"></path> <path d="M88.5,75.295167 C93.3601058,75.295167 97.3,71.3552728 97.3,66.495167 C97.3,61.6350611 93.3601058,57.6951669 88.5,57.6951669 C83.6398942,57.6951669 79.7,61.6350611 79.7,66.495167 C79.7,71.3552728 83.6398942,75.295167 88.5,75.295167 Z M88.5,88.495167 C76.3497355,88.495167 66.5,78.6454315 66.5,66.495167 C66.5,54.3449025 76.3497355,44.495167 88.5,44.495167 C100.650264,44.495167 110.5,54.3449025 110.5,66.495167 C110.5,78.6454315 100.650264,88.495167 88.5,88.495167 Z" id="Shape"></path> </g> </g> </svg>'},951:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="130px" viewBox="0 0 175 130" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>themeriver</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="themeriver" fill="#5067A2" fill-rule="nonzero"> <path d="M4.9275627,42.5798026 C5.20117275,42.5813119 5.47437729,42.5585448 5.74396361,42.5117692 C10.5811329,41.6686599 15.2612908,40.0922201 19.6227791,37.836902 C26.4649962,34.328322 32.1798026,30.0130599 43.8718299,30.0130599 C55.5638572,30.0130599 63.7861807,41.3940774 79.5602127,41.4912681 C95.3342445,41.5787397 96.9864845,31.7333333 115.384662,31.7333333 C132.976158,31.7333333 137.621868,44.6208049 153.6,45.4566438 C160.490812,45.8162491 166.6041,44.9318147 171.930144,42.7936218 C173.778744,42.0602993 174.992296,40.2727177 174.991648,38.2839788 L174.991648,26.7960517 C174.987486,25.3270305 174.319017,23.9387356 173.173189,23.0194311 C172.027362,22.1001266 170.527173,21.7484925 169.092179,22.0628701 C165.933485,22.7529233 162.084738,22.8403949 157.5265,22.3155656 C145.533181,20.9160213 134.676993,5.82232335 119.476386,5.82232348 C102.788762,5.82232348 99.3093394,11.1678056 81.9899772,11.1678056 C64.6803341,11.1678056 59.6069856,0.126955258 43.8718299,0.126955258 C37.3211845,0.126955258 27.9422931,3.46059231 17.9025057,7.6009112 C12.9652241,9.65163256 8.49445708,10.8373576 4.50964317,11.1678056 C1.98627058,11.3754189 0.0451326562,13.4857192 0.0485952544,16.0176158 L0.0583143318,37.7202733 C0.0583143318,40.4027335 2.24510251,42.5798026 4.9275627,42.5798026 M170.132118,85.5283219 C169.634444,85.5282959 169.139638,85.6036638 168.664541,85.7518603 C162.658162,87.6665148 157.633409,88.7064541 153.551405,88.9008353 C139.342141,89.522855 131.343356,82.7583903 118.543356,82.7583903 C104.227183,82.7583903 97.8611998,94.1491269 80.444647,94.1491269 C61.0356872,94.1491269 52.3274108,84.1287775 42.4917236,84.1287775 C35.416249,84.1287775 28.7392558,88.7453303 19.9337889,92.9828398 C15.5893698,95.0627183 10.3507973,96.5594533 4.2083523,97.4438876 C1.81553905,97.7920745 0.0427391378,99.8465342 0.0485952544,102.264541 L0.0485952544,124.297646 C0.0496707163,125.687409 0.645723287,127.010209 1.68608385,127.931672 C2.72644442,128.853134 4.11154706,129.285071 5.491268,129.118299 C10.3313591,128.544875 15.142293,127.670159 19.9337889,126.513592 C29.8083523,124.132422 34.2305239,119.068793 42.4917236,118.388459 C54.5822323,117.397115 66.5658314,123.267426 82.4759302,121.323614 C98.386029,119.379803 106.3265,110.156416 120.273349,108.543052 C132.577676,107.12407 140.586181,111.293546 152.083827,110.030068 C159.995141,109.174791 166.81792,107.085194 172.552164,103.780714 C174.06095,102.911932 174.991067,101.303681 174.991648,99.5626424 L174.991648,90.3878512 C174.991648,87.7040073 172.815962,85.5283219 170.132118,85.5283219" id="Shape"></path> <path d="M170.132118,55.1659834 C169.755896,55.1642513 169.380769,55.206657 169.014427,55.2923311 C163.386911,56.5597226 157.597804,56.9530934 151.850569,56.4586181 C133.889749,55.0007593 128.388762,42.7839029 114.655733,42.7839029 C103.264996,42.7839029 93.9249811,52.940319 79.7157175,52.5807138 C59.2668185,52.0656038 52.6578588,41.0733486 42.0738042,41.0733486 C35.5231587,41.0733486 26.5330296,47.0991647 20.6724373,49.7524677 C15.5296251,52.0293301 10.0450596,53.4382394 4.44160976,53.9219438 C1.94888222,54.1623556 0.0470459996,56.2577415 0.0485952544,58.762035 L0.0485952544,80.8242976 C0.0491745866,82.2971429 0.717699925,83.69025 1.86632297,84.6121711 C3.01494602,85.5340923 4.51970635,85.8853329 5.95778278,85.5671982 C11.10094,84.3721963 16.0531556,82.4685044 20.6724373,79.9107062 C28.3018983,75.7703873 34.249962,72.7866364 41.8016705,72.7866364 C56.6037965,72.7866364 63.1252849,82.7778284 79.3755505,82.7778284 C94.6441914,82.7778284 103.070615,71.5231587 117.639484,71.5231587 C132.208352,71.5231587 139.964161,77.2185269 150.314958,77.5295368 C156.48656,77.7044798 163.707821,76.0813971 171.988459,72.6408505 C173.80584,71.8896408 174.991328,70.1171628 174.991648,68.1506454 L174.991648,60.0255125 C174.991648,57.3416686 172.815962,55.1659834 170.132118,55.1659834" id="Path"></path> </g> </g> </svg>'},929:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="174px" height="147px" viewBox="0 0 174 147" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>tree (1)</title> <desc>Created with Sketch.</desc> <defs> <polygon id="path-1" points="2 4.69629167 172 4.69629167 172 146.375 2 146.375"></polygon> </defs> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="tree-(1)"> <mask id="mask-2" fill="white"> <use xlink:href="#path-1"></use> </mask> <g id="path-1"></g> <path d="M174,127.4965 C173.994333,137.928125 165.534,146.380667 155.101667,146.375708 C144.670042,146.370042 136.216792,137.909 136.222458,127.476667 C136.222458,127.470292 136.222458,127.464625 136.222458,127.45825 C136.226708,118.755667 142.117917,111.435042 150.127042,109.248417 L150.127042,80.2563333 L91.4625,80.2563333 L91.4625,109.120208 C99.7407917,111.126208 105.890542,118.582125 105.889125,127.476667 C105.889125,127.483042 105.889125,127.490125 105.889125,127.4965 C105.883458,137.928125 97.4224167,146.380667 86.9907917,146.375708 C76.5584583,146.370042 68.1059167,137.909 68.1115833,127.476667 C68.1122917,118.764875 74.0049167,111.440708 82.0182917,109.254083 L82.0182917,80.2563333 L23.3530417,80.2563333 L23.3530417,109.120917 C31.630625,111.127625 37.7789583,118.582833 37.77825,127.476667 C37.77825,127.478792 37.77825,127.480917 37.77825,127.483042 C37.776125,137.915375 29.3179167,146.37075 18.8862917,146.368625 C8.45395833,146.367208 -0.00141666667,137.909 0,127.476667 C0.00141666667,118.764167 5.89545833,111.439292 13.9088333,109.254083 L13.9088333,80.2563333 C13.9088333,75.0500833 18.1425417,70.812125 23.3530417,70.812125 L82.0182917,70.812125 L82.0182917,37.8179167 C74.0006667,35.6305833 68.106625,28.298625 68.1115833,19.58825 C68.1122917,9.15025 76.5705,0.694875 87.0028333,0.696291667 C97.4344583,0.697708333 105.890542,9.15591667 105.889125,19.58825 C105.889125,19.594625 105.889125,19.601 105.889125,19.607375 C105.884167,28.4976667 99.7358333,35.9465 91.4625,37.9517917 L91.4625,70.812125 L150.127042,70.812125 C155.337542,70.812125 159.57125,75.0500833 159.57125,80.2563333 L159.57125,109.113125 C167.853083,111.119125 174.00425,118.579292 174,127.476667 C174,127.483042 174,127.490125 174,127.4965 Z" id="Fill-1" fill="#5067A2" fill-rule="nonzero"></path> </g> </g> </svg>'},101:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="160px" height="132px" viewBox="0 0 160 132" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>treemap</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="treemap" transform="translate(-0.500000, -0.095199)" fill="#5067A2" fill-rule="nonzero"> <path d="M84.9444444,79.2951993 L4.9444444,79.2951993 C2.48984554,79.2951993 0.5,81.2651464 0.5,83.6951993 L0.5,127.695199 C0.5,130.125252 2.48984554,132.095199 4.9444444,132.095199 L84.9444444,132.095199 C86.1231844,132.095199 87.2536462,131.631629 88.0871413,130.806469 C88.9206363,129.981309 89.3888889,128.862152 89.3888889,127.695199 L89.3888889,83.6951993 C89.3888889,82.5282467 88.9206363,81.4090895 88.0871413,80.5839295 C87.2536462,79.7587694 86.1231844,79.2951993 84.9444444,79.2951993 L84.9444444,79.2951993 Z M156.055556,105.695199 L102.722222,105.695199 C101.543482,105.695199 100.41302,106.158769 99.5795254,106.983929 C98.7460304,107.80909 98.2777777,108.928247 98.2777777,110.095199 L98.2777777,127.695199 C98.2777777,128.862152 98.7460304,129.981309 99.5795254,130.806469 C100.41302,131.631629 101.543482,132.095199 102.722222,132.095199 L156.055556,132.095199 C158.510154,132.095199 160.5,130.125252 160.5,127.695199 L160.5,110.095199 C160.5,107.665146 158.510154,105.695199 156.055556,105.695199 L156.055556,105.695199 Z M156.055556,61.6951994 L102.722222,61.6951994 C101.543482,61.6951994 100.41302,62.1587694 99.5795254,62.9839295 C98.7460304,63.8090896 98.2777777,64.9282468 98.2777777,66.0951993 L98.2777777,92.4951993 C98.2777777,93.6621519 98.7460304,94.7813091 99.5795254,95.6064692 C100.41302,96.4316293 101.543482,96.8951993 102.722222,96.8951993 L156.055556,96.8951993 C158.510154,96.8951993 160.5,94.9252522 160.5,92.4951993 L160.5,66.0951993 C160.5,63.6651465 158.510154,61.6951994 156.055556,61.6951994 L156.055556,61.6951994 Z M156.055556,0.0951993491 L102.722222,0.0951993491 C101.543482,0.0951993149 100.41302,0.558769393 99.5795254,1.38392945 C98.7460304,2.20908951 98.2777777,3.32824674 98.2777777,4.49519931 L98.2777777,48.4951994 C98.2777777,49.662152 98.7460304,50.7813092 99.5795254,51.6064692 C100.41302,52.4316293 101.543482,52.8951994 102.722222,52.8951993 L156.055556,52.8951993 C158.510154,52.8951993 160.5,50.9252523 160.5,48.4951994 L160.5,4.49519931 C160.5,2.06514643 158.510154,0.0951993491 156.055556,0.0951993491 L156.055556,0.0951993491 Z M89.3888889,4.49519931 L89.3888889,66.0951993 C89.3888889,67.2621519 88.9206363,68.3813091 88.0871413,69.2064692 C87.2536462,70.0316293 86.1231844,70.4951993 84.9444444,70.4951993 L4.9444444,70.4951993 C2.48984554,70.4951993 0.5,68.5252522 0.5,66.0951993 L0.5,4.49519931 C0.5,2.06514643 2.48984554,0.0951993491 4.9444444,0.0951993491 L84.9444444,0.0951993491 C86.1231844,0.0951993149 87.2536462,0.558769393 88.0871413,1.38392945 C88.9206363,2.20908951 89.3888889,3.32824674 89.3888889,4.49519931 Z" id="Shape"></path> </g> </g> </svg>'},705:(t,e,i)=>{var n=i(639).Symbol;t.exports=n},239:(t,e,i)=>{var n=i(705),a=i(607),r=i(333),o=n?n.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":o&&o in Object(t)?a(t):r(t)}},957:(t,e,i)=>{var n="object"==typeof i.g&&i.g&&i.g.Object===Object&&i.g;t.exports=n},607:(t,e,i)=>{var n=i(705),a=Object.prototype,r=a.hasOwnProperty,o=a.toString,l=n?n.toStringTag:void 0;t.exports=function(t){var e=r.call(t,l),i=t[l];try{t[l]=void 0;var n=!0}catch(t){}var a=o.call(t);return n&&(e?t[l]=i:delete t[l]),a}},333:t=>{var e=Object.prototype.toString;t.exports=function(t){return e.call(t)}},639:(t,e,i)=>{var n=i(957),a="object"==typeof self&&self&&self.Object===Object&&self,r=n||a||Function("return this")();t.exports=r},279:(t,e,i)=>{var n=i(218),a=i(771),r=i(841),o=Math.max,l=Math.min;t.exports=function(t,e,i){var s,c,d,u,p,f,g=0,h=!1,m=!1,C=!0;if("function"!=typeof t)throw new TypeError("Expected a function");function y(e){var i=s,n=c;return s=c=void 0,g=e,u=t.apply(n,i)}function v(t){return g=t,p=setTimeout(_,e),h?y(t):u}function b(t){var i=t-f;return void 0===f||i>=e||i<0||m&&t-g>=d}function _(){var t=a();if(b(t))return L(t);p=setTimeout(_,function(t){var i=e-(t-f);return m?l(i,d-(t-g)):i}(t))}function L(t){return p=void 0,C&&s?y(t):(s=c=void 0,u)}function w(){var t=a(),i=b(t);if(s=arguments,c=this,f=t,i){if(void 0===p)return v(f);if(m)return clearTimeout(p),p=setTimeout(_,e),y(f)}return void 0===p&&(p=setTimeout(_,e)),u}return e=r(e)||0,n(i)&&(h=!!i.leading,d=(m="maxWait"in i)?o(r(i.maxWait)||0,e):d,C="trailing"in i?!!i.trailing:C),w.cancel=function(){void 0!==p&&clearTimeout(p),g=0,s=f=c=p=void 0},w.flush=function(){return void 0===p?u:L(a())},w}},218:t=>{t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},5:t=>{t.exports=function(t){return null!=t&&"object"==typeof t}},448:(t,e,i)=>{var n=i(239),a=i(5);t.exports=function(t){return"symbol"==typeof t||a(t)&&"[object Symbol]"==n(t)}},771:(t,e,i)=>{var n=i(639);t.exports=function(){return n.Date.now()}},841:(t,e,i)=>{var n=i(218),a=i(448),r=/^\s+|\s+$/g,o=/^[-+]0x[0-9a-f]+$/i,l=/^0b[01]+$/i,s=/^0o[0-7]+$/i,c=parseInt;t.exports=function(t){if("number"==typeof t)return t;if(a(t))return NaN;if(n(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=n(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(r,"");var i=l.test(t);return i||s.test(t)?c(t.slice(2),i?2:8):o.test(t)?NaN:+t}},463:function(t){"undefined"!=typeof self&&self,t.exports=function(t){var e={};function i(n){if(e[n])return e[n].exports;var a=e[n]={i:n,l:!1,exports:{}};return t[n].call(a.exports,a,a.exports,i),a.l=!0,a.exports}return i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var a in t)i.d(n,a,function(e){return t[e]}.bind(null,a));return n},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="/dist/",i(i.s=1)}([function(t,e){var i="function"==typeof Float32Array;function n(t,e){return 1-3*e+3*t}function a(t,e){return 3*e-6*t}function r(t){return 3*t}function o(t,e,i){return((n(e,i)*t+a(e,i))*t+r(e))*t}function l(t,e,i){return 3*n(e,i)*t*t+2*a(e,i)*t+r(e)}function s(t){return t}t.exports=function(t,e,n,a){if(!(0<=t&&t<=1&&0<=n&&n<=1))throw new Error("bezier x values must be in [0, 1] range");if(t===e&&n===a)return s;for(var r=i?new Float32Array(11):new Array(11),c=0;c<11;++c)r[c]=o(.1*c,t,n);function d(e){for(var i=0,a=1;10!==a&&r[a]<=e;++a)i+=.1;--a;var s=i+(e-r[a])/(r[a+1]-r[a])*.1,c=l(s,t,n);return c>=.001?function(t,e,i,n){for(var a=0;a<4;++a){var r=l(e,i,n);if(0===r)return e;e-=(o(e,i,n)-t)/r}return e}(e,s,t,n):0===c?s:function(t,e,i,n,a){var r,l,s=0;do{(r=o(l=e+(i-e)/2,n,a)-t)>0?i=l:e=l}while(Math.abs(r)>1e-7&&++s<10);return l}(e,i,i+.1,t,n)}return function(t){return 0===t?0:1===t?1:o(d(t),e,a)}}},function(t,e,i){"use strict";i.r(e);var n=function(){var t=this.$createElement;return(this._self._c||t)(this.tag,{ref:"scrollactive-nav-wrapper",tag:"component",staticClass:"scrollactive-nav"},[this._t("default")],2)};n._withStripped=!0;var a=i(0),r=i.n(a);function o(t){return function(t){if(Array.isArray(t))return l(t)}(t)||function(t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return l(t,e);var i=Object.prototype.toString.call(t).slice(8,-1);return"Object"===i&&t.constructor&&(i=t.constructor.name),"Map"===i||"Set"===i?Array.from(t):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?l(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var s=function(t,e,i,n,a,r,o,l){var s,c="function"==typeof t?t.options:t;if(e&&(c.render=e,c.staticRenderFns=[],c._compiled=!0),s)if(c.functional){c._injectStyles=s;var d=c.render;c.render=function(t,e){return s.call(e),d(t,e)}}else{var u=c.beforeCreate;c.beforeCreate=u?[].concat(u,s):[s]}return{exports:t,options:c}}({props:{activeClass:{type:String,default:"is-active"},offset:{type:Number,default:20},scrollOffset:{type:Number,default:null},scrollContainerSelector:{type:String,default:""},clickToScroll:{type:Boolean,default:!0},duration:{type:Number,default:600},alwaysTrack:{type:Boolean,default:!1},bezierEasingValue:{type:String,default:".5,0,.35,1"},modifyUrl:{type:Boolean,default:!0},exact:{type:Boolean,default:!1},highlightFirstItem:{type:Boolean,default:!1},tag:{type:String,default:"nav"},scrollOnStart:{type:Boolean,default:!0}},data:function(){return{observer:null,items:[],currentItem:null,lastActiveItem:null,scrollAnimationFrame:null,bezierEasing:r.a}},computed:{cubicBezierArray:function(){return this.bezierEasingValue.split(",")},scrollContainer:function(){var t=window;return this.scrollContainerSelector&&(t=document.querySelector(this.scrollContainerSelector)||window),t}},mounted:function(){var t=window.MutationObserver||window.WebKitMutationObserver;this.observer||(this.observer=new t(this.initScrollactiveItems),this.observer.observe(this.$refs["scrollactive-nav-wrapper"],{childList:!0,subtree:!0})),this.initScrollactiveItems(),this.removeActiveClass(),this.currentItem=this.getItemInsideWindow(),this.currentItem&&this.currentItem.classList.add(this.activeClass),this.scrollOnStart&&this.scrollToHashElement(),this.scrollContainer.addEventListener("scroll",this.onScroll)},updated:function(){this.initScrollactiveItems()},beforeDestroy:function(){this.scrollContainer.removeEventListener("scroll",this.onScroll),window.cancelAnimationFrame(this.scrollAnimationFrame)},methods:{onScroll:function(t){this.currentItem=this.getItemInsideWindow(),this.currentItem!==this.lastActiveItem&&(this.removeActiveClass(),this.$emit("itemchanged",t,this.currentItem,this.lastActiveItem),this.lastActiveItem=this.currentItem),this.currentItem&&this.currentItem.classList.add(this.activeClass)},getItemInsideWindow:function(){var t,e=this;return[].forEach.call(this.items,(function(i){var n=i===e.items[0],a=document.getElementById(decodeURI(i.hash.substr(1)));if(a){var r=e.scrollContainer.scrollTop||window.pageYOffset,o=r>=e.getOffsetTop(a)-e.offset,l=r<e.getOffsetTop(a)-e.offset+a.offsetHeight;n&&e.highlightFirstItem&&l&&(t=i),e.exact&&o&&l&&(t=i),!e.exact&&o&&(t=i)}})),t},initScrollactiveItems:function(){var t=this;this.items=this.$el.querySelectorAll(".scrollactive-item"),this.clickToScroll?[].forEach.call(this.items,(function(e){e.addEventListener("click",t.handleClick)})):[].forEach.call(this.items,(function(e){e.removeEventListener("click",t.handleClick)}))},setScrollactiveItems:function(){this.initScrollactiveItems()},handleClick:function(t){var e=this;t.preventDefault();var i=t.currentTarget.hash,n=document.getElementById(decodeURI(i.substr(1)));n?(this.alwaysTrack||(this.scrollContainer.removeEventListener("scroll",this.onScroll),window.cancelAnimationFrame(this.scrollAnimationFrame),this.removeActiveClass(),t.currentTarget.classList.add(this.activeClass)),this.scrollTo(n).then((function(){e.alwaysTrack||(e.scrollContainer.addEventListener("scroll",e.onScroll),e.currentItem=[].find.call(e.items,(function(t){return decodeURI(t.hash.substr(1))===n.id})),e.currentItem!==e.lastActiveItem&&(e.$emit("itemchanged",null,e.currentItem,e.lastActiveItem),e.lastActiveItem=e.currentItem)),e.modifyUrl&&e.pushHashToUrl(i)}))):console.warn("[vue-scrollactive] Element '".concat(i,"' was not found. Make sure it is set in the DOM."))},scrollTo:function(t){var e=this;return new Promise((function(i){var n=e.getOffsetTop(t),a=e.scrollContainer.scrollTop||window.pageYOffset,r=n-a,l=e.bezierEasing.apply(e,o(e.cubicBezierArray)),s=null;window.requestAnimationFrame((function t(n){s||(s=n);var o=n-s,c=o/e.duration;o>=e.duration&&(o=e.duration),c>=1&&(c=1);var d=e.scrollOffset||e.offset,u=a+l(c)*(r-d);e.scrollContainer.scrollTo(0,u),o<e.duration?e.scrollAnimationFrame=window.requestAnimationFrame(t):i()}))}))},getOffsetTop:function(t){for(var e=0,i=t;i;)e+=i.offsetTop,i=i.offsetParent;return this.scrollContainer.offsetTop&&(e-=this.scrollContainer.offsetTop),e},removeActiveClass:function(){var t=this;[].forEach.call(this.items,(function(e){e.classList.remove(t.activeClass)}))},scrollToHashElement:function(){var t=this,e=window.location.hash;if(e){var i=document.querySelector(decodeURI(e));i&&(window.location.hash="",setTimeout((function(){var n=i.offsetTop-t.offset;t.scrollContainer.scrollTo(0,n),t.pushHashToUrl(e)}),0))}},pushHashToUrl:function(t){window.history.pushState?window.history.pushState(null,null,t):window.location.hash=t}}},n);s.options.__file="src/scrollactive.vue";var c=s.exports,d={install:function(t){d.install.installed||t.component("scrollactive",c)}};"undefined"!=typeof window&&window.Vue&&d.install(window.Vue),e.default=d}])},472:(t,e,i)=>{var n={"./bar.svg":38,"./boxplot.svg":851,"./calendar.svg":496,"./candlestick.svg":173,"./custom.svg":353,"./dataZoom.svg":6,"./dataset.svg":238,"./drag.svg":642,"./funnel.svg":797,"./gauge.svg":822,"./geo.svg":317,"./gl.svg":926,"./graph.svg":769,"./heatmap.svg":781,"./line.svg":69,"./lines.svg":276,"./map.svg":831,"./parallel.svg":582,"./pictorialBar.svg":689,"./pie.svg":931,"./radar.svg":702,"./rich.svg":989,"./sankey.svg":827,"./scatter.svg":687,"./sunburst.svg":31,"./themeRiver.svg":951,"./tree.svg":929,"./treemap.svg":101};function a(t){var e=r(t);return i(e)}function r(t){if(!i.o(n,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return n[t]}a.keys=function(){return Object.keys(n)},a.resolve=r,t.exports=a,a.id=472}},e={};function i(n){if(e[n])return e[n].exports;var a=e[n]={id:n,loaded:!1,exports:{}};return t[n].call(a.exports,a,a.exports,i),a.loaded=!0,a.exports}return i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),i.p="./",i(403)})();
\ No newline at end of file
+var echartsExample;echartsExample=(()=>{var t={913:(t,e,i)=>{t=i.nmd(t);var n={grid:"GridComponent",polar:"PolarComponent",geo:"GeoComponent",singleAxis:"SingleAxisComponent",parallel:"ParallelComponent",calendar:"CalendarComponent",graphic:"GraphicComponent",toolbox:"ToolboxComponent",tooltip:"TooltipComponent",axisPointer:"AxisPointerComponent",brush:"BrushComponent",title:"TitleComponent",timeline:"TimelineComponent",markPoint:"MarkPointComponent",markLine:"MarkLineComponent",markArea:"MarkAreaComponent",legend:"LegendComponent",dataZoom:"DataZoomComponent",visualMap:"VisualMapComponent",aria:"AriaComponent",dataset:"DatasetComponent",xAxis:"GridComponent",yAxis:"GridComponent",angleAxis:"PolarComponent",radiusAxis:"PolarComponent"},a={line:"LineChart",bar:"BarChart",pie:"PieChart",scatter:"ScatterChart",radar:"RadarChart",map:"MapChart",tree:"TreeChart",treemap:"TreemapChart",graph:"GraphChart",gauge:"GaugeChart",funnel:"FunnelChart",parallel:"ParallelChart",sankey:"SankeyChart",boxplot:"BoxplotChart",candlestick:"CandlestickChart",effectScatter:"EffectScatterChart",lines:"LinesChart",heatmap:"HeatmapChart",pictorialBar:"PictorialBarChart",themeRiver:"ThemeRiverChart",sunburst:"SunburstChart",custom:"CustomChart"},r={grid3D:"Grid3DComponent",geo3D:"Geo3DComponent",globe:"GlobeComponent",mapbox3D:"Mapbox3DComponent",maptalks3D:"Maptalks3DComponent",xAxis3D:"Grid3DComponent",yAxis3D:"Grid3DComponent",zAxis3D:"Grid3DComponent"},o={bar3D:"Bar3DChart",line3D:"Line3DChart",scatter3D:"Scatter3DChart",lines3D:"Lines3DChart",polygons3D:"Polygons3DChart",surface:"SurfaceChart",map3D:"Map3DChart",scatterGL:"ScatterGLChart",graphGL:"GraphGLChart",flowGL:"FlowGLChart",linesGL:"LinesGLChart"},l={},s={},c={},d={},u={SVGRenderer:"svg",CanvasRenderer:"canvas"},p=["markLine","markArea","markPoint"],f=[].concat(p,["grid","axisPointer","aria"]),g=["xAxis","yAxis","angleAxis","radiusAxis","xAxis3D","yAxis3D","zAxis3D"];function h(t,e){Object.keys(t).forEach((function(i){g.includes(i)||(e[t[i]]=i)}))}function m(t,e){var i=[],n=[],a=[],r=[],o=[];t.forEach((function(t){t.endsWith("Renderer")?o.push(t):s[t]?(i.push(t),e&&i.push(t.replace(/Chart$/,"SeriesOption"))):l[t]?(n.push(t),e&&n.push(t.replace(/Component$/,"ComponentOption"))):c[t]?a.push(t):d[t]&&r.push(t)}));var u=[].concat(n,i,r,a,o),p="\ntype ECOption = echarts.ComposeOption<\n    ".concat(u.filter((function(t){return t.endsWith("Option")})).join(" | "),"\n>"),f=[[n,"echarts/components"],[i,"echarts/charts"],[o,"echarts/renderers"],[a,"echarts-gl/charts"],[r,"echarts-gl/components"]].filter((function(t){return t[0].length>0})).map((function(t){return"\nimport {".concat((e=t[0],"".concat(e.map((function(t){return"\n    ".concat(t)})).join(","))),"\n} from '").concat(t[1],"';\n    ").trim();var e})).join("\n");return"import * as echarts from 'echarts/core';\n".concat(f,"\n\necharts.use(\n    [").concat(u.filter((function(t){return!t.endsWith("Option")})).join(", "),"]\n);\n")+(e?p:"")}function C(t,e){var i=[];return t.forEach((function(t){t.endsWith("Renderer")&&"CanvasRenderer"!==t?i.push("zrender/lib/".concat(u[t],"/").concat(u[t])):s[t]?i.push("echarts/lib/chart/".concat(s[t])):l[t]?i.push("echarts/lib/component/".concat(l[t])):c[t]?i.push("echarts-gl/lib/chart/".concat(c[t])):d[t]&&i.push("echarts-gl/lib/component/".concat(d[t]))})),e?"import * as echarts from 'echarts/lib/echarts';\n".concat(i.map((function(t){return"import '".concat(t,"';")})).join("\n"),"\n"):"const echarts = require('echarts/lib/echarts');\n".concat(i.map((function(t){return"require('".concat(t,"');")})).join("\n"),"\n")}function y(t){return!!t.find((function(t){return!(!c[t]&&!d[t])}))}h(n,l),h(a,s),h(r,d),h(o,c),t.exports.collectDeps=function t(e){var i=[];if(e.options)return e.options.forEach((function(e){i=i.concat(t(e))})),e.baseOption&&(i=i.concat(t(e.baseOption))),Array.from(new Set(i));Object.keys(e).forEach((function(t){if(!f.includes(t)){var a=e[t];Array.isArray(a)&&!a.length||(n[t]&&i.push(n[t]),r[t]&&i.push(r[t]))}}));var l=e.series;return Array.isArray(l)||(l=[l]),l.forEach((function(t){a[t.type]&&i.push(a[t.type]),o[t.type]&&i.push(o[t.type]),"map"===t.type&&i.push(n.geo),p.forEach((function(e){t[e]&&i.push(n[e])}))})),Array.from(new Set(i))},t.exports.buildMinimalBundleCode=m,t.buildLegacyMinimalBundleCode=C,t.exports.buildExampleCode=function(t,e,i){var n=i.minimal,a=i.esm,r=void 0===a||a,o=i.legacy,l=i.ts,s=i.theme,c=i.ROOT_PATH,d=i.extraImports;l&&(r=!0),n&&!r&&(o=!0);var u=t.indexOf("ecStat")>=0,p=t.indexOf("ROOT_PATH")>=0,f=t.indexOf("app")>=0,g="\n".concat(u?r?"import ecStat from 'echarts-stat';":"var ecStat = require('echarts-stat');":"","\n"),h=[n?o?C(e,r):m(e,l):r?"import * as echarts from 'echarts';".concat(y(e)?"\nimport 'echarts-gl';":""):"var echarts = require('echarts');".concat(y(e)?"\nrequire('echarts-gl');":""),s&&"dark"!==s?r?"import 'echarts/theme/".concat(s,"'"):"require('echarts/theme/".concat(s,"')"):"",d].filter((function(t){return!!t})).join("\n"),v=[p?"var ROOT_PATH = '".concat(c,"';"):"",f?"var app".concat(l?": any":""," = {};"):"",l&&!n?"type ECOption = echarts.EChartsOption":""].filter((function(t){return!!t})).join("\n"),b=[h.trim(),g.trim(),v.trim()].filter((function(t){return!!t})).join("\n\n");return"".concat(b,"\n\nvar chartDom = document.getElementById('main')").concat(l?"!":"",";\nvar myChart = echarts.init(chartDom").concat(s?", '".concat(s,"'"):"",");\nvar option").concat(l?": ECOption":"",";\n\n").concat(t.trim(),"\n\noption && myChart.setOption(option);\n")}},403:(t,e,i)=>{"use strict";i.r(e),i.d(e,{init:()=>Sl});const n=Vue;var a=i.n(n),r=["style","currency","currencyDisplay","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","minimumSignificantDigits","maximumSignificantDigits","localeMatcher","formatMatcher","unit"];function o(t,e){"undefined"!=typeof console&&(console.warn("[vue-i18n] "+t),e&&console.warn(e.stack))}var l=Array.isArray;function s(t){return null!==t&&"object"==typeof t}function c(t){return"string"==typeof t}var d=Object.prototype.toString;function u(t){return"[object Object]"===d.call(t)}function p(t){return null==t}function f(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=null,n=null;return 1===t.length?s(t[0])||Array.isArray(t[0])?n=t[0]:"string"==typeof t[0]&&(i=t[0]):2===t.length&&("string"==typeof t[0]&&(i=t[0]),(s(t[1])||Array.isArray(t[1]))&&(n=t[1])),{locale:i,params:n}}function g(t){return JSON.parse(JSON.stringify(t))}function h(t,e){return!!~t.indexOf(e)}var m=Object.prototype.hasOwnProperty;function C(t,e){return m.call(t,e)}function y(t){for(var e=arguments,i=Object(t),n=1;n<arguments.length;n++){var a=e[n];if(null!=a){var r=void 0;for(r in a)C(a,r)&&(s(a[r])?i[r]=y(i[r],a[r]):i[r]=a[r])}}return i}function v(t,e){if(t===e)return!0;var i=s(t),n=s(e);if(!i||!n)return!i&&!n&&String(t)===String(e);try{var a=Array.isArray(t),r=Array.isArray(e);if(a&&r)return t.length===e.length&&t.every((function(t,i){return v(t,e[i])}));if(a||r)return!1;var o=Object.keys(t),l=Object.keys(e);return o.length===l.length&&o.every((function(i){return v(t[i],e[i])}))}catch(t){return!1}}var b={beforeCreate:function(){var t=this.$options;if(t.i18n=t.i18n||(t.__i18n?{}:null),t.i18n){if(t.i18n instanceof K){if(t.__i18n)try{var e={};t.__i18n.forEach((function(t){e=y(e,JSON.parse(t))})),Object.keys(e).forEach((function(i){t.i18n.mergeLocaleMessage(i,e[i])}))}catch(t){}this._i18n=t.i18n,this._i18nWatcher=this._i18n.watchI18nData()}else if(u(t.i18n)){var i=this.$root&&this.$root.$i18n&&this.$root.$i18n instanceof K?this.$root.$i18n:null;if(i&&(t.i18n.root=this.$root,t.i18n.formatter=i.formatter,t.i18n.fallbackLocale=i.fallbackLocale,t.i18n.formatFallbackMessages=i.formatFallbackMessages,t.i18n.silentTranslationWarn=i.silentTranslationWarn,t.i18n.silentFallbackWarn=i.silentFallbackWarn,t.i18n.pluralizationRules=i.pluralizationRules,t.i18n.preserveDirectiveContent=i.preserveDirectiveContent),t.__i18n)try{var n={};t.__i18n.forEach((function(t){n=y(n,JSON.parse(t))})),t.i18n.messages=n}catch(t){}var a=t.i18n.sharedMessages;a&&u(a)&&(t.i18n.messages=y(t.i18n.messages,a)),this._i18n=new K(t.i18n),this._i18nWatcher=this._i18n.watchI18nData(),(void 0===t.i18n.sync||t.i18n.sync)&&(this._localeWatcher=this.$i18n.watchLocale()),i&&i.onComponentInstanceCreated(this._i18n)}}else this.$root&&this.$root.$i18n&&this.$root.$i18n instanceof K?this._i18n=this.$root.$i18n:t.parent&&t.parent.$i18n&&t.parent.$i18n instanceof K&&(this._i18n=t.parent.$i18n)},beforeMount:function(){var t=this.$options;t.i18n=t.i18n||(t.__i18n?{}:null),t.i18n?(t.i18n instanceof K||u(t.i18n))&&(this._i18n.subscribeDataChanging(this),this._subscribing=!0):(this.$root&&this.$root.$i18n&&this.$root.$i18n instanceof K||t.parent&&t.parent.$i18n&&t.parent.$i18n instanceof K)&&(this._i18n.subscribeDataChanging(this),this._subscribing=!0)},beforeDestroy:function(){if(this._i18n){var t=this;this.$nextTick((function(){t._subscribing&&(t._i18n.unsubscribeDataChanging(t),delete t._subscribing),t._i18nWatcher&&(t._i18nWatcher(),t._i18n.destroyVM(),delete t._i18nWatcher),t._localeWatcher&&(t._localeWatcher(),delete t._localeWatcher)}))}}},_={name:"i18n",functional:!0,props:{tag:{type:[String,Boolean,Object],default:"span"},path:{type:String,required:!0},locale:{type:String},places:{type:[Array,Object]}},render:function(t,e){var i=e.data,n=e.parent,a=e.props,r=e.slots,o=n.$i18n;if(o){var l=a.path,s=a.locale,c=a.places,d=r(),u=o.i(l,s,function(t){var e;for(e in t)if("default"!==e)return!1;return Boolean(e)}(d)||c?function(t,e){var i=e?function(t){return Array.isArray(t)?t.reduce(w,{}):Object.assign({},t)}(e):{};if(!t)return i;var n=(t=t.filter((function(t){return t.tag||""!==t.text.trim()}))).every(x);return t.reduce(n?L:w,i)}(d.default,c):d),p=a.tag&&!0!==a.tag||!1===a.tag?a.tag:"span";return p?t(p,i,u):u}}};function L(t,e){return e.data&&e.data.attrs&&e.data.attrs.place&&(t[e.data.attrs.place]=e),t}function w(t,e,i){return t[i]=e,t}function x(t){return Boolean(t.data&&t.data.attrs&&t.data.attrs.place)}var k,S={name:"i18n-n",functional:!0,props:{tag:{type:[String,Boolean,Object],default:"span"},value:{type:Number,required:!0},format:{type:[String,Object]},locale:{type:String}},render:function(t,e){var i=e.props,n=e.parent,a=e.data,o=n.$i18n;if(!o)return null;var l=null,d=null;c(i.format)?l=i.format:s(i.format)&&(i.format.key&&(l=i.format.key),d=Object.keys(i.format).reduce((function(t,e){var n;return h(r,e)?Object.assign({},t,((n={})[e]=i.format[e],n)):t}),null));var u=i.locale||o.locale,p=o._ntp(i.value,u,l,d),f=p.map((function(t,e){var i,n=a.scopedSlots&&a.scopedSlots[t.type];return n?n(((i={})[t.type]=t.value,i.index=e,i.parts=p,i)):t.value})),g=i.tag&&!0!==i.tag||!1===i.tag?i.tag:"span";return g?t(g,{attrs:a.attrs,class:a.class,staticClass:a.staticClass},f):f}};function N(t,e,i){O(0,i)&&A(t,e,i)}function M(t,e,i,n){if(O(0,i)){var a=i.context.$i18n;(function(t,e){var i=e.context;return t._locale===i.$i18n.locale})(t,i)&&v(e.value,e.oldValue)&&v(t._localeMessage,a.getLocaleMessage(a.locale))||A(t,e,i)}}function T(t,e,i,n){if(i.context){var a=i.context.$i18n||{};e.modifiers.preserve||a.preserveDirectiveContent||(t.textContent=""),t._vt=void 0,delete t._vt,t._locale=void 0,delete t._locale,t._localeMessage=void 0,delete t._localeMessage}else o("Vue instance does not exists in VNode context")}function O(t,e){var i=e.context;return i?!!i.$i18n||(o("VueI18n instance does not exists in Vue instance"),!1):(o("Vue instance does not exists in VNode context"),!1)}function A(t,e,i){var n,a,r=function(t){var e,i,n,a;return c(t)?e=t:u(t)&&(e=t.path,i=t.locale,n=t.args,a=t.choice),{path:e,locale:i,args:n,choice:a}}(e.value),l=r.path,s=r.locale,d=r.args,p=r.choice;if(l||s||d)if(l){var f=i.context;t._vt=t.textContent=null!=p?(n=f.$i18n).tc.apply(n,[l,p].concat(D(s,d))):(a=f.$i18n).t.apply(a,[l].concat(D(s,d))),t._locale=f.$i18n.locale,t._localeMessage=f.$i18n.getLocaleMessage(f.$i18n.locale)}else o("`path` is required in v-t directive");else o("value type not supported")}function D(t,e){var i=[];return t&&i.push(t),e&&(Array.isArray(e)||u(e))&&i.push(e),i}function E(t){E.installed=!0,(k=t).version&&Number(k.version.split(".")[0]),function(t){t.prototype.hasOwnProperty("$i18n")||Object.defineProperty(t.prototype,"$i18n",{get:function(){return this._i18n}}),t.prototype.$t=function(t){for(var e=[],i=arguments.length-1;i-- >0;)e[i]=arguments[i+1];var n=this.$i18n;return n._t.apply(n,[t,n.locale,n._getMessages(),this].concat(e))},t.prototype.$tc=function(t,e){for(var i=[],n=arguments.length-2;n-- >0;)i[n]=arguments[n+2];var a=this.$i18n;return a._tc.apply(a,[t,a.locale,a._getMessages(),this,e].concat(i))},t.prototype.$te=function(t,e){var i=this.$i18n;return i._te(t,i.locale,i._getMessages(),e)},t.prototype.$d=function(t){for(var e,i=[],n=arguments.length-1;n-- >0;)i[n]=arguments[n+1];return(e=this.$i18n).d.apply(e,[t].concat(i))},t.prototype.$n=function(t){for(var e,i=[],n=arguments.length-1;n-- >0;)i[n]=arguments[n+1];return(e=this.$i18n).n.apply(e,[t].concat(i))}}(k),k.mixin(b),k.directive("t",{bind:N,update:M,unbind:T}),k.component(_.name,_),k.component(S.name,S),k.config.optionMergeStrategies.i18n=function(t,e){return void 0===e?t:e}}var P=function(){this._caches=Object.create(null)};P.prototype.interpolate=function(t,e){if(!e)return[t];var i=this._caches[t];return i||(i=function(t){for(var e=[],i=0,n="";i<t.length;){var a=t[i++];if("{"===a){n&&e.push({type:"text",value:n}),n="";var r="";for(a=t[i++];void 0!==a&&"}"!==a;)r+=a,a=t[i++];var o="}"===a,l=F.test(r)?"list":o&&R.test(r)?"named":"unknown";e.push({value:r,type:l})}else"%"===a?"{"!==t[i]&&(n+=a):n+=a}return n&&e.push({type:"text",value:n}),e}(t),this._caches[t]=i),function(t,e){var i=[],n=0,a=Array.isArray(e)?"list":s(e)?"named":"unknown";if("unknown"===a)return i;for(;n<t.length;){var r=t[n];switch(r.type){case"text":i.push(r.value);break;case"list":i.push(e[parseInt(r.value,10)]);break;case"named":"named"===a&&i.push(e[r.value])}n++}return i}(i,e)};var F=/^(?:\d)+/,R=/^(?:\w)+/,B=[];B[0]={ws:[0],ident:[3,0],"[":[4],eof:[7]},B[1]={ws:[1],".":[2],"[":[4],eof:[7]},B[2]={ws:[2],ident:[3,0],0:[3,0],number:[3,0]},B[3]={ident:[3,0],0:[3,0],number:[3,0],ws:[1,1],".":[2,1],"[":[4,1],eof:[7,1]},B[4]={"'":[5,0],'"':[6,0],"[":[4,2],"]":[1,3],eof:8,else:[4,0]},B[5]={"'":[4,0],eof:8,else:[5,0]},B[6]={'"':[4,0],eof:8,else:[6,0]};var I=/^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/;function j(t){if(null==t)return"eof";switch(t.charCodeAt(0)){case 91:case 93:case 46:case 34:case 39:return t;case 95:case 36:case 45:return"ident";case 9:case 10:case 13:case 160:case 65279:case 8232:case 8233:return"ws"}return"ident"}var G=function(){this._cache=Object.create(null)};G.prototype.parsePath=function(t){var e=this._cache[t];return e||(e=function(t){var e,i,n,a,r,o,l,s=[],c=-1,d=0,u=0,p=[];function f(){var e=t[c+1];if(5===d&&"'"===e||6===d&&'"'===e)return c++,n="\\"+e,p[0](),!0}for(p[1]=function(){void 0!==i&&(s.push(i),i=void 0)},p[0]=function(){void 0===i?i=n:i+=n},p[2]=function(){p[0](),u++},p[3]=function(){if(u>0)u--,d=4,p[0]();else{if(u=0,void 0===i)return!1;if(!1===(i=function(t){var e,i=t.trim();return("0"!==t.charAt(0)||!isNaN(t))&&(e=i,I.test(e)?function(t){var e=t.charCodeAt(0);return e!==t.charCodeAt(t.length-1)||34!==e&&39!==e?t:t.slice(1,-1)}(i):"*"+i)}(i)))return!1;p[1]()}};null!==d;)if(c++,"\\"!==(e=t[c])||!f()){if(a=j(e),8===(r=(l=B[d])[a]||l.else||8))return;if(d=r[0],(o=p[r[1]])&&(n=void 0===(n=r[2])?e:n,!1===o()))return;if(7===d)return s}}(t))&&(this._cache[t]=e),e||[]},G.prototype.getPathValue=function(t,e){if(!s(t))return null;var i=this.parsePath(e);if(0===i.length)return null;for(var n=i.length,a=t,r=0;r<n;){var o=a[i[r]];if(void 0===o)return null;a=o,r++}return a};var z,U=/<\/?[\w\s="/.':;#-\/]+>/,Z=/(?:@(?:\.[a-z]+)?:(?:[\w\-_|.]+|\([\w\-_|.]+\)))/g,W=/^@(?:\.([a-z]+))?:/,V=/[()]/g,H={upper:function(t){return t.toLocaleUpperCase()},lower:function(t){return t.toLocaleLowerCase()},capitalize:function(t){return""+t.charAt(0).toLocaleUpperCase()+t.substr(1)}},q=new P,K=function(t){var e=this;void 0===t&&(t={}),!k&&"undefined"!=typeof window&&window.Vue&&E(window.Vue);var i=t.locale||"en-US",n=!1!==t.fallbackLocale&&(t.fallbackLocale||"en-US"),a=t.messages||{},r=t.dateTimeFormats||{},o=t.numberFormats||{};this._vm=null,this._formatter=t.formatter||q,this._modifiers=t.modifiers||{},this._missing=t.missing||null,this._root=t.root||null,this._sync=void 0===t.sync||!!t.sync,this._fallbackRoot=void 0===t.fallbackRoot||!!t.fallbackRoot,this._formatFallbackMessages=void 0!==t.formatFallbackMessages&&!!t.formatFallbackMessages,this._silentTranslationWarn=void 0!==t.silentTranslationWarn&&t.silentTranslationWarn,this._silentFallbackWarn=void 0!==t.silentFallbackWarn&&!!t.silentFallbackWarn,this._dateTimeFormatters={},this._numberFormatters={},this._path=new G,this._dataListeners=[],this._componentInstanceCreatedListener=t.componentInstanceCreatedListener||null,this._preserveDirectiveContent=void 0!==t.preserveDirectiveContent&&!!t.preserveDirectiveContent,this.pluralizationRules=t.pluralizationRules||{},this._warnHtmlInMessage=t.warnHtmlInMessage||"off",this._postTranslation=t.postTranslation||null,this.getChoiceIndex=function(t,i){var n,a,r=Object.getPrototypeOf(e);return r&&r.getChoiceIndex?r.getChoiceIndex.call(e,t,i):e.locale in e.pluralizationRules?e.pluralizationRules[e.locale].apply(e,[t,i]):(n=t,a=i,n=Math.abs(n),2===a?n?n>1?1:0:1:n?Math.min(n,2):0)},this._exist=function(t,i){return!(!t||!i||p(e._path.getPathValue(t,i))&&!t[i])},"warn"!==this._warnHtmlInMessage&&"error"!==this._warnHtmlInMessage||Object.keys(a).forEach((function(t){e._checkLocaleMessage(t,e._warnHtmlInMessage,a[t])})),this._initVM({locale:i,fallbackLocale:n,messages:a,dateTimeFormats:r,numberFormats:o})},J={vm:{configurable:!0},messages:{configurable:!0},dateTimeFormats:{configurable:!0},numberFormats:{configurable:!0},availableLocales:{configurable:!0},locale:{configurable:!0},fallbackLocale:{configurable:!0},formatFallbackMessages:{configurable:!0},missing:{configurable:!0},formatter:{configurable:!0},silentTranslationWarn:{configurable:!0},silentFallbackWarn:{configurable:!0},preserveDirectiveContent:{configurable:!0},warnHtmlInMessage:{configurable:!0},postTranslation:{configurable:!0}};K.prototype._checkLocaleMessage=function(t,e,i){var n=function(t,e,i,a){if(u(i))Object.keys(i).forEach((function(r){var o=i[r];u(o)?(a.push(r),a.push("."),n(t,e,o,a),a.pop(),a.pop()):(a.push(r),n(t,e,o,a),a.pop())}));else if(Array.isArray(i))i.forEach((function(i,r){u(i)?(a.push("["+r+"]"),a.push("."),n(t,e,i,a),a.pop(),a.pop()):(a.push("["+r+"]"),n(t,e,i,a),a.pop())}));else if(c(i)&&U.test(i)){var r="Detected HTML in message '"+i+"' of keypath '"+a.join("")+"' at '"+e+"'. Consider component interpolation with '<i18n>' to avoid XSS. See https://bit.ly/2ZqJzkp";"warn"===t?o(r):"error"===t&&function(t,e){"undefined"!=typeof console&&console.error("[vue-i18n] "+t)}(r)}};n(e,t,i,[])},K.prototype._initVM=function(t){var e=k.config.silent;k.config.silent=!0,this._vm=new k({data:t}),k.config.silent=e},K.prototype.destroyVM=function(){this._vm.$destroy()},K.prototype.subscribeDataChanging=function(t){this._dataListeners.push(t)},K.prototype.unsubscribeDataChanging=function(t){!function(t,e){if(t.length){var i=t.indexOf(e);i>-1&&t.splice(i,1)}}(this._dataListeners,t)},K.prototype.watchI18nData=function(){var t=this;return this._vm.$watch("$data",(function(){for(var e=t._dataListeners.length;e--;)k.nextTick((function(){t._dataListeners[e]&&t._dataListeners[e].$forceUpdate()}))}),{deep:!0})},K.prototype.watchLocale=function(){if(!this._sync||!this._root)return null;var t=this._vm;return this._root.$i18n.vm.$watch("locale",(function(e){t.$set(t,"locale",e),t.$forceUpdate()}),{immediate:!0})},K.prototype.onComponentInstanceCreated=function(t){this._componentInstanceCreatedListener&&this._componentInstanceCreatedListener(t,this)},J.vm.get=function(){return this._vm},J.messages.get=function(){return g(this._getMessages())},J.dateTimeFormats.get=function(){return g(this._getDateTimeFormats())},J.numberFormats.get=function(){return g(this._getNumberFormats())},J.availableLocales.get=function(){return Object.keys(this.messages).sort()},J.locale.get=function(){return this._vm.locale},J.locale.set=function(t){this._vm.$set(this._vm,"locale",t)},J.fallbackLocale.get=function(){return this._vm.fallbackLocale},J.fallbackLocale.set=function(t){this._localeChainCache={},this._vm.$set(this._vm,"fallbackLocale",t)},J.formatFallbackMessages.get=function(){return this._formatFallbackMessages},J.formatFallbackMessages.set=function(t){this._formatFallbackMessages=t},J.missing.get=function(){return this._missing},J.missing.set=function(t){this._missing=t},J.formatter.get=function(){return this._formatter},J.formatter.set=function(t){this._formatter=t},J.silentTranslationWarn.get=function(){return this._silentTranslationWarn},J.silentTranslationWarn.set=function(t){this._silentTranslationWarn=t},J.silentFallbackWarn.get=function(){return this._silentFallbackWarn},J.silentFallbackWarn.set=function(t){this._silentFallbackWarn=t},J.preserveDirectiveContent.get=function(){return this._preserveDirectiveContent},J.preserveDirectiveContent.set=function(t){this._preserveDirectiveContent=t},J.warnHtmlInMessage.get=function(){return this._warnHtmlInMessage},J.warnHtmlInMessage.set=function(t){var e=this,i=this._warnHtmlInMessage;if(this._warnHtmlInMessage=t,i!==t&&("warn"===t||"error"===t)){var n=this._getMessages();Object.keys(n).forEach((function(t){e._checkLocaleMessage(t,e._warnHtmlInMessage,n[t])}))}},J.postTranslation.get=function(){return this._postTranslation},J.postTranslation.set=function(t){this._postTranslation=t},K.prototype._getMessages=function(){return this._vm.messages},K.prototype._getDateTimeFormats=function(){return this._vm.dateTimeFormats},K.prototype._getNumberFormats=function(){return this._vm.numberFormats},K.prototype._warnDefault=function(t,e,i,n,a,r){if(!p(i))return i;if(this._missing){var o=this._missing.apply(null,[t,e,n,a]);if(c(o))return o}if(this._formatFallbackMessages){var l=f.apply(void 0,a);return this._render(e,r,l.params,e)}return e},K.prototype._isFallbackRoot=function(t){return!t&&!p(this._root)&&this._fallbackRoot},K.prototype._isSilentFallbackWarn=function(t){return this._silentFallbackWarn instanceof RegExp?this._silentFallbackWarn.test(t):this._silentFallbackWarn},K.prototype._isSilentFallback=function(t,e){return this._isSilentFallbackWarn(e)&&(this._isFallbackRoot()||t!==this.fallbackLocale)},K.prototype._isSilentTranslationWarn=function(t){return this._silentTranslationWarn instanceof RegExp?this._silentTranslationWarn.test(t):this._silentTranslationWarn},K.prototype._interpolate=function(t,e,i,n,a,r,o){if(!e)return null;var l,s=this._path.getPathValue(e,i);if(Array.isArray(s)||u(s))return s;if(p(s)){if(!u(e))return null;if(!c(l=e[i]))return null}else{if(!c(s))return null;l=s}return(l.indexOf("@:")>=0||l.indexOf("@.")>=0)&&(l=this._link(t,e,l,n,"raw",r,o)),this._render(l,a,r,i)},K.prototype._link=function(t,e,i,n,a,r,o){var l=i,s=l.match(Z);for(var c in s)if(s.hasOwnProperty(c)){var d=s[c],u=d.match(W),p=u[0],f=u[1],g=d.replace(p,"").replace(V,"");if(h(o,g))return l;o.push(g);var m=this._interpolate(t,e,g,n,"raw"===a?"string":a,"raw"===a?void 0:r,o);if(this._isFallbackRoot(m)){if(!this._root)throw Error("unexpected error");var C=this._root.$i18n;m=C._translate(C._getMessages(),C.locale,C.fallbackLocale,g,n,a,r)}m=this._warnDefault(t,g,m,n,Array.isArray(r)?r:[r],a),this._modifiers.hasOwnProperty(f)?m=this._modifiers[f](m):H.hasOwnProperty(f)&&(m=H[f](m)),o.pop(),l=m?l.replace(d,m):l}return l},K.prototype._render=function(t,e,i,n){var a=this._formatter.interpolate(t,i,n);return a||(a=q.interpolate(t,i,n)),"string"!==e||c(a)?a:a.join("")},K.prototype._appendItemToChain=function(t,e,i){var n=!1;return h(t,e)||(n=!0,e&&(n="!"!==e[e.length-1],e=e.replace(/!/g,""),t.push(e),i&&i[e]&&(n=i[e]))),n},K.prototype._appendLocaleToChain=function(t,e,i){var n,a=e.split("-");do{var r=a.join("-");n=this._appendItemToChain(t,r,i),a.splice(-1,1)}while(a.length&&!0===n);return n},K.prototype._appendBlockToChain=function(t,e,i){for(var n=!0,a=0;a<e.length&&"boolean"==typeof n;a++){var r=e[a];c(r)&&(n=this._appendLocaleToChain(t,r,i))}return n},K.prototype._getLocaleChain=function(t,e){if(""===t)return[];this._localeChainCache||(this._localeChainCache={});var i=this._localeChainCache[t];if(!i){e||(e=this.fallbackLocale),i=[];for(var n,a=[t];l(a);)a=this._appendBlockToChain(i,a,e);(a=c(n=l(e)?e:s(e)?e.default?e.default:null:e)?[n]:n)&&this._appendBlockToChain(i,a,null),this._localeChainCache[t]=i}return i},K.prototype._translate=function(t,e,i,n,a,r,o){for(var l,s=this._getLocaleChain(e,i),c=0;c<s.length;c++){var d=s[c];if(!p(l=this._interpolate(d,t[d],n,a,r,o,[n])))return l}return null},K.prototype._t=function(t,e,i,n){for(var a,r=[],o=arguments.length-4;o-- >0;)r[o]=arguments[o+4];if(!t)return"";var l=f.apply(void 0,r),s=l.locale||e,c=this._translate(i,s,this.fallbackLocale,t,n,"string",l.params);if(this._isFallbackRoot(c)){if(!this._root)throw Error("unexpected error");return(a=this._root).$t.apply(a,[t].concat(r))}return c=this._warnDefault(s,t,c,n,r,"string"),this._postTranslation&&null!=c&&(c=this._postTranslation(c,t)),c},K.prototype.t=function(t){for(var e,i=[],n=arguments.length-1;n-- >0;)i[n]=arguments[n+1];return(e=this)._t.apply(e,[t,this.locale,this._getMessages(),null].concat(i))},K.prototype._i=function(t,e,i,n,a){var r=this._translate(i,e,this.fallbackLocale,t,n,"raw",a);if(this._isFallbackRoot(r)){if(!this._root)throw Error("unexpected error");return this._root.$i18n.i(t,e,a)}return this._warnDefault(e,t,r,n,[a],"raw")},K.prototype.i=function(t,e,i){return t?(c(e)||(e=this.locale),this._i(t,e,this._getMessages(),null,i)):""},K.prototype._tc=function(t,e,i,n,a){for(var r,o=[],l=arguments.length-5;l-- >0;)o[l]=arguments[l+5];if(!t)return"";void 0===a&&(a=1);var s={count:a,n:a},c=f.apply(void 0,o);return c.params=Object.assign(s,c.params),o=null===c.locale?[c.params]:[c.locale,c.params],this.fetchChoice((r=this)._t.apply(r,[t,e,i,n].concat(o)),a)},K.prototype.fetchChoice=function(t,e){if(!t&&!c(t))return null;var i=t.split("|");return i[e=this.getChoiceIndex(e,i.length)]?i[e].trim():t},K.prototype.tc=function(t,e){for(var i,n=[],a=arguments.length-2;a-- >0;)n[a]=arguments[a+2];return(i=this)._tc.apply(i,[t,this.locale,this._getMessages(),null,e].concat(n))},K.prototype._te=function(t,e,i){for(var n=[],a=arguments.length-3;a-- >0;)n[a]=arguments[a+3];var r=f.apply(void 0,n).locale||e;return this._exist(i[r],t)},K.prototype.te=function(t,e){return this._te(t,this.locale,this._getMessages(),e)},K.prototype.getLocaleMessage=function(t){return g(this._vm.messages[t]||{})},K.prototype.setLocaleMessage=function(t,e){"warn"!==this._warnHtmlInMessage&&"error"!==this._warnHtmlInMessage||this._checkLocaleMessage(t,this._warnHtmlInMessage,e),this._vm.$set(this._vm.messages,t,e)},K.prototype.mergeLocaleMessage=function(t,e){"warn"!==this._warnHtmlInMessage&&"error"!==this._warnHtmlInMessage||this._checkLocaleMessage(t,this._warnHtmlInMessage,e),this._vm.$set(this._vm.messages,t,y({},this._vm.messages[t]||{},e))},K.prototype.getDateTimeFormat=function(t){return g(this._vm.dateTimeFormats[t]||{})},K.prototype.setDateTimeFormat=function(t,e){this._vm.$set(this._vm.dateTimeFormats,t,e),this._clearDateTimeFormat(t,e)},K.prototype.mergeDateTimeFormat=function(t,e){this._vm.$set(this._vm.dateTimeFormats,t,y(this._vm.dateTimeFormats[t]||{},e)),this._clearDateTimeFormat(t,e)},K.prototype._clearDateTimeFormat=function(t,e){for(var i in e){var n=t+"__"+i;this._dateTimeFormatters.hasOwnProperty(n)&&delete this._dateTimeFormatters[n]}},K.prototype._localizeDateTime=function(t,e,i,n,a){for(var r=e,o=n[r],l=this._getLocaleChain(e,i),s=0;s<l.length;s++){var c=l[s];if(r=c,!p(o=n[c])&&!p(o[a]))break}if(p(o)||p(o[a]))return null;var d=o[a],u=r+"__"+a,f=this._dateTimeFormatters[u];return f||(f=this._dateTimeFormatters[u]=new Intl.DateTimeFormat(r,d)),f.format(t)},K.prototype._d=function(t,e,i){if(!i)return new Intl.DateTimeFormat(e).format(t);var n=this._localizeDateTime(t,e,this.fallbackLocale,this._getDateTimeFormats(),i);if(this._isFallbackRoot(n)){if(!this._root)throw Error("unexpected error");return this._root.$i18n.d(t,i,e)}return n||""},K.prototype.d=function(t){for(var e=[],i=arguments.length-1;i-- >0;)e[i]=arguments[i+1];var n=this.locale,a=null;return 1===e.length?c(e[0])?a=e[0]:s(e[0])&&(e[0].locale&&(n=e[0].locale),e[0].key&&(a=e[0].key)):2===e.length&&(c(e[0])&&(a=e[0]),c(e[1])&&(n=e[1])),this._d(t,n,a)},K.prototype.getNumberFormat=function(t){return g(this._vm.numberFormats[t]||{})},K.prototype.setNumberFormat=function(t,e){this._vm.$set(this._vm.numberFormats,t,e),this._clearNumberFormat(t,e)},K.prototype.mergeNumberFormat=function(t,e){this._vm.$set(this._vm.numberFormats,t,y(this._vm.numberFormats[t]||{},e)),this._clearNumberFormat(t,e)},K.prototype._clearNumberFormat=function(t,e){for(var i in e){var n=t+"__"+i;this._numberFormatters.hasOwnProperty(n)&&delete this._numberFormatters[n]}},K.prototype._getNumberFormatter=function(t,e,i,n,a,r){for(var o=e,l=n[o],s=this._getLocaleChain(e,i),c=0;c<s.length;c++){var d=s[c];if(o=d,!p(l=n[d])&&!p(l[a]))break}if(p(l)||p(l[a]))return null;var u,f=l[a];if(r)u=new Intl.NumberFormat(o,Object.assign({},f,r));else{var g=o+"__"+a;(u=this._numberFormatters[g])||(u=this._numberFormatters[g]=new Intl.NumberFormat(o,f))}return u},K.prototype._n=function(t,e,i,n){if(!K.availabilities.numberFormat)return"";if(!i)return(n?new Intl.NumberFormat(e,n):new Intl.NumberFormat(e)).format(t);var a=this._getNumberFormatter(t,e,this.fallbackLocale,this._getNumberFormats(),i,n),r=a&&a.format(t);if(this._isFallbackRoot(r)){if(!this._root)throw Error("unexpected error");return this._root.$i18n.n(t,Object.assign({},{key:i,locale:e},n))}return r||""},K.prototype.n=function(t){for(var e=[],i=arguments.length-1;i-- >0;)e[i]=arguments[i+1];var n=this.locale,a=null,o=null;return 1===e.length?c(e[0])?a=e[0]:s(e[0])&&(e[0].locale&&(n=e[0].locale),e[0].key&&(a=e[0].key),o=Object.keys(e[0]).reduce((function(t,i){var n;return h(r,i)?Object.assign({},t,((n={})[i]=e[0][i],n)):t}),null)):2===e.length&&(c(e[0])&&(a=e[0]),c(e[1])&&(n=e[1])),this._n(t,n,a,o)},K.prototype._ntp=function(t,e,i,n){if(!K.availabilities.numberFormat)return[];if(!i)return(n?new Intl.NumberFormat(e,n):new Intl.NumberFormat(e)).formatToParts(t);var a=this._getNumberFormatter(t,e,this.fallbackLocale,this._getNumberFormats(),i,n),r=a&&a.formatToParts(t);if(this._isFallbackRoot(r)){if(!this._root)throw Error("unexpected error");return this._root.$i18n._ntp(t,e,i,n)}return r||[]},Object.defineProperties(K.prototype,J),Object.defineProperty(K,"availabilities",{get:function(){if(!z){var t="undefined"!=typeof Intl;z={dateTimeFormat:t&&void 0!==Intl.DateTimeFormat,numberFormat:t&&void 0!==Intl.NumberFormat}}return z}}),K.install=E,K.version="8.20.0";const Q=K,X={en:{editor:{run:"Run",errorInEditor:"Errors exist in code!",chartOK:"Chart has been generated successfully, ",darkMode:"Dark Mode",enableDecal:"Decal Pattern",renderCfgTitle:"Render",renderer:"Renderer",useDirtyRect:"Use Dirty Rect",download:"Download",edit:"Edit",monacoMode:"Enable Type Checking",tabEditor:"Edit Example",tabFullCodePreview:"Full Code",tabOptionPreview:"Option Preview",minimalBundle:"Minimal Bundle"},chartTypes:{line:"Line",bar:"Bar",pie:"Pie",scatter:"Scatter",map:"GEO/Map",candlestick:"Candlestick",radar:"Radar",boxplot:"Boxplot",heatmap:"Heatmap",graph:"Graph",lines:"Lines",tree:"Tree",treemap:"Treemap",sunburst:"Sunburst",parallel:"Parallel",sankey:"Sankey",funnel:"Funnel",gauge:"Gauge",pictorialBar:"PictorialBar",themeRiver:"ThemeRiver",calendar:"Calendar",custom:"Custom",dataset:"Dataset",dataZoom:"DataZoom",drag:"Drag",rich:"Rich Text",globe:"3D Globe",bar3D:"3D Bar",scatter3D:"3D Scatter",surface:"3D Surface",map3D:"3D Map",lines3D:"3D Lines",line3D:"3D Line",scatterGL:"Scatter GL",linesGL:"Lines GL",flowGL:"Flow GL",graphGL:"Graph GL"}},zh:{editor:{run:"运行",errorInEditor:"编辑器内容有误!",chartOK:"图表已生成, ",darkMode:"深色模式",enableDecal:"无障碍花纹",renderCfgTitle:"渲染设置",useDirtyRect:"开启脏矩形优化",renderer:"渲染模式",download:"下载示例",edit:"编辑",monacoMode:"开启类型检查",tabEditor:"示例编辑",tabFullCodePreview:"完整代码",tabOptionPreview:"配置项",minimalBundle:"按需引入"},chartTypes:{line:"折线图",bar:"柱状图",pie:"饼图",scatter:"散点图",map:"地理坐标/地图",candlestick:"K 线图",radar:"雷达图",boxplot:"盒须图",heatmap:"热力图",graph:"关系图",lines:"路径图",tree:"树图",treemap:"矩形树图",sunburst:"旭日图",parallel:"平行坐标系",sankey:"桑基图",funnel:"漏斗图",gauge:"仪表盘",pictorialBar:"象形柱图",themeRiver:"主题河流图",calendar:"日历坐标系",custom:"自定义系列",dataset:"数据集",dataZoom:"数据区域缩放",drag:"拖拽",rich:"富文本",globe:"3D 地球",bar3D:"3D 柱状图",scatter3D:"3D 散点图",surface:"3D 曲面",map3D:"3D 地图",lines3D:"3D 路径图",line3D:"3D 折线图",scatterGL:"GL 散点图",linesGL:"GL 路径图",flowGL:"GL 矢量场图",graphGL:"GL 关系图"}}};var Y=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{attrs:{id:"main-container"}},[t.shared.isMobile?t._e():i("div",{style:{width:t.leftContainerSize+"%"},attrs:{id:"editor-left-container"}},[i("el-tabs",{attrs:{type:"border-card"},model:{value:t.currentTab,callback:function(e){t.currentTab=e},expression:"currentTab"}},[i("el-tab-pane",{attrs:{label:t.$t("editor.tabEditor"),name:"code-editor"}},[i("el-container",[i("el-header",{attrs:{id:"editor-control-panel"}},[i("div",{attrs:{id:"code-info"}},[t.shared.editorStatus.message?[i("span",{staticClass:"code-info-time"},[t._v(t._s(t.currentTime))]),t._v(" "),i("span",{class:"code-info-type-"+t.shared.editorStatus.type},[t._v(t._s(t.shared.editorStatus.message))])]:t._e()],2),t._v(" "),i("div",{staticClass:"editor-controls"},[i("a",{staticClass:"btn btn-default btn-sm",attrs:{href:"javascript:;"},on:{click:t.disposeAndRun}},[t._v(t._s(t.$t("editor.run")))])])]),t._v(" "),i("el-main",[t.shared.typeCheck?i("CodeMonaco",{attrs:{id:"code-panel",initialCode:t.initialCode}}):i("CodeAce",{attrs:{id:"code-panel",initialCode:t.initialCode}})],1)],1)],1),t._v(" "),i("el-tab-pane",{attrs:{label:t.$t("editor.tabFullCodePreview"),name:"full-code",lazy:!0}},[i("el-container",{staticStyle:{width:"100%",height:"100%"}},[i("el-header",{attrs:{id:"full-code-generate-config"}},[i("span",{staticClass:"full-code-generate-config-label"}),t._v(" "),i("el-switch",{staticClass:"enable-decal",attrs:{"active-text":t.$t("editor.minimalBundle"),"inactive-text":""},model:{value:t.fullCodeConfig.minimal,callback:function(e){t.$set(t.fullCodeConfig,"minimal",e)},expression:"fullCodeConfig.minimal"}}),t._v(" "),i("el-switch",{staticClass:"enable-decal",attrs:{"active-text":"ES Modules","inactive-text":""},model:{value:t.fullCodeConfig.esm,callback:function(e){t.$set(t.fullCodeConfig,"esm",e)},expression:"fullCodeConfig.esm"}})],1),t._v(" "),i("el-main",[i("FullCodePreview",{attrs:{code:t.fullCode}})],1)],1)],1),t._v(" "),i("el-tab-pane",{attrs:{label:t.$t("editor.tabOptionPreview"),name:"full-option"}},[i("div",{attrs:{id:"option-outline"}})])],1)],1),t._v(" "),t.shared.isMobile?t._e():i("div",{staticClass:"handler",style:{left:t.leftContainerSize+"%"},attrs:{id:"h-handler"},on:{mousedown:t.onSplitterDragStart}}),t._v(" "),i("Preview",{ref:"preview",staticClass:"right-container",style:{width:100-t.leftContainerSize+"%",left:t.leftContainerSize+"%"},attrs:{inEditor:!0}})],1)};Y._withStripped=!0;var tt=function(){var t=this,e=t.$createElement;return(t._self._c||e)("div",{directives:[{name:"loading",rawName:"v-loading",value:t.loading,expression:"loading"}],staticClass:"ace-editor-main"})};tt._withStripped=!0;var et={grid:108210,series:1161721,pie:173151,legend:278319,right:12224,tooltip:188049,xAxis:374619,bar:182040,label:163527,emphasis:5e4,formatter:62138,line:306801,data:232156,left:24464,top:18094,scatter:48954,type:92134,yAxis:238764,axisLabel:73604,legendHoverLink:14243,textStyle:129159,hoverAnimation:9062,dataZoom:90999,nameLocation:15800,nameTextStyle:30596,nameGap:14640,singleAxis:15977,splitLine:30047,nameRotate:10483,inverse:12997,boundaryGap:18533,clockwise:4411,lineStyle:81857,selectedOffset:2984,width:17962,slider:28321,dataBackground:2287,areaStyle:19428,color:94439,height:7954,orient:17218,align:10373,symbol:35613,xAxisIndex:15405,stack:10602,clipOverflow:3229,center:9827,padding:12855,itemStyle:143518,itemGap:11914,shadowBlur:17233,shadowColor:13929,normal:211293,borderColor:20648,shadowOffsetX:11499,shadowOffsetY:9210,opacity:12301,heatmap:13825,value:21111,fillerColor:797,borderWidth:15576,itemWidth:7123,effectScatter:31179,coordinateSystem:15302,axisLine:53628,axisTick:38765,selectedMode:15177,fontSize:14906,inactiveColor:5720,selected:10921,gauge:55176,markLine:65539,handleStyle:1852,borderType:5717,title:158568,show:82e3,length:4814,zlevel:22293,labelPrecision:746,position:48349,labelFormatter:727,alignWithLabel:3785,interval:28810,showDetail:694,yAxisIndex:10560,showDataShadow:591,realtime:2611,onZero:3690,silent:22883,radar:61070,axisPointer:23175,trigger:15344,barCategoryGap:3511,splitNumber:19992,inside:32482,name:61072,showSymbol:4778,containLabel:6413,offset:15619,max:12538,backgroundColor:32864,visualMap:95262,fontStyle:14443,fontWeight:11970,fontFamily:10141,symbolSize:21077,blurSize:360,geo:65283,radius:8533,markArea:19906,map:102385,brush:29508,parallel:20673,parallelAxis:13713,gridIndex:20650,piecewise:25231,showContent:6960,zoom:3997,polar:23175,controller:2892,radiusAxis:24146,angleAxis:18771,toolbox:101543,timeline:34619,precision:3306,curveness:1378,x:2753,valueIndex:2807,itemHeight:5180,icon:10336,valueDim:2013,symbolOffset:10017,y:1590,transitionDuration:3814,radarIndex:715,extraCssText:3640,animation:17864,"animationThreshold = 2000":11727,minInterval:11278,animationDelay:7620,layoutCenter:2348,animationDurationUpdate:6972,animationEasingUpdate:6816,animationDelayUpdate:6642,symbolRotate:10221,feature:50238,axis:1794,crossStyle:1830,funnel:11042,scaleLimit:4792,roam:7112,itemSize:1966,showTitle:1851,smooth:5185,saveAsImage:9915,showAllSymbol:3417,polarIndex:5235,graph:76898,layout:2633,excludeComponents:447,restore:3693,dataView:10258,magicType:10505,iconStyle:9088,nodeScaleRatio:892,hoverLayerThreshold:6480,textAlign:9402,splitArea:16447,nameMap:4584,text:11691,pixelRatio:357,readOnly:491,optionToContent:936,lang:549,textareaColor:233,textareaBorderColor:177,option:2003,seriesIndex:4483,back:199,rect:323,polygon:254,min:16646,scale:14303,logBase:7456,start:2889,z:15867,link:5348,textBaseline:4210,subtext:5086,sublink:2618,subtarget:2373,subtextStyle:7732,triggerEvent:9175,blendMode:6359,progressiveThreshold:4699,continuous:42105,lines:31608,markPoint:81254,roseType:4221,animationEasing:8836,animationDuration:9562,calculable:3953,progressive:5761,treemap:16948,links:9573,edgeSymbol:1211,bottom:13969,edges:1122,edgeLabel:1685,edgeSymbolSize:769,focusNodeAdjacency:888,draggable:965,force:5601,geoIndex:2856,circular:1862,avoidLabelOverlap:3694,target:5476,coord:3995,startValue:2182,triggerOn:6741,showDelay:3535,alwaysShowContent:4928,enterable:3871,hideDelay:3018,step:3437,detail:5434,startAngle:5421,handleIcon:1051,handleSize:932,zoomLock:1979,throttle:1757,boxplot:6233,candlestick:14005,sankey:10101,loop:678,rewind:439,controlStyle:1269,labelLine:17838,distance:452,rotate:4666,margin:4342,barWidth:6641,category:1318,barGap:4832,nodes:2085,pieces:2683,smoothMonotone:2203,itemSymbol:882,axisType:902,currentIndex:583,effectType:1364,areaColor:2808,showEffectOn:1285,rippleEffect:3617,minAngle:2527,barMaxWidth:3073,rotateLabel:523,dimension:1922,end:1426,inRange:4604,outOfRange:2262,checkpointStyle:1036,sampling:2458,regions:6273,large:1055,showLegendSymbol:1600,layoutSize:1981,mapValueCalculation:1447,categories:4362,indicator:2995,barBorderRadius:1455,range:2009,connectNulls:3411,pointer:2665,effect:5446,parallelAxisDefault:927,coords:750,shadowStyle:1670,largeThreshold:754,hoverLink:1276,repulsion:865,textGap:1121,breadcrumb:828,baseline:1316,endAngle:895,period:1153,brushType:1421,minOpacity:216,brushLink:913,brushMode:465,transformable:418,brushStyle:507,throttleType:448,throttleDelay:369,removeOnClick:648,inBrush:500,outOfBrush:466,offsetCenter:981,barMinHeight:2279,parallelIndex:235,nodeClick:732,source:869,color0:210,filterMode:2252,tiled:352,autoPlay:496,playInterval:440,sort:484,polyline:929,initLayout:966,controlPosition:408,children:89,contentToOption:590,maxOpacity:215,squareRatio:281,leafDepth:347,zoomToNodeRatio:300,childrenVisibleMin:303,shape:1054,length2:891,endValue:1107,gravity:634,edgeLength:662,layoutAnimation:485,colorAlpha:389,constantSpeed:451,trailLength:530,dim:313,areaSelectStyle:253,funnelAlign:334,buttonTextColor:177,buttonColor:205,levels:2267,textColor:178,lineX:46,lineY:32,showPlayBtn:64,showPrevBtn:43,showNextBtn:43,playIcon:90,stopIcon:48,prevIcon:39,nextIcon:36,ellipsis:76,clear:114,colorMappingBy:424,maxSize:131,minSize:147,gap:175,visibleMin:315,axisExpandable:134,layoutIterations:226,nodeGap:158,nodeWidth:134,axisExpandCenter:79,axisExpandCount:56,axisExpandWidth:51,boxWidth:46,gapWidth:78,borderColorSaturation:56,inactiveOpacity:51,keep:41,colorSaturation:343,visualDimension:471,id:138,borderColor0:67,emptyItemWidth:60,activeOpacity:43,radiusAxisIndex:574,angleAxisIndex:478,textPosition:232,minOpen:194,maxOpen:125,graphic:5617,elements:3108,image:673,group:488,$action:82,style:431,textVerticalAlign:13,fill:55,stroke:47,lineWidth:34,sector:93,"bezier-curve":6,cpx2:1,cpy2:1,circle:256,arc:61,bezierCurve:61,onclick:101,onmouseover:32,font:17,bounding:75,cursor:54,themeRiver:11,confine:580,ring:103,ondragleave:3,ondragstart:4,ondragover:4,disabled:221,visualMin:44,visualMax:18,onmousemove:14,ondrag:8,ondragend:2,x2:7,x1:4,y1:2,y2:3,percent:6,ondrop:9,cx:7,smoothConstraint:20,cpx1:2,points:16,onmousewheel:13,onmouseout:7,barBorderWidth:2,ondragenter:2,onmouseup:1,cy:1,r:2,onmousedown:1,animationThreshold:1},it={};function nt(t){return Promise.all(t.map((function(t){if("string"==typeof t&&(t={url:t,type:t.match(/\.css$/)?"css":"js"}),it[t.url])return it[t.url];var e=new Promise((function(e,i){if("js"===t.type){var n=document.createElement("script");n.src=t.url,n.async=!1,n.onload=function(){e()},n.onerror=function(){i()},document.body.appendChild(n)}else if("css"===t.type){var a=document.createElement("link");a.rel="stylesheet",a.href=t.url,a.onload=function(){e()},a.onerror=function(){i()},document.body.appendChild(a)}}));return it[t.url]=e,e})))}var at=["line","bar","pie","scatter","map","candlestick","radar","boxplot","heatmap","graph","lines","tree","treemap","sunburst","parallel","sankey","funnel","gauge","pictorialBar","themeRiver","calendar","custom","dataset","dataZoom","drag","rich","globe","bar3D","scatter3D","surface","map3D","lines3D","line3D","scatterGL","linesGL","flowGL","graphGL"],rt=function(t){for(var e={},i=0;i<t.length;i++)e[t[i]]=1;return location.href.indexOf("github.io")>=0?{}:e}(["effectScatter-map","geo-lines","geo-map-scatter","heatmap-map","lines-airline","map-china","map-china-dataRange","map-labels","map-locate","map-province","map-world","map-world-dataRange","scatter-map","scatter-map-brush","scatter-weibo","scatter-world-population","geo3d","geo3d-with-different-height","globe-country-carousel","globe-with-echarts-surface","map3d-alcohol-consumption","map3d-wood-map","scattergl-weibo"]),ot={};(location.search||"").substr(1).split("&").forEach((function(t){var e=t.split("=");ot[e[0]]=e[1]}));var lt,st=((lt=document.createElement("canvas")).width=lt.height=1,!(!lt.getContext||!lt.getContext("2d"))&&0===lt.toDataURL("image/webp").indexOf("data:image/webp")),ct={localEChartsMinJS:"http://localhost/echarts/dist/echarts.js",echartsMinJS:"https://cdn.jsdelivr.net/npm/echarts@5.0.1/dist/echarts.min.js",echartsDir:"https://cdn.jsdelivr.net/npm/echarts@5.0.1",echartsStatMinJS:"https://cdn.jsdelivr.net/npm/echarts-stat@latest/dist/ecStat.min.js",echartsGLMinJS:"https://cdn.jsdelivr.net/npm/echarts-gl@2/dist/echarts-gl.min.js",datGUIMinJS:"https://cdn.jsdelivr.net/npm/dat.gui@0.6.5/build/dat.gui.min.js",monacoDir:"https://cdn.jsdelivr.net/npm/monaco-editor@0.21.2/min/vs",aceDir:"https://cdn.jsdelivr.net/npm/ace-builds@1.4.12/src-min-noconflict"},dt={cdnRoot:"",version:"",locale:"",darkMode:"dark"===ot.theme,enableDecal:"decal"in ot,renderer:ot.renderer||"canvas",typeCheck:"monaco"===ot.editor,useDirtyRect:"useDirtyRect"in ot,runCode:"",sourceCode:"",runHash:"",isMobile:window.innerWidth<600,editorStatus:{type:"",message:""}};function ut(){return new Promise((function(t){var e=ot.gl?"data-gl":"data";$.ajax("".concat(dt.cdnRoot,"/").concat(e,"/").concat(ot.c,".js?_v_").concat(dt.version),{dataType:"text",success:function(e){t(e)}})}))}function pt(t){return t.replace(/\/\*[\w\W]*?\*\//,"").trim()}var ft=123;function gt(t,e,i,n,a,r,o,l){var s,c="function"==typeof t?t.options:t;if(e&&(c.render=e,c.staticRenderFns=i,c._compiled=!0),n&&(c.functional=!0),r&&(c._scopeId="data-v-"+r),o?(s=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),a&&a.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(o)},c._ssrRegister=s):a&&(s=l?function(){a.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:a),s)if(c.functional){c._injectStyles=s;var d=c.render;c.render=function(t,e){return s.call(e),d(t,e)}}else{var u=c.beforeCreate;c.beforeCreate=u?[].concat(u,s):[s]}return{exports:t,options:c}}var ht=gt({props:["initialCode"],data:function(){return{shared:dt,loading:!1}},mounted:function(){var t=this;this.loading=!0,("undefined"==typeof ace?nt([ct.aceDir+"/ace.js",ct.aceDir+"/ext-language_tools.js"]).then((function(){var t=ace.require("ace/ext/language_tools"),e=[];for(var i in et)e.push({caption:i,value:i,score:et[i],metal:"local"});t.addCompleter({getCompletions:function(t,i,n,a,r){r(null,e)}})})):Promise.resolve()).then((function(){t.loading=!1;var e=ace.edit(t.$el);e.getSession().setMode("ace/mode/javascript"),e.setOptions({enableBasicAutocompletion:!0,enableSnippets:!0,enableLiveAutocompletion:!0}),t._editor=e,e.on("change",(function(){dt.sourceCode=dt.runCode=e.getValue()})),t.initialCode&&t.setInitialCode(t.initialCode)}))},methods:{setInitialCode:function(t){this._editor&&t&&(this._editor.setValue(t||""),this._editor.selection.setSelectionRange({start:{row:1,column:4},end:{row:1,column:4}}))}},watch:{initialCode:function(t){this.setInitialCode(t)}}},tt,[],!1,null,null,null);ht.options.__file="src/editor/CodeAce.vue";const mt=ht.exports;var Ct=function(){var t=this,e=t.$createElement;return(t._self._c||e)("div",{directives:[{name:"loading",rawName:"v-loading",value:t.loading,expression:"loading"}],staticClass:"monaco-editor-main"})};Ct._withStripped=!0;var yt=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{class:[t.inEditor&&!t.shared.isMobile?"":"full"]},[i("div",{directives:[{name:"loading",rawName:"v-loading",value:t.loading,expression:"loading"}],staticClass:"right-panel",style:{background:t.backgroundColor},attrs:{id:"chart-panel"}}),t._v(" "),i("div",{attrs:{id:"tool-panel"}},[i("div",{staticClass:"left-panel"},[i("el-switch",{staticClass:"dark-mode",attrs:{"active-color":"#181432","active-text":t.$t("editor.darkMode"),"inactive-text":""},model:{value:t.shared.darkMode,callback:function(e){t.$set(t.shared,"darkMode",e)},expression:"shared.darkMode"}}),t._v(" "),t.isGL?t._e():i("el-switch",{staticClass:"enable-decal",attrs:{"active-text":t.$t("editor.enableDecal"),"inactive-text":""},model:{value:t.shared.enableDecal,callback:function(e){t.$set(t.shared,"enableDecal",e)},expression:"shared.enableDecal"}}),t._v(" "),t.isGL?t._e():i("el-popover",{staticStyle:{"margin-top":"3px"},attrs:{placement:"bottom",width:"450",trigger:"click"}},[i("div",{staticClass:"render-config-container"},[i("el-row",{attrs:{gutter:2,type:"flex",align:"middle"}},[i("el-col",{attrs:{span:12}},[i("label",{staticClass:"tool-label"},[t._v(t._s(t.$t("editor.renderer")))]),t._v(" "),i("el-radio-group",{staticStyle:{"text-transform":"uppercase"},attrs:{size:"mini"},model:{value:t.shared.renderer,callback:function(e){t.$set(t.shared,"renderer",e)},expression:"shared.renderer"}},[i("el-radio-button",{attrs:{label:"svg"}}),t._v(" "),i("el-radio-button",{attrs:{label:"canvas"}})],1)],1),t._v(" "),i("el-col",{attrs:{span:12}},["canvas"===t.shared.renderer?i("el-switch",{attrs:{"active-text":t.$t("editor.useDirtyRect"),"inactive-text":""},model:{value:t.shared.useDirtyRect,callback:function(e){t.$set(t.shared,"useDirtyRect",e)},expression:"shared.useDirtyRect"}}):t._e()],1)],1)],1),t._v(" "),i("span",{staticClass:"render-config-trigger",attrs:{slot:"reference"},slot:"reference"},[i("i",{staticClass:"el-icon-setting el-icon--left"}),t._v(t._s(t.$t("editor.renderCfgTitle")))])])],1),t._v(" "),t.inEditor?[t.shared.isMobile?t._e():i("button",{staticClass:"download btn btn-sm",on:{click:t.downloadExample}},[t._v(t._s(t.$t("editor.download")))]),t._v(" "),i("a",{staticClass:"screenshot",attrs:{target:"_blank"},on:{click:t.screenshot}},[i("i",{staticClass:"el-icon-camera-solid"})])]:i("a",{staticClass:"edit btn btn-sm",attrs:{href:t.editLink,target:"_blank"}},[t._v(t._s(t.$t("editor.edit")))])],2)])};yt._withStripped=!0;var vt=function(){function t(t){var e=this.dom=document.createElement("div");for(var i in e.className="ec-debug-dirty-rect",t=Object.assign({},t),Object.assign(t,{backgroundColor:"rgba(0, 0, 255, 0.2)",border:"1px solid #00f"}),e.style.cssText="\nposition: absolute;\nopacity: 0;\ntransition: opacity 0.5s linear;\npointer-events: none;\n",t)t.hasOwnProperty(i)&&(e.style[i]=t[i])}return t.prototype.update=function(t){var e=this.dom.style;e.width=t.width+"px",e.height=t.height+"px",e.left=t.x+"px",e.top=t.y+"px"},t.prototype.hide=function(){this.dom.style.opacity="0"},t.prototype.show=function(){var t=this;clearTimeout(this._hideTimeout),this.dom.style.opacity="1",this._hideTimeout=setTimeout((function(){t.hide()}),500)},t}();function bt(t){return(bt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var _t=i(279),Lt=i.n(_t);let wt=null,xt=null;function kt(t,e={}){let i=document.createElement(t);return Object.keys(e).forEach((t=>{i[t]=e[t]})),i}function St(t,e,i){return(window.getComputedStyle(t,i||null)||{display:"none"})[e]}function Nt(t){if(!document.documentElement.contains(t))return{detached:!0,rendered:!1};let e=t;for(;e!==document;){if("none"===St(e,"display"))return{detached:!1,rendered:!1};e=e.parentNode}return{detached:!1,rendered:!0}}let Mt=0,Tt=null;function Ot(t,e){if(t.__resize_mutation_handler__||(t.__resize_mutation_handler__=At.bind(t)),!t.__resize_listeners__)if(t.__resize_listeners__=[],window.ResizeObserver){let{offsetWidth:e,offsetHeight:i}=t,n=new ResizeObserver((()=>{(t.__resize_observer_triggered__||(t.__resize_observer_triggered__=!0,t.offsetWidth!==e||t.offsetHeight!==i))&&Et(t)})),{detached:a,rendered:r}=Nt(t);t.__resize_observer_triggered__=!1===a&&!1===r,t.__resize_observer__=n,n.observe(t)}else if(t.attachEvent&&t.addEventListener)t.__resize_legacy_resize_handler__=function(){Et(t)},t.attachEvent("onresize",t.__resize_legacy_resize_handler__),document.addEventListener("DOMSubtreeModified",t.__resize_mutation_handler__);else if(Mt||(Tt=function(t){var e=document.createElement("style");return e.type="text/css",e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t)),(document.querySelector("head")||document.body).appendChild(e),e}('.resize-triggers{visibility:hidden;opacity:0;pointer-events:none}.resize-contract-trigger,.resize-contract-trigger:before,.resize-expand-trigger,.resize-triggers{content:"";position:absolute;top:0;left:0;height:100%;width:100%;overflow:hidden}.resize-contract-trigger,.resize-expand-trigger{background:#eee;overflow:auto}.resize-contract-trigger:before{width:200%;height:200%}')),function(t){let e=St(t,"position");e&&"static"!==e||(t.style.position="relative"),t.__resize_old_position__=e,t.__resize_last__={};let i=kt("div",{className:"resize-triggers"}),n=kt("div",{className:"resize-expand-trigger"}),a=kt("div"),r=kt("div",{className:"resize-contract-trigger"});n.appendChild(a),i.appendChild(n),i.appendChild(r),t.appendChild(i),t.__resize_triggers__={triggers:i,expand:n,expandChild:a,contract:r},Pt(t),t.addEventListener("scroll",Dt,!0),t.__resize_last__={width:t.offsetWidth,height:t.offsetHeight}}(t),t.__resize_rendered__=Nt(t).rendered,window.MutationObserver){let e=new MutationObserver(t.__resize_mutation_handler__);e.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0}),t.__resize_mutation_observer__=e}t.__resize_listeners__.push(e),Mt++}function At(){let{rendered:t,detached:e}=Nt(this);t!==this.__resize_rendered__&&(!e&&this.__resize_triggers__&&(Pt(this),this.addEventListener("scroll",Dt,!0)),this.__resize_rendered__=t,Et(this))}function Dt(){var t,e;Pt(this),this.__resize_raf__&&(t=this.__resize_raf__,xt||(xt=(window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||function(t){clearTimeout(t)}).bind(window)),xt(t)),this.__resize_raf__=(e=()=>{let t=function(t){let{width:e,height:i}=t.__resize_last__,{offsetWidth:n,offsetHeight:a}=t;return n!==e||a!==i?{width:n,height:a}:null}(this);t&&(this.__resize_last__=t,Et(this))},wt||(wt=(window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(t){return setTimeout(t,16)}).bind(window)),wt(e))}function Et(t){t&&t.__resize_listeners__&&t.__resize_listeners__.forEach((e=>{e.call(t,t)}))}function Pt(t){let{expand:e,expandChild:i,contract:n}=t.__resize_triggers__,{scrollWidth:a,scrollHeight:r}=n,{offsetWidth:o,offsetHeight:l,scrollWidth:s,scrollHeight:c}=e;n.scrollLeft=a,n.scrollTop=r,i.style.width=o+1+"px",i.style.height=l+1+"px",e.scrollLeft=s,e.scrollTop=c}const Ft=[{category:["bar"],id:"bar-background",tags:[],title:"Bar with Background",titleCN:"带背景色的柱状图",difficulty:0},{category:["custom"],id:"bar-histogram",tags:[],title:"Histogram with Custom Series",titleCN:"直方图(自定义系列)",difficulty:0},{category:["bar"],id:"bar-simple",tags:[],title:"Basic Bar",titleCN:"基础柱状图",difficulty:0},{category:["bar"],id:"bar-tick-align",tags:[],title:"Axis Align with Tick",titleCN:"坐标轴刻度与标签对齐",difficulty:0},{category:["calendar"],id:"calendar-simple",tags:[],title:"Simple Calendar",titleCN:"基础日历图",difficulty:0},{category:["candlestick"],id:"candlestick-simple",tags:[],title:"Basic Candlestick",titleCN:"基础 K 线图",difficulty:0},{category:["dataset","bar","transform"],id:"data-transform-sort-bar",tags:[],title:"Sort Data in Bar Chart",titleCN:"柱状图排序",difficulty:0},{category:["heatmap"],id:"heatmap-cartesian",tags:[],title:"Heatmap on Cartesian",titleCN:"笛卡尔坐标系上的热力图",difficulty:0},{category:["line"],id:"line-simple",tags:[],title:"Basic Line Chart",titleCN:"基础折线图",difficulty:0},{category:["line"],id:"line-smooth",tags:[],title:"Smoothed Line Chart",titleCN:"基础平滑折线图",difficulty:0},{category:["pie"],id:"pie-simple",tags:[],title:"Referer of a website",titleCN:"某站点用户访问来源",difficulty:0},{category:["radar"],id:"radar",tags:[],title:"Basic Radar Chart",titleCN:"基础雷达图",difficulty:0},{category:["sankey"],id:"sankey-simple",tags:[],title:"Basic Sankey",titleCN:"基础桑基图",difficulty:0},{category:["scatter"],id:"scatter-simple",tags:[],title:"Basic Scatter Chart",titleCN:"基础散点图",difficulty:0},{category:["line"],id:"area-basic",tags:[],title:"Basic area chart",titleCN:"基础面积图",difficulty:1},{category:["bar"],id:"bar-data-color",tags:[],title:"Set Style of Single Bar.",titleCN:"自定义单个柱子颜色",difficulty:1},{category:["bar"],id:"bar-waterfall",tags:[],title:"Waterfall Chart",titleCN:"瀑布图(柱状图模拟)",difficulty:1},{category:["calendar","heatmap"],id:"calendar-heatmap",tags:[],title:"Calendar Heatmap",titleCN:"日历热力图",difficulty:1},{category:["calendar","heatmap"],id:"calendar-vertical",tags:[],title:"Calendar Heatmap Vertical",titleCN:"纵向日历图",difficulty:1},{category:["candlestick"],id:"custom-ohlc",tags:[],title:"OHLC Chart",titleCN:"OHLC 图(使用自定义系列)",difficulty:1},{category:["custom"],id:"custom-profit",tags:[],title:"Profit",titleCN:"利润分布直方图",difficulty:1},{category:["dataset","bar"],id:"dataset-encode0",tags:[],title:"Simple Encode",titleCN:"指定数据到坐标轴的映射",difficulty:1},{category:["gauge"],id:"gauge",tags:[],title:"Gauge Basic chart",titleCN:"基础仪表盘",difficulty:1},{category:["gauge"],id:"gauge-simple",tags:[],title:"Simple Gauge",titleCN:"带标签数字动画的基础仪表盘",difficulty:1},{category:["graph"],id:"graph-force2",tags:[],title:"Force Layout",titleCN:"力引导布局",difficulty:1},{category:["line"],id:"line-stack",tags:[],title:"Stacked Line Chart",titleCN:"折线图堆叠",difficulty:1},{category:["parallel"],id:"parallel-simple",tags:[],title:"Basic Parallel",titleCN:"基础平行坐标",difficulty:1},{category:["pie"],id:"pie-borderRadius",tags:[],title:"Doughnut Chart with Rounded Corner",titleCN:"圆角环形图",difficulty:1},{category:["pie"],id:"pie-doughnut",tags:[],title:"Doughnut Chart",titleCN:"环形图",difficulty:1},{category:["radar"],id:"radar-aqi",tags:[],title:"AQI - Radar Chart",titleCN:"AQI - 雷达图",difficulty:1},{category:["sankey"],id:"sankey-vertical",tags:[],title:"Sankey Orient Vertical",titleCN:"垂直方向的桑基图",difficulty:1},{category:["scatter"],id:"scatter-anscombe-quartet",tags:[],title:"Anscomb's quartet",titleCN:"Anscomb's quartet",difficulty:1},{category:["scatter"],id:"scatter-clustering",tags:[],title:"Clustering Process",titleCN:"数据聚合",difficulty:1},{category:["scatter"],id:"scatter-clustering-process",tags:[],title:"Clustering Process",titleCN:"聚合过程可视化",difficulty:1},{category:["scatter"],id:"scatter-exponential-regression",tags:[],title:"Exponential Regression",titleCN:"指数回归(使用统计插件)",difficulty:1},{category:["sunburst"],id:"sunburst-simple",tags:[],title:"Basic Sunburst",titleCN:"基础旭日图",difficulty:1},{category:["line"],id:"area-stack",tags:[],title:"Stacked area chart",titleCN:"堆叠面积图",difficulty:2},{category:["line"],id:"area-stack-gradient",tags:[],title:"Gradient Stacked area chart",titleCN:"渐变堆叠面积图",difficulty:2},{category:["bar"],id:"bar-negative2",tags:[],title:"Bar Chart with Negative Value",titleCN:"交错正负轴标签",difficulty:2},{category:["bar"],id:"bar-y-category",tags:[],title:"World Total Population",titleCN:"世界人口总量 - 条形图",difficulty:2},{category:["calendar"],id:"calendar-horizontal",tags:[],title:"Calendar Heatmap Horizontal",titleCN:"横向日力图",difficulty:2},{category:["candlestick"],id:"candlestick-sh",tags:[],title:"ShangHai Index",titleCN:"上证指数",difficulty:2},{category:["custom","dataZoom"],id:"custom-error-scatter",tags:[],title:"Error Scatter on Catesian",titleCN:"使用自定系列给散点图添加误差范围",difficulty:2},{category:["scatter"],id:"effectScatter-map",tags:[],title:"Air Quality",titleCN:"全国主要城市空气质量",difficulty:2},{category:["gauge"],id:"gauge-speed",tags:[],title:"Speed Gauge",titleCN:"速度仪表盘",difficulty:2},{category:["graph"],id:"graph-grid",tags:[],title:"Graph on Cartesian",titleCN:"笛卡尔坐标系上的 Graph",difficulty:2},{category:["graph"],id:"graph-simple",tags:[],title:"Simple Graph",titleCN:"Graph 简单示例",difficulty:2},{category:["heatmap"],id:"heatmap-large",tags:[],title:"Heatmap - 2w data",titleCN:"热力图 - 2w 数据",difficulty:2},{category:["heatmap"],id:"heatmap-large-piecewise",tags:[],title:"Heatmap - Discrete Mapping of Color",titleCN:"热力图 - 颜色的离散映射",difficulty:2},{category:["line"],id:"line-marker",tags:[],title:"Temperature Change in the coming week",titleCN:"未来一周气温变化",difficulty:2},{category:["parallel"],id:"parallel-aqi",tags:[],title:"Parallel Aqi",titleCN:"AQI 分布(平行坐标)",difficulty:2},{category:["pie"],id:"pie-custom",tags:[],title:"Customized Pie",titleCN:"饼图自定义样式",difficulty:2},{category:["pie"],id:"pie-pattern",tags:[],title:"Texture on Pie Chart",titleCN:"饼图纹理",difficulty:2},{category:["pie"],id:"pie-roseType",tags:[],title:"Nightingale's Rose Diagram",titleCN:"南丁格尔玫瑰图",difficulty:2},{category:["pie"],id:"pie-roseType-simple",tags:[],title:"Nightingale's Rose Diagram",titleCN:"基础南丁格尔玫瑰图",difficulty:2},{category:["radar"],id:"radar-custom",tags:[],title:"Customized Radar Chart",titleCN:"自定义雷达图",difficulty:2},{category:["sankey"],id:"sankey-itemstyle",tags:[],title:"Specify ItemStyle for Each Node in Sankey",titleCN:"桑基图节点自定义样式",difficulty:2},{category:["sankey"],id:"sankey-levels",tags:[],title:"Sankey with Levels Setting",titleCN:"桑基图层级自定义样式",difficulty:2},{category:["scatter"],id:"scatter-effect",tags:[],title:"Effect Scatter Chart",titleCN:"涟漪特效散点图",difficulty:2},{category:["scatter"],id:"scatter-linear-regression",tags:[],title:"Linear Regression",titleCN:"线性回归(使用统计插件)",difficulty:2},{category:["scatter"],id:"scatter-polynomial-regression",tags:[],title:"Polynomial Regression",titleCN:"多项式回归(使用统计插件)",difficulty:2},{category:["sunburst"],id:"sunburst-borderRadius",tags:[],title:"Sunburst with Rounded Corner",titleCN:"圆角旭日图",difficulty:2},{category:["sunburst"],id:"sunburst-label-rotate",tags:[],title:"Sunburst Label Rotate",titleCN:"旭日图标签旋转",difficulty:2},{category:["line","visualMap"],id:"area-pieces",tags:[],title:"Area Pieces",titleCN:"折线图区域高亮",difficulty:3},{category:["bar"],id:"bar-gradient",tags:[],title:"Clickable Column Chart with Gradient",titleCN:"特性示例:渐变色 阴影 点击缩放",difficulty:3},{category:["bar"],id:"bar-label-rotation",tags:[],title:"Bar Label Rotation",titleCN:"柱状图标签旋转",difficulty:3},{category:["bar"],id:"bar-stack",tags:[],title:"Stacked Column Chart",titleCN:"堆叠柱状图",difficulty:3},{category:["bar"],id:"bar-waterfall2",tags:[],title:"Waterfall Chart",titleCN:"阶梯瀑布图(柱状图模拟)",difficulty:3},{category:["bar"],id:"bar-y-category-stack",tags:[],title:"Stacked Horizontal Bar",titleCN:"堆叠条形图",difficulty:3},{category:["candlestick"],id:"candlestick-large",tags:[],title:"Large Scale Candlestick",titleCN:"大数据量K线图",difficulty:3},{category:["custom"],id:"custom-bar-trend",tags:[],title:"Custom Bar Trend",titleCN:"使用自定义系列添加柱状图趋势",difficulty:3},{category:["custom"],id:"custom-cartesian-polygon",tags:[],title:"Custom Cartesian Polygon",titleCN:"自定义多边形图",difficulty:3},{category:["custom"],id:"custom-error-bar",tags:[],title:"Error Bar on Catesian",titleCN:"使用自定系列给柱状图添加误差范围",difficulty:3},{category:["custom"],id:"custom-profile",tags:[],title:"Profile",titleCN:"性能分析图",difficulty:3},{category:["custom"],id:"cycle-plot",tags:[],title:"Cycle Plot",titleCN:"Cycle Plot",difficulty:3},{category:["line"],id:"data-transform-filter",tags:[],title:"Data Transform Fitler",titleCN:"数据过滤",difficulty:3},{category:["dataset","pie","transform"],id:"data-transform-multiple-pie",tags:[],title:"Partition Data to Pies",titleCN:"分割数据到数个饼图",difficulty:3},{category:["dataset","pie"],id:"dataset-default",tags:[],title:"Default arrangement",titleCN:"默认 encode 设置",difficulty:3},{category:["dataset"],id:"dataset-encode1",tags:[],title:"Encode and Matrix",titleCN:"指定数据到坐标轴的映射",difficulty:3},{category:["gauge"],id:"gauge-progress",tags:[],title:"Grogress Gauge",titleCN:"进度仪表盘",difficulty:3},{category:["gauge"],id:"gauge-stage",tags:[],title:"Stage Speed Gauge",titleCN:"阶段速度仪表盘",difficulty:3},{category:["graph"],id:"graph-force",tags:[],title:"Force Layout",titleCN:"力引导布局",difficulty:3},{category:["graph"],id:"graph-label-overlap",tags:[],title:"Hide Overlapped Label",titleCN:"关系图自动隐藏重叠标签",difficulty:3},{category:["heatmap"],id:"heatmap-bmap",tags:["bmap"],title:"Heatmap on Baidu Map Extension",titleCN:"热力图与百度地图扩展",difficulty:3},{category:["heatmap"],id:"heatmap-map",tags:[],title:"Air Qulity",titleCN:"全国主要城市空气质量",difficulty:3},{category:["line"],id:"line-gradient",tags:[],title:"Line Gradient",titleCN:"折线图的渐变",difficulty:3},{category:["line"],id:"line-sections",tags:[],title:"Distribution of Electricity",titleCN:"一天用电量分布",difficulty:3},{category:["pie"],id:"pie-alignTo",tags:[],title:"Pie Label Align",titleCN:"饼图标签对齐",difficulty:3},{category:["pie"],id:"pie-labelLine-adjust",tags:[],title:"Label Line Adjust",titleCN:"饼图引导线调整",difficulty:3},{category:["radar"],id:"radar2",tags:[],title:"Proportion of Browsers",titleCN:"浏览器占比变化",difficulty:3},{category:["sankey"],id:"sankey-energy",tags:[],title:"Gradient Edge",titleCN:"桑基图渐变色边",difficulty:3},{category:["sankey"],id:"sankey-nodeAlign-left",tags:[],title:"Node Align Left in Sankey",titleCN:"桑基图左对齐布局",difficulty:3},{category:["sankey"],id:"sankey-nodeAlign-right",tags:[],title:"Node Align Right in Sankey",titleCN:"桑基图右对齐布局",difficulty:3},{category:["scatter"],id:"scatter-punchCard",tags:[],title:"Punch Card of Github",titleCN:"GitHub 打卡气泡图",difficulty:3},{category:["scatter"],id:"scatter-single-axis",tags:[],title:"Scatter on Single Axis",titleCN:"单轴散点图",difficulty:3},{category:["scatter"],id:"scatter-weight",tags:[],title:"Distribution of Height and Weight",titleCN:"男性女性身高体重分布",difficulty:3},{category:["sunburst"],id:"sunburst-monochrome",tags:[],title:"Monochrome Sunburst",titleCN:"Monochrome Sunburst",difficulty:3},{category:["line","dataZoom"],id:"area-simple",tags:[],title:"Large scale area chart",titleCN:"大数据量面积图",difficulty:4},{category:["bar"],id:"bar-brush",tags:[],title:"Brush Select on Column Chart",titleCN:"柱状图框选",difficulty:4},{category:["bar"],id:"bar-negative",tags:[],title:"Bar Chart with Negative Value",titleCN:"正负条形图",difficulty:4},{category:["bar"],id:"bar1",tags:[],title:"Rainfall and Evaporation",titleCN:"某地区蒸发量和降水量",difficulty:4},{category:["calendar","graph"],id:"calendar-graph",tags:[],title:"Calendar Graph",titleCN:"日历关系图",difficulty:4},{category:["calendar"],id:"calendar-lunar",tags:[],title:"Calendar Lunar",titleCN:"农历日历图",difficulty:4},{category:["candlestick"],id:"candlestick-touch",tags:[],title:"Axis Pointer Link and Touch",titleCN:"触屏上的坐标轴指示器",difficulty:4},{category:["line"],id:"confidence-band",tags:[],title:"Confidence Band",titleCN:"Confidence Band",difficulty:4},{category:["custom","dataZoom","drag"],id:"custom-gantt-flight",tags:[],title:"Gantt Chart of Airport Flights",titleCN:"机场航班甘特图",difficulty:4},{category:["custom"],id:"custom-polar-heatmap",tags:[],title:"Polar Heatmap",titleCN:"极坐标热力图(自定义系列)",difficulty:4},{category:["boxplot"],id:"data-transform-aggregate",tags:[],title:"Data Transform Simple Aggregate",titleCN:"简单的数据聚合",difficulty:4},{category:["gauge"],id:"gauge-grade",tags:[],title:"Grade Gauge",titleCN:"等级仪表盘",difficulty:4},{category:["gauge"],id:"gauge-multi-title",tags:[],title:"Multi Title Gauge",titleCN:"多标题仪表盘",difficulty:4},{category:["gauge"],id:"gauge-temperature",tags:[],title:"Temperature Gauge chart",titleCN:"气温仪表盘",difficulty:4},{category:["graph"],id:"graph",tags:[],title:"Les Miserables",titleCN:"悲惨世界人物关系图",difficulty:4},{category:["line"],id:"grid-multiple",tags:[],title:"Rainfall and Water Flow",titleCN:"雨量流量关系图",difficulty:4},{category:["line"],id:"line-aqi",tags:[],title:"Beijing AQI",titleCN:"北京 AQI 可视化",difficulty:4},{category:["bar"],id:"mix-line-bar",tags:[],title:"Mixed Line and Bar",titleCN:"折柱混合",difficulty:4},{category:["bar"],id:"mix-zoom-on-value",tags:[],title:"Mix Zoom On Value",titleCN:"多数值轴轴缩放",difficulty:4},{category:["line"],id:"multiple-x-axis",tags:[],title:"Multiple X Axes",titleCN:"多 X 轴",difficulty:4},{category:["bar"],id:"multiple-y-axis",tags:[],title:"Multiple Y Axes",titleCN:"多 Y 轴示例",difficulty:4},{category:["parallel"],id:"parallel-nutrients",tags:[],title:"Parallel Nutrients",titleCN:"营养结构(平行坐标)",difficulty:4},{category:["pie"],id:"pie-legend",tags:[],title:"Pie with Scrollable Legend",titleCN:"可滚动的图例",difficulty:4},{category:["pie","rich"],id:"pie-rich-text",tags:[],title:"Pie Special Label",titleCN:"富文本标签",difficulty:4},{category:["scatter"],id:"scatter-label-align-right",tags:[],title:"Align Label on the Top",titleCN:"散点图标签顶部对齐",difficulty:4},{category:["scatter"],id:"scatter-label-align-top",tags:[],title:"Align Label on the Top",titleCN:"散点图标签顶部对齐",difficulty:4},{category:["sunburst"],id:"sunburst-visualMap",tags:[],title:"Sunburst VisualMap",titleCN:"旭日图使用视觉编码",difficulty:4},{category:["line"],id:"area-rainfall",tags:[],title:"Rainfall",titleCN:"雨量流量关系图",difficulty:5},{category:["line"],id:"area-time-axis",tags:[],title:"Area Chart with Time Axis",titleCN:"时间轴折线图",difficulty:5},{category:["bar"],id:"bar-animation-delay",tags:[],title:"Animation Delay",titleCN:"柱状图动画延迟",difficulty:5},{category:["bar"],id:"bar-large",tags:[],title:"Large Scale Bar Chart",titleCN:"大数据量柱图",difficulty:5},{category:["bar"],id:"bar-race",tags:[],title:"Bar Race",titleCN:"动态排序柱状图",difficulty:5},{category:["dataset","line","pie"],id:"dataset-link",tags:[],title:"Share Dataset",titleCN:"联动和共享数据集",difficulty:5},{category:["dataset","bar"],id:"dataset-series-layout-by",tags:[],title:"Series Layout By Column or Row",titleCN:"系列按行和按列排布",difficulty:5},{category:["dataset","bar"],id:"dataset-simple0",tags:[],title:"Simple Example of Dataset",titleCN:"最简单的数据集(dataset)",difficulty:5},{category:["dataset","bar"],id:"dataset-simple1",tags:[],title:"Dataset in Object Array",titleCN:"对象数组的输入格式",difficulty:5},{category:["line"],id:"dynamic-data2",tags:[],title:"Dynamic Data + Time Axis",titleCN:"动态数据 + 时间坐标轴",difficulty:5},{category:["gauge"],id:"gauge-ring",tags:[],title:"Ring Gauge",titleCN:"得分环",difficulty:5},{category:["graph"],id:"graph-circular-layout",tags:[],title:"Les Miserables",titleCN:"悲惨世界人物关系图(环形布局)",difficulty:5},{category:["line"],id:"line-function",tags:[],title:"Function Plot",titleCN:"函数绘图",difficulty:5},{category:["line"],id:"line-race",tags:[],title:"Line Race",titleCN:"动态排序折线图",difficulty:5},{category:["pie","rich"],id:"pie-nest",tags:[],title:"Nested Pies",titleCN:"嵌套环形图",difficulty:5},{category:["scatter"],id:"scatter-large",tags:[],title:"Large Scatter",titleCN:"大规模散点图",difficulty:5},{category:["scatter"],id:"scatter-nebula",tags:[],title:"Scatter Nebula",titleCN:"大规模星云散点图",difficulty:5},{category:["scatter"],id:"scatter-stream-visual",tags:[],title:"Visual interaction with stream",titleCN:"流式渲染和视觉映射操作",difficulty:5},{category:["sunburst"],id:"sunburst-drink",tags:[],title:"Drink Flavors",titleCN:"Drink Flavors",difficulty:5},{category:["custom","dataZoom"],id:"wind-barb",tags:[],title:"Wind Barb",titleCN:"风向图",difficulty:5},{category:["bar"],id:"bar-race-country",tags:[],title:"Bar Race",titleCN:"动态排序柱状图 - 人均收入",difficulty:6},{category:["bar","rich"],id:"bar-rich-text",tags:[],title:"Wheater Statistics",titleCN:"天气统计(富文本)",difficulty:6},{category:["scatter"],id:"bubble-gradient",tags:[],title:"Bubble Chart",titleCN:"气泡图",difficulty:6},{category:["calendar","pie"],id:"calendar-pie",tags:[],title:"Calendar Pie",titleCN:"日历饼图",difficulty:6},{category:["custom","map"],id:"custom-hexbin",tags:[],title:"Hexagonal Binning",titleCN:"六边形分箱图(自定义系列)",difficulty:6},{category:["bar"],id:"dynamic-data",tags:[],title:"Dynamic Data",titleCN:"动态数据",difficulty:6},{category:["gauge"],id:"gauge-barometer",tags:[],title:"Gauge Barometer chart",titleCN:"气压表",difficulty:6},{category:["graph"],id:"graph-force-dynamic",tags:[],title:"Graph Dynamic",titleCN:"动态增加图节点",difficulty:6},{category:["line"],id:"line-markline",tags:[],title:"Line with Marklines",titleCN:"折线图的标记线",difficulty:6},{category:["line"],id:"line-style",tags:[],title:"Line Style and Item Style",titleCN:"自定义折线图样式",difficulty:6},{category:["bar"],id:"mix-timeline-finance",tags:[],title:"Finance Indices 2002",titleCN:"2002全国宏观经济指标",difficulty:6},{category:["sunburst"],id:"sunburst-book",tags:[],title:"Book Records",titleCN:"书籍分布",difficulty:6},{category:["bar"],id:"watermark",tags:[],title:"Watermark - ECharts Download",titleCN:"水印 - ECharts 下载统计",difficulty:6},{category:["bar"],id:"bar-polar-real-estate",tags:[],title:"Bar Chart on Polar",difficulty:7},{category:["bar"],id:"bar-polar-stack",tags:[],title:"Stacked Bar Chart on Polar",titleCN:"极坐标系下的堆叠柱状图",difficulty:7},{category:["bar"],id:"bar-polar-stack-radial",tags:[],title:"Stacked Bar Chart on Polar(Radial)",titleCN:"极坐标系下的堆叠柱状图",difficulty:7},{category:["custom","calendar"],id:"custom-calendar-icon",tags:[],title:"Custom Calendar Icon",titleCN:"日历图自定义图标",difficulty:7},{category:["custom"],id:"custom-wind",tags:[],title:"Use custom series to draw wind vectors",titleCN:"使用自定义系列绘制风场",difficulty:7},{category:["gauge"],id:"gauge-clock",tags:[],title:"Clock Gauge",titleCN:"时钟仪表盘",difficulty:7},{category:["graph"],id:"graph-life-expectancy",tags:[],title:"Graph Life Expectancy",titleCN:"Graph Life Expectancy",difficulty:7},{category:["line"],id:"line-in-cartesian-coordinate-system",tags:[],title:"Line Chart in Cartesian Coordinate System",titleCN:"双数值轴折线图",difficulty:7},{category:["line"],id:"line-log",tags:[],title:"Log Axis",titleCN:"对数轴示例",difficulty:7},{category:["line"],id:"line-step",tags:[],title:"Step Line",titleCN:"阶梯折线图",difficulty:7},{category:["bar"],id:"polar-roundCap",tags:[],title:"Rounded Bar on Polar",titleCN:"圆角环形图",difficulty:7},{category:["scatter"],id:"scatter-aqi-color",tags:[],title:"Scatter Aqi Color",titleCN:"AQI 气泡图",difficulty:7},{category:["scatter"],id:"scatter-nutrients",tags:[],title:"Scatter Nutrients",titleCN:"营养分布散点图",difficulty:7},{category:["scatter"],id:"scatter-nutrients-matrix",tags:[],title:"Scatter Nutrients Matrix",titleCN:"营养分布散点矩阵",difficulty:7},{category:["gauge"],id:"gauge-car",tags:[],title:"Gauge Car",titleCN:"Gauge Car",difficulty:8},{category:["graph"],id:"graph-webkit-dep",tags:[],title:"Graph Webkit Dep",titleCN:"WebKit 模块关系依赖图",difficulty:8},{category:["line"],id:"line-easing",tags:[],title:"Line Easing Visualizing",titleCN:"缓动函数可视化",difficulty:8},{category:["line"],id:"line-y-category",tags:[],title:"Line Y Category",titleCN:"垂直折线图(Y轴为类目轴)",difficulty:8},{category:["scatter"],id:"scatter-polar-punchCard",tags:[],title:"Punch Card of Github",titleCN:"GitHub 打卡气泡图(极坐标)",difficulty:8},{category:["custom"],id:"custom-aggregate-scatter-bar",tags:[],title:"Aggregate Morphing Between Scatter and Bar",titleCN:"聚合分割形变(散点图 - 柱状图)",difficulty:9},{category:["custom"],id:"custom-aggregate-scatter-pie",tags:[],title:"Aggregate Morphing Between Scatter and Pie",titleCN:"聚合分割形变(散点图 - 饼图)",difficulty:9},{category:["custom"],id:"custom-gauge",tags:[],title:"Custom Gauge",titleCN:"自定义仪表",difficulty:9},{category:["graph"],id:"graph-npm",tags:[],title:"NPM Dependencies",titleCN:"NPM 依赖关系图",difficulty:9},{category:["line"],id:"line-graphic",tags:[],title:"Custom Graphic Component",titleCN:"自定义图形组件",difficulty:9},{category:["line"],id:"line-pen",tags:[],title:"Click to Add Points",titleCN:"点击添加折线图拐点",difficulty:9},{category:["scatter"],id:"scatter-life-expectancy-timeline",tags:[],title:"Life Expectancy and GDP",titleCN:"各国人均寿命与GDP关系演变",difficulty:9},{category:["scatter"],id:"scatter-painter-choice",tags:[],title:"Master Painter Color Choices Throughout History",titleCN:"Master Painter Color Choices Throughout History",difficulty:9},{category:["boxplot"],id:"boxplot-light-velocity",tags:[],title:"Boxplot Light Velocity",titleCN:"基础盒须图",difficulty:10},{category:["boxplot"],id:"boxplot-light-velocity2",tags:[],title:"Boxplot Light Velocity2",titleCN:"垂直方向盒须图",difficulty:10},{category:["boxplot"],id:"boxplot-multi",tags:[],title:"Multiple Categories",titleCN:"多系列盒须图",difficulty:10},{category:[],id:"calendar-effectscatter",tags:[],difficulty:10},{category:["candlestick"],id:"candlestick-brush",tags:[],title:"Candlestick Brush",titleCN:"日力图刷选",difficulty:10},{category:["candlestick"],id:"candlestick-sh-2015",tags:[],title:"ShangHai Index, 2015",titleCN:"2015 年上证指数",difficulty:10},{category:[],id:"covid-america",tags:[],difficulty:10},{category:["custom"],id:"custom-aggregate-scatter-cluster",tags:[],title:"Aggregate Morphing Between Scatter Clustering",titleCN:"聚合分割形变(散点图聚类)",difficulty:10},{category:["scatter","map"],id:"effectScatter-bmap",tags:["bmap"],title:"Air Quality - Baidu Map",titleCN:"全国主要城市空气质量 - 百度地图",difficulty:10},{category:["funnel"],id:"funnel",tags:[],title:"Funnel Chart",titleCN:"漏斗图",difficulty:10},{category:["funnel"],id:"funnel-align",tags:[],title:"Funnel (align)",titleCN:"漏斗图(对比)",difficulty:10},{category:["funnel"],id:"funnel-customize",tags:[],title:"Customized Funnel",titleCN:"漏斗图",difficulty:10},{category:["funnel"],id:"funnel-mutiple",tags:[],title:"Multiple Funnels",titleCN:"漏斗图",difficulty:10},{category:["map"],id:"geo-lines",tags:[],title:"Migration",titleCN:"模拟迁徙",difficulty:10},{category:["map"],id:"geo-map-scatter",tags:[],title:"map and scatter share a geo",titleCN:"map and scatter share a geo",difficulty:10},{category:["line","drag"],id:"line-draggable",tags:[],title:"Try Dragging these Points",titleCN:"可拖拽点",difficulty:10},{category:["line"],id:"line-polar",tags:[],title:"Two Value-Axes in Polar",titleCN:"极坐标双数值轴",difficulty:10},{category:["line"],id:"line-polar2",tags:[],title:"Two Value-Axes in Polar",titleCN:"极坐标双数值轴",difficulty:10},{category:["line","dataZoom"],id:"line-tooltip-touch",tags:[],title:"Tooltip and DataZoom on Mobile",titleCN:"移动端上的 dataZoom 和 tooltip",difficulty:10},{category:["map","lines"],id:"lines-airline",tags:[],title:"65k+ Airline",titleCN:"65k+ 飞机航线",difficulty:10},{category:["map","lines"],id:"lines-bmap",tags:["bmap"],title:"A Hiking Trail in Hangzhou - Baidu Map",titleCN:"杭州热门步行路线 - 百度地图",difficulty:10},{category:["map","lines"],id:"lines-bmap-bus",tags:["bmap"],title:"Bus Lines of Beijing - Baidu Map",titleCN:"北京公交路线 - 百度地图",difficulty:10},{category:["map","lines"],id:"lines-bmap-effect",tags:["bmap"],title:"Bus Lines of Beijing - Line Effect",titleCN:"北京公交路线 - 线特效",difficulty:10},{category:["map","lines"],id:"lines-ny",tags:[],title:"Use lines to draw 1 million ny streets.",titleCN:"使用线图绘制近 100 万的纽约街道数据",difficulty:10},{category:["map"],id:"map-bin",tags:["bmap"],title:"Binning on Map",titleCN:"Binning on Map",difficulty:10},{category:["map"],id:"map-china",tags:[],title:"Map China",titleCN:"Map China",difficulty:10},{category:["map"],id:"map-china-dataRange",tags:[],title:"Sales of iphone",titleCN:"iphone销量",difficulty:10},{category:["map"],id:"map-HK",tags:[],title:"Population Density of HongKong (2011)",titleCN:"香港18区人口密度 (2011)",difficulty:10},{category:["map"],id:"map-labels",tags:[],title:"Rich Text Labels on Map",titleCN:"地图上的富文本标签",difficulty:10},{category:["map"],id:"map-locate",tags:[],title:"Map Locate",titleCN:"Map Locate",difficulty:10},{category:["map"],id:"map-polygon",tags:["bmap"],title:"Draw Polygon on Map",titleCN:"在地图上绘制多边形",difficulty:10},{category:["map"],id:"map-province",tags:[],title:"Switch among 34 Provinces",titleCN:"34 省切换查看",difficulty:10},{category:["map"],id:"map-usa",tags:[],title:"USA Population Estimates (2012)",titleCN:"USA Population Estimates (2012)",difficulty:10},{category:["map"],id:"map-world",tags:[],title:"Map World",titleCN:"Map World",difficulty:10},{category:["map"],id:"map-world-dataRange",tags:[],title:"World Population (2010)",titleCN:"World Population (2010)",difficulty:10},{category:["pictorialBar"],id:"pictorialBar-body-fill",tags:[],title:"Water Content",titleCN:"人体含水量",difficulty:10},{category:["pictorialBar"],id:"pictorialBar-dotted",tags:[],title:"Dotted bar",titleCN:"虚线柱状图效果",difficulty:10},{category:["pictorialBar"],id:"pictorialBar-forest",tags:[],title:"Expansion of forest",titleCN:"森林的增长",difficulty:10},{category:["pictorialBar"],id:"pictorialBar-hill",tags:[],title:"Wish List and Mountain Height",titleCN:"圣诞愿望清单和山峰高度",difficulty:10},{category:["pictorialBar"],id:"pictorialBar-spirit",tags:[],title:"Spirits",titleCN:"精灵",difficulty:10},{category:["pictorialBar"],id:"pictorialBar-vehicle",tags:[],title:"Vehicles",titleCN:"交通工具",difficulty:10},{category:["pictorialBar"],id:"pictorialBar-velocity",tags:[],title:"Velocity of Christmas Reindeers",titleCN:"驯鹿的速度",difficulty:10},{category:["radar"],id:"radar-multiple",tags:[],title:"Multiple Radar",titleCN:"多雷达图",difficulty:10},{category:["scatter"],id:"scatter-map",tags:[],title:"Air Quality",titleCN:"全国主要城市空气质量",difficulty:10},{category:["scatter"],id:"scatter-map-brush",tags:[],title:"Scatter Map Brush",titleCN:"Scatter Map Brush",difficulty:10},{category:["parallel","scatter"],id:"scatter-matrix",tags:[],title:"Scatter Matrix",titleCN:"散点矩阵和平行坐标",difficulty:10},{category:["scatter"],id:"scatter-weibo",tags:[],title:"Sign in of weibo",titleCN:"微博签到数据点亮中国",difficulty:10},{category:["scatter"],id:"scatter-world-population",tags:[],title:"World Population (2011)",titleCN:"World Population (2011)",difficulty:10},{category:["themeRiver"],id:"themeRiver-basic",tags:[],title:"ThemeRiver",titleCN:"主题河流图",difficulty:10},{category:["themeRiver"],id:"themeRiver-lastfm",tags:[],title:"ThemeRiver Lastfm",titleCN:"ThemeRiver Lastfm",difficulty:10},{category:["tree"],id:"tree-basic",tags:[],title:"From Left to Right Tree",titleCN:"从左到右树状图",difficulty:10},{category:["tree"],id:"tree-legend",tags:[],title:"Multiple Trees",titleCN:"多棵树",difficulty:10},{category:["tree"],id:"tree-orient-bottom-top",tags:[],title:"From Bottom to Top Tree",titleCN:"从下到上树状图",difficulty:10},{category:["tree"],id:"tree-orient-right-left",tags:[],title:"From Right to Left Tree",titleCN:"从右到左树状图",difficulty:10},{category:["tree"],id:"tree-polyline",tags:[],title:"Tree with Polyline Edge",titleCN:"折线树图",difficulty:10},{category:["tree"],id:"tree-radial",tags:[],title:"Radial Tree",titleCN:"径向树状图",difficulty:10},{category:["tree"],id:"tree-vertical",tags:[],title:"From Top to Bottom Tree",titleCN:"从上到下树状图",difficulty:10},{category:["treemap"],id:"treemap-disk",tags:[],title:"Disk Usage",titleCN:"磁盘占用",difficulty:10},{category:["treemap"],id:"treemap-drill-down",tags:[],title:"ECharts Option Query",titleCN:"ECharts 配置项查询分布",difficulty:10},{category:["treemap"],id:"treemap-obama",tags:[],title:"How $3.7 Trillion is Spent",titleCN:"How $3.7 Trillion is Spent",difficulty:10},{category:["treemap"],id:"treemap-show-parent",tags:[],title:"Show Parent Labels",titleCN:"显示父层级标签",difficulty:10},{category:["treemap"],id:"treemap-simple",tags:[],title:"Basic Treemap",titleCN:"基础矩形树图",difficulty:10},{category:["treemap"],id:"treemap-visual",tags:[],title:"Gradient Mapping",titleCN:"映射为渐变色",difficulty:10},{category:["calendar","scatter"],id:"calendar-charts",tags:[],title:"Calendar Charts",titleCN:"日力图",difficulty:11},{category:["custom"],id:"circle-packing-with-d3",tags:[],title:"Circle Packing with d3",titleCN:"Circle Packing with d3",difficulty:11},{category:["custom"],id:"custom-one-to-one-morph",tags:[],title:"One-to-one Morphing",titleCN:"一对一映射形变",difficulty:11},{category:["custom"],id:"custom-spiral-race",tags:[],title:"Custom Spiral Race",titleCN:"自定义螺旋线竞速",difficulty:11},{category:["custom"],id:"custom-story-transition",tags:[],title:"Simple Story Transition",titleCN:"极简场景变换示例",difficulty:11},{category:["scatter"],id:"scatter-logarithmic-regression",tags:[],title:"Logarithmic Regression",titleCN:"对数回归(使用统计插件)",difficulty:16}],Rt=[{category:["globe"],id:"animating-contour-on-globe",tags:[],title:"Animating Contour on Globe",titleCN:"Animating Contour on Globe",difficulty:10},{category:["bar3D"],id:"bar3d-dataset",tags:[],title:"3D Bar with Dataset",titleCN:"使用 dataset 为三维柱状图设置数据",difficulty:10},{category:["bar3D"],id:"bar3d-global-population",tags:[],title:"Bar3D - Global Population",titleCN:"Bar3D - Global Population",difficulty:10},{category:["bar3D"],id:"bar3d-myth",tags:[],title:"星云",titleCN:"星云",difficulty:10},{category:["bar3D"],id:"bar3d-noise-modified-from-marpi-demo",tags:[],title:"Noise modified from marpi's demo",titleCN:"Noise modified from marpi's demo",difficulty:10},{category:["bar3D"],id:"bar3d-punch-card",tags:[],title:"Bar3D - Punch Card",titleCN:"Bar3D - Punch Card",difficulty:10},{category:["bar3D"],id:"bar3d-simplex-noise",tags:[],theme:"dark",title:"Bar3D - Simplex Noise",titleCN:"Bar3D - Simplex Noise",difficulty:10},{category:["bar3D"],id:"bar3d-voxelize-image",tags:[],title:"Voxelize image",titleCN:"Voxelize image",difficulty:10},{category:["flowGL"],id:"flowGL-noise",tags:[],theme:"dark",title:"Flow on the cartesian",titleCN:"直角坐标系上的向量场",difficulty:10},{category:["geo3D"],id:"geo3d",tags:[],title:"Geo3D",titleCN:"Geo3D",difficulty:10},{category:["geo3D"],id:"geo3d-with-different-height",tags:[],title:"Geo3D with Different Height",titleCN:"Geo3D with Different Height",difficulty:10},{category:["bar3D"],id:"global-population-bar3d-on-globe",tags:[],title:"Global Population - Bar3D on Globe",titleCN:"Global Population - Bar3D on Globe",difficulty:10},{category:["flowGL"],id:"global-wind-visualization",tags:[],title:"Global wind visualization",titleCN:"Global wind visualization",difficulty:10},{category:["flowGL"],id:"global-wind-visualization-2",tags:[],title:"Global Wind Visualization 2",titleCN:"Global Wind Visualization 2",difficulty:10},{category:["globe"],id:"globe-atmosphere",tags:[],title:"Globe with Atmosphere",titleCN:"大气层显示",difficulty:10},{category:["globe"],id:"globe-contour-paint",tags:[],title:"Contour Paint",titleCN:"Contour Paint",difficulty:10},{category:["globe"],id:"globe-country-carousel",tags:[],title:"Country Carousel",titleCN:"Country Carousel",difficulty:10},{category:["globe"],id:"globe-displacement",tags:[],title:"Globe Displacement",titleCN:"Globe Displacement",difficulty:10},{category:["globe"],id:"globe-echarts-gl-hello-world",tags:[],title:"ECharts-GL Hello World",titleCN:"ECharts-GL Hello World",difficulty:10},{category:["globe"],id:"globe-layers",tags:[],title:"Globe Layers",titleCN:"Globe Layers",difficulty:10},{category:["globe"],id:"globe-moon",tags:[],title:"Moon",titleCN:"Moon",difficulty:10},{category:["globe"],id:"globe-with-echarts-surface",tags:[],title:"Globe with ECharts Surface",titleCN:"Globe with ECharts Surface",difficulty:10},{category:["graphGL"],id:"graphgl-gpu-layout",tags:[],theme:"dark",title:"GraphGL GPU Layout",titleCN:"GraphGL GPU Layout",difficulty:10},{category:["graphGL"],id:"graphgl-large-internet",tags:[],theme:"dark",title:"GraphGL - Large Internet",titleCN:"GraphGL - Large Internet",difficulty:10},{category:["graphGL"],id:"graphgl-npm-dep",tags:[],theme:"dark",title:"NPM Dependencies with graphGL",titleCN:"1w 节点 2w7 边的NPM 依赖图",difficulty:10},{category:["surface"],id:"image-surface-sushuang",tags:[],title:"Image Surface Sushuang",titleCN:"Image Surface Sushuang",difficulty:10},{category:["bar3D"],id:"image-to-bar3d",tags:[],title:"Image to Bar3D",titleCN:"Image to Bar3D",difficulty:10},{category:["globe"],id:"iron-globe",tags:[],title:"Iron globe",titleCN:"Iron globe",difficulty:10},{category:["line3D"],id:"line3d-orthographic",tags:[],title:"三维折线图正交投影",titleCN:"三维折线图正交投影",difficulty:10},{category:["lines3D"],id:"lines3d-airline-on-globe",tags:[],title:"Airline on Globe",titleCN:"Airline on Globe",difficulty:10},{category:["lines3D"],id:"lines3d-flights",tags:[],title:"Flights",titleCN:"Flights",difficulty:10},{category:["lines3D"],id:"lines3d-flights-gl",tags:[],title:"Flights GL",titleCN:"Flights GL",difficulty:10},{category:["lines3D"],id:"lines3d-flights-on-geo3d",tags:[],title:"Flights on Geo3D",titleCN:"Flights on Geo3D",difficulty:10},{category:["linesGL"],id:"linesGL-ny",tags:[],title:"Use linesGL to draw 1 million ny streets.",titleCN:"实时交互的纽约街道可视化",difficulty:10},{category:["map3D"],id:"map3d-alcohol-consumption",tags:[],title:"Map3D - Alcohol Consumption",titleCN:"Map3D - Alcohol Consumption",difficulty:10},{category:["map3D"],id:"map3d-buildings",tags:[],title:"Buildings",titleCN:"Buildings",difficulty:10},{category:["map3D"],id:"map3d-wood-city",tags:[],title:"Wood City",titleCN:"Wood City",difficulty:10},{category:["map3D"],id:"map3d-wood-map",tags:[],title:"木质世界地图",titleCN:"木质世界地图",difficulty:10},{category:["bar3D"],id:"metal-bar3d",tags:[],title:"Metal Bar3D",titleCN:"Metal Bar3D",difficulty:10},{category:["surface"],id:"metal-surface",tags:[],title:"Metal Surface",titleCN:"Metal Surface",difficulty:10},{category:["surface"],id:"parametric-surface-rose",tags:[],title:"Parametric Surface Rose",titleCN:"Parametric Surface Rose",difficulty:10},{category:["scatter3D"],id:"scatter3d",tags:[],theme:"dark",title:"Scatter3D",titleCN:"Scatter3D",difficulty:10},{category:["scatter3D"],id:"scatter3D-dataset",tags:[],title:"3D Scatter with Dataset",titleCN:"使用 dataset 为三维散点图设置数据",difficulty:10},{category:["scatter3D"],id:"scatter3d-globe-population",tags:[],title:"Scatter3D - Globe Population",titleCN:"Scatter3D - Globe Population",difficulty:10},{category:["scatter3D"],id:"scatter3d-orthographic",tags:[],theme:"dark",title:"三维散点图正交投影",titleCN:"三维散点图正交投影",difficulty:10},{category:["scatter3D"],id:"scatter3d-scatter",tags:[],title:"3D Scatter with Scatter Matrix",titleCN:"三维散点图和散点矩阵结合使用",difficulty:10},{category:["scatter3D"],id:"scatter3d-simplex-noise",tags:[],theme:"dark",title:"Scatter3D - Simplex Noise",titleCN:"Scatter3D - Simplex Noise",difficulty:10},{category:["scatterGL"],id:"scatterGL-gps",tags:[],title:"10 million Bulk GPS points",titleCN:"1 千万 GPS 点可视化",difficulty:10},{category:["scatterGL"],id:"scattergl-weibo",tags:[],theme:"dark",title:"微博签到数据点亮中国",titleCN:"微博签到数据点亮中国",difficulty:10},{category:["surface"],id:"simple-surface",tags:[],title:"Simple Surface",titleCN:"Simple Surface",difficulty:10},{category:["surface"],id:"sphere-parametric-surface",tags:[],title:"Sphere Parametric Surface",titleCN:"Sphere Parametric Surface",difficulty:10},{category:["bar3D"],id:"stacked-bar3d",tags:[],title:"Stacked Bar3D",titleCN:"Stacked Bar3D",difficulty:10},{category:["surface"],id:"surface-breather",tags:[],title:"Breather",titleCN:"Breather",difficulty:10},{category:["surface"],id:"surface-golden-rose",tags:[],title:"Golden Rose",titleCN:"Golden Rose",difficulty:10},{category:["surface"],id:"surface-leather",tags:[],title:"皮革材质",titleCN:"皮革材质",difficulty:10},{category:["surface"],id:"surface-mollusc-shell",tags:[],title:"Mollusc Shell",titleCN:"Mollusc Shell",difficulty:10},{category:["surface"],id:"surface-theme-roses",tags:[],title:"Theme Roses",titleCN:"Theme Roses",difficulty:10},{category:["surface"],id:"surface-wave",tags:[],title:"Surface Wave",titleCN:"Surface Wave",difficulty:10},{category:["bar3D"],id:"transparent-bar3d",tags:[],title:"Transparent Bar3D",titleCN:"Transparent Bar3D",difficulty:10}];var Bt=dt.sourceCode.indexOf("ROOT_PATH")>=0?"var ROOT_PATH = '".concat(dt.cdnRoot,"'"):"";function It(t){return function(t){if(Array.isArray(t))return jt(t)}(t)||function(t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return jt(t,e);var i=Object.prototype.toString.call(t).slice(8,-1);return"Object"===i&&t.constructor&&(i=t.constructor.name),"Map"===i||"Set"===i?Array.from(t):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?jt(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function jt(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}function Gt(t){return ot.c===t.id}var $t=Ft.concat(Rt).find(Gt),zt=Rt.find(Gt);function Ut(t){dt.enableDecal&&(t.aria=t.aria||{},t.aria.decal=t.aria.decal||{},t.aria.decal.show=!0,t.aria.show=t.aria.enabled=!0)}function Zt(){if("undefined"==typeof echarts){var t=$t&&$t.tags.indexOf("bmap")>=0;return t&&(window.HOST_TYPE="2",window.BMap_loadScriptTime=(new Date).getTime()),nt([ct.datGUIMinJS,"local"in ot?ct.localEChartsMinJS:ct.echartsMinJS,ct.echartsDir+"/dist/extension/dataTool.js","https://cdn.jsdelivr.net/npm/echarts@4.9.0/map/js/world.js",ct.echartsStatMinJS].concat(It(ot.gl?[ct.echartsGLMinJS]:[]),It(t?["https://api.map.baidu.com/getscript?v=2.0&ak=KOmVjPVUAey1G2E8zNhPiuQ6QiEmAwZu&services=&t=20200327103013",ct.echartsDir+"/dist/extension/bmap.js"]:[]))).then((function(){echarts.registerPreprocessor(Ut)}))}return Promise.resolve()}function Wt(t,e){"warn"!==e&&"error"!==e&&(e="info"),dt.editorStatus.message=t,dt.editorStatus.type=e}var Vt=gt({props:["inEditor"],data:function(){return{shared:dt,debouncedTime:void 0,backgroundColor:"",autoRun:!0,loading:!1,isGL:zt}},mounted:function(){var t=this;this.loading=!0,Zt().then((function(){t.loading=!1,dt.runCode&&t.run()})),Ot(this.$el,(function(){t.sandbox&&t.sandbox.resize()}))},computed:{editLink:function(){var t=["c="+ot.c];return ot.theme&&t.push(["theme="+ot.theme]),ot.gl&&t.push(["gl="+ot.gl]),"./editor.html?"+t.join("&")}},watch:{"shared.runCode":function(t){!this.autoRun&&this.sandbox||(this.debouncedRun?this.debouncedRun():this.run())},"shared.renderer":function(){this.refreshAll()},"shared.darkMode":function(){this.refreshAll()},"shared.enableDecal":function(){this.refreshAll()},"shared.useDirtyRect":function(){this.refreshAll()}},methods:{run:function t(){var e=this;if("undefined"!=typeof echarts){this.sandbox||(this.sandbox=function(t){var e,i={},n=[],a=[],r=window.setTimeout,o=window.setInterval;function l(t,e){var i=r(t,e);return a.push(i),i}function s(t,e){var i=o(t,e);return n.push(i),i}var c,d=[];return{resize:function(){c&&c.resize()},dispose:function(){c&&(c.dispose(),c=null)},getDataURL:function(){return c.getDataURL({pixelRatio:2,excludeComponents:["toolbox"]})},getOption:function(){return c.getOption()},run:function(r,o){if(!c){if(c=echarts.init(r,o.darkMode?"dark":"",{renderer:o.renderer,useDirtyRect:o.useDirtyRect}),o.useDirtyRect&&"canvas"===o.renderer)try{!function(t,e){e=e||{};var i=t.painter;if(!i.getLayers)throw new Error("Debug dirty rect can only been used on canvas renderer.");if(i.isSingleCanvas())throw new Error("Debug dirty rect can only been used on zrender inited with container.");var n=document.createElement("div");n.style.cssText="\nposition:absolute;\nleft:0;\ntop:0;\nright:0;\nbottom:0;\npointer-events:none;\n",n.className="ec-debug-dirty-rect-container";var a=[],r=t.dom;r.appendChild(n),"static"===getComputedStyle(r).position&&(r.style.position="relative"),t.on("rendered",(function(){if(i.getLayers){var t=0;i.eachBuiltinLayer((function(i){if(i.debugGetPaintRects)for(var r=i.debugGetPaintRects(),o=0;o<r.length;o++)a[t]||(a[t]=new vt(e.style),n.appendChild(a[t].dom)),a[t].show(),a[t].update(r[o]),t++}));for(var r=t;r<a.length;r++)a[r].hide()}}))}(c.getZr(),{autoHideDelay:500})}catch(t){console.error(t)}p=(u=c).on,f=u.setOption,u.on=function(t){var e=p.apply(u,arguments);return d.push(t),e},u.setOption=function(){var e=f.apply(this,arguments);return t&&t(u),e}}var u,p,f;!function(){for(var t=0;t<n.length;t++)clearInterval(n[t]);for(t=0;t<a.length;t++)clearTimeout(a[t]);n=[],a=[]}(),function(t){d.forEach((function(e){t&&t.off(e)})),d.length=0}(c),i.config=null;var g=o.runCode,h=new Function("myChart","app","setTimeout","setInterval","ROOT_PATH","var option;\n"+g+"\nreturn option;")(c,i,l,s,o.cdnRoot),m=0;if(h&&"object"===bt(h)){var C=+new Date;c.setOption(h,!0),m=+new Date-C}if(e&&($(e.domElement).remove(),e.destroy(),e=null),i.config){e=new dat.GUI({autoPlace:!1}),$(e.domElement).css({position:"absolute",right:5,top:0,zIndex:1e3}),$(".right-container").append(e.domElement);var y=i.configParameters||{};for(var v in i.config){var b=i.config[v];if("onChange"!==v&&"onFinishChange"!==v){var _=!1,L=null;if(y[v]&&(y[v].options?L=e.add(i.config,v,y[v].options):null!=y[v].min&&(L=e.add(i.config,v,y[v].min,y[v].max))),"string"==typeof obj)try{var w=echarts.color.parse(b);(_=!!w)&&(b=echarts.color.stringify(w,"rgba"))}catch(t){}L||(L=e[_?"addColor":"add"](i.config,v)),i.config.onChange&&L.onChange(i.config.onChange),i.config.onFinishChange&&L.onFinishChange(i.config.onFinishChange)}}}return m}}}((function(t){var i=t.getOption();"string"==typeof i.backgroundColor&&"transparent"!==i.backgroundColor?e.backgroundColor=i.backgroundColor:e.backgroundColor="#fff"})));try{var i=this.sandbox.run(this.$el.querySelector("#chart-panel"),dt);Wt(this.$t("editor.chartOK")+i+"ms");for(var n=[0,500,2e3,5e3,1e4],a=n.length-1;a>=0;a--){var r=n[a+1]||1e6;if(i>=n[a]&&this.debouncedTime!==r){this.debouncedRun=Lt()(t,r,{trailing:!0}),this.debouncedTime=r;break}}dt.runHash=ft++}catch(t){Wt(this.$t("editor.errorInEditor"),"error"),console.error(t)}}},refreshAll:function(){this.dispose(),this.run()},dispose:function(){this.sandbox&&this.sandbox.dispose()},downloadExample:function(){var t;t="\x3c!--\n    THIS EXAMPLE WAS DOWNLOADED FROM ".concat(window.location.href,'\n--\x3e\n<!DOCTYPE html>\n<html style="height: 100%">\n    <head>\n        <meta charset="utf-8">\n    </head>\n    <body style="height: 100%; margin: 0">\n        <div id="container" style="height: 100%"></div>\n\n        <script type="text/javascript" src="').concat(ct.echartsMinJS,'"><\/script>\n        \x3c!-- Uncomment this line if you want to dataTool extension\n        <script type="text/javascript" src="').concat(ct.echartsDir,'/dist/extension/dataTool.min.js"><\/script>\n        --\x3e\n        \x3c!-- Uncomment this line if you want to use gl extension\n        <script type="text/javascript" src="').concat(ct.echartsGLMinJS,'"><\/script>\n        --\x3e\n        \x3c!-- Uncomment this line if you want to echarts-stat extension\n        <script type="text/javascript" src="').concat(ct.echartsStatMinJS,'"><\/script>\n        --\x3e\n        \x3c!-- Uncomment this line if you want to use map\n        <script type="text/javascript" src="').concat(ct.echartsDir,'/map/js/china.js"><\/script>\n        <script type="text/javascript" src="').concat(ct.echartsDir,'/map/js/world.js"><\/script>\n        --\x3e\n        \x3c!-- Uncomment these two lines if you want to use bmap extension\n        <script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=<Your Key Here>"><\/script>\n        <script type="text/javascript" src="').concat(ct.echartsDir,'/dist/extension/bmap.min.js"><\/script>\n        --\x3e\n\n        <script type="text/javascript">\nvar dom = document.getElementById("container");\nvar myChart = echarts.init(dom);\nvar app = {};\n\nvar option;\n\n').concat(Bt,"\n\n").concat(dt.sourceCode,"\n\nif (option && typeof option === 'object') {\n    myChart.setOption(option);\n}\n\n        <\/script>\n    </body>\n</html>\n    "),function(t,e){if("function"==typeof window.navigator.msSaveBlob)window.navigator.msSaveOrOpenBlob(t,e);else{var i=document.createElement("a");i.href=URL.createObjectURL(t),i.download=e,i.click(),URL.revokeObjectURL(i.href)}}(new Blob([t],{type:"text/html;charset=UTF-8",encoding:"UTF-8"}),ot.c+".html")},screenshot:function(){if(this.sandbox){var t=this.sandbox.getDataURL(),e=document.createElement("a");e.download=ot.c+"."+("svg"===dt.renderer?"svg":"png"),e.target="_blank",e.href=t;var i=new MouseEvent("click",{bubbles:!0,cancelable:!1});e.dispatchEvent(i)}},getOption:function(){return this.sandbox&&this.sandbox.getOption()}}},yt,[],!1,null,null,null);Vt.options.__file="src/editor/Preview.vue";const Ht=Vt.exports;var qt=gt({props:["initialCode"],data:function(){return{shared:dt,loading:!1}},mounted:function(){var t=this;this.loading=!0,Zt().then((function(){return"undefined"==typeof monaco?nt([ct.monacoDir+"/loader.js",dt.cdnRoot+"/js/example-transform-ts-bundle.js"]).then((function(){return window.require.config({paths:{vs:ct.monacoDir}}),new Promise((function(t){window.require(["vs/editor/editor.main"],(function(){fetch(dt.cdnRoot+"/types/echarts.d.ts",{mode:"cors"}).then((function(t){return t.text()})).then((function(t){monaco.languages.typescript.typescriptDefaults.setDiagnosticsOptions({noSemanticValidation:!1,noSyntaxValidation:!1}),monaco.languages.typescript.typescriptDefaults.setCompilerOptions({target:monaco.languages.typescript.ScriptTarget.ES6,allowNonTsExtensions:!0,noResolve:!1}),monaco.languages.typescript.typescriptDefaults.addExtraLib(t,"file:///node_modules/@types/echarts/index.d.ts"),monaco.languages.typescript.typescriptDefaults.addExtraLib("import {init, EChartsOption} from 'echarts';\n// Declare to global namespace.\ndeclare global {\ndeclare const $: any;\ndeclare const ROOT_PATH: string;\ndeclare const app: {\n    configParameters: {\n        [key: string]: ({\n            options: { [key: string]: string\n        }) | ({\n            min?: number\n            max?: number\n        })\n    }\n    config: {\n        onChange: () => void\n        [key: string]: string | number | function\n    }\n    [key: string]: any\n};\ndeclare const myChart: ReturnType<typeof init>;\ndeclare var option: EChartsOption;\n}\n","file:///example.d.ts")})).then((function(){t()}))}))}))})):Promise.resolve()})).then((function(){t.loading=!1;var e=monaco.editor.createModel(t.initialCode||"","typescript",monaco.Uri.parse("file:///main.ts")),i=monaco.editor.create(t.$el,{model:e,fontFamily:"'Source Code Pro', 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', monospace",minimap:{enabled:!1},automaticLayout:!0});t._editor=i,t.initialCode&&(dt.sourceCode=t.initialCode,dt.runCode=echartsExampleTransformTs(dt.sourceCode)),i.onDidChangeModelContent((function(){dt.sourceCode=i.getValue(),dt.runCode=echartsExampleTransformTs(dt.sourceCode)}))}))},destroyed:function(){this._editor&&(this._editor.getModel().dispose(),this._editor.dispose())},methods:{setInitialCode:function(t){this._editor&&t&&this._editor.setValue(t||"")}},watch:{initialCode:function(t){this.setInitialCode(t)}}},Ct,[],!1,null,null,null);qt.options.__file="src/editor/CodeMonaco.vue";const Kt=qt.exports;var Jt=function(){var t=this,e=t.$createElement;return(t._self._c||e)("div",{directives:[{name:"loading",rawName:"v-loading",value:t.loading,expression:"loading"}],staticClass:"full-code-preview"})};Jt._withStripped=!0;var Qt=gt({props:["code"],data:function(){return{shared:dt,loading:!1}},mounted:function(){var t=this;this.loading=!0,("undefined"==typeof ace?nt([ct.aceDir+"/ace.js"]):Promise.resolve()).then((function(){t.loading=!1;var e=ace.edit(t.$el);e.getSession().setMode("ace/mode/javascript"),e.setOptions({readOnly:!0,showLineNumbers:!1,showFoldWidgets:!1,highlightActiveLine:!1,highlightGutterLine:!1}),e.renderer.$cursorLayer.element.style.display="none",t._editor=e,t.setCode(t.code)}))},methods:{setCode:function(t){this._editor&&(this._editor.setValue(t),this._editor.selection.setSelectionRange({start:{row:1,column:4},end:{row:1,column:4}}))}},watch:{code:function(t){this.setCode(t)}}},Jt,[],!1,null,null,null);Qt.options.__file="src/editor/FullCodePreview.vue";const Xt=Qt.exports;var Yt=i(913);function te(t,e){const i=Object.create(null),n=t.split(",");for(let t=0;t<n.length;t++)i[n[t]]=!0;return e?t=>!!i[t.toLowerCase()]:t=>!!i[t]}const ee=te("Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl"),ie=te("itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly");function ne(t){if(_e(t)){const e={};for(let i=0;i<t.length;i++){const n=t[i],a=ne(ke(n)?oe(n):n);if(a)for(const t in a)e[t]=a[t]}return e}if(Ne(t))return t}const ae=/;(?![^(]*\))/g,re=/:(.+)/;function oe(t){const e={};return t.split(ae).forEach((t=>{if(t){const i=t.split(re);i.length>1&&(e[i[0].trim()]=i[1].trim())}})),e}function le(t){let e="";if(ke(t))e=t;else if(_e(t))for(let i=0;i<t.length;i++)e+=le(t[i])+" ";else if(Ne(t))for(const i in t)t[i]&&(e+=i+" ");return e.trim()}const se=t=>null==t?"":Ne(t)?JSON.stringify(t,ce,2):String(t),ce=(t,e)=>Le(e)?{[`Map(${e.size})`]:[...e.entries()].reduce(((t,[e,i])=>(t[`${e} =>`]=i,t)),{})}:we(e)?{[`Set(${e.size})`]:[...e.values()]}:!Ne(e)||_e(e)||Ae(e)?e:String(e),de={},ue=[],pe=()=>{},fe=()=>!1,ge=/^on[^a-z]/,he=t=>ge.test(t),me=t=>t.startsWith("onUpdate:"),Ce=Object.assign,ye=(t,e)=>{const i=t.indexOf(e);i>-1&&t.splice(i,1)},ve=Object.prototype.hasOwnProperty,be=(t,e)=>ve.call(t,e),_e=Array.isArray,Le=t=>"[object Map]"===Oe(t),we=t=>"[object Set]"===Oe(t),xe=t=>"function"==typeof t,ke=t=>"string"==typeof t,Se=t=>"symbol"==typeof t,Ne=t=>null!==t&&"object"==typeof t,Me=t=>Ne(t)&&xe(t.then)&&xe(t.catch),Te=Object.prototype.toString,Oe=t=>Te.call(t),Ae=t=>"[object Object]"===Oe(t),De=t=>ke(t)&&"NaN"!==t&&"-"!==t[0]&&""+parseInt(t,10)===t,Ee=te(",key,ref,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Pe=t=>{const e=Object.create(null);return i=>e[i]||(e[i]=t(i))},Fe=/-(\w)/g,Re=Pe((t=>t.replace(Fe,((t,e)=>e?e.toUpperCase():"")))),Be=/\B([A-Z])/g,Ie=Pe((t=>t.replace(Be,"-$1").toLowerCase())),je=Pe((t=>t.charAt(0).toUpperCase()+t.slice(1))),Ge=Pe((t=>t?`on${je(t)}`:"")),$e=(t,e)=>t!==e&&(t==t||e==e),ze=(t,e)=>{for(let i=0;i<t.length;i++)t[i](e)},Ue=(t,e,i)=>{Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:i})},Ze=t=>{const e=parseFloat(t);return isNaN(e)?t:e};let We;const Ve=()=>We||(We="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==i.g?i.g:{}),He=new WeakMap,qe=[];let Ke;const Je=Symbol(""),Qe=Symbol("");function Xe(t,e=de){(function(t){return t&&!0===t._isEffect})(t)&&(t=t.raw);const i=function(t,e){const i=function(){if(!i.active)return e.scheduler?void 0:t();if(!qe.includes(i)){ei(i);try{return ni.push(ii),ii=!0,qe.push(i),Ke=i,t()}finally{qe.pop(),ri(),Ke=qe[qe.length-1]}}};return i.id=ti++,i.allowRecurse=!!e.allowRecurse,i._isEffect=!0,i.active=!0,i.raw=t,i.deps=[],i.options=e,i}(t,e);return e.lazy||i(),i}function Ye(t){t.active&&(ei(t),t.options.onStop&&t.options.onStop(),t.active=!1)}let ti=0;function ei(t){const{deps:e}=t;if(e.length){for(let i=0;i<e.length;i++)e[i].delete(t);e.length=0}}let ii=!0;const ni=[];function ai(){ni.push(ii),ii=!1}function ri(){const t=ni.pop();ii=void 0===t||t}function oi(t,e,i){if(!ii||void 0===Ke)return;let n=He.get(t);n||He.set(t,n=new Map);let a=n.get(i);a||n.set(i,a=new Set),a.has(Ke)||(a.add(Ke),Ke.deps.push(a))}function li(t,e,i,n,a,r){const o=He.get(t);if(!o)return;const l=new Set,s=t=>{t&&t.forEach((t=>{(t!==Ke||t.allowRecurse)&&l.add(t)}))};if("clear"===e)o.forEach(s);else if("length"===i&&_e(t))o.forEach(((t,e)=>{("length"===e||e>=n)&&s(t)}));else switch(void 0!==i&&s(o.get(i)),e){case"add":_e(t)?De(i)&&s(o.get("length")):(s(o.get(Je)),Le(t)&&s(o.get(Qe)));break;case"delete":_e(t)||(s(o.get(Je)),Le(t)&&s(o.get(Qe)));break;case"set":Le(t)&&s(o.get(Je))}l.forEach((t=>{t.options.scheduler?t.options.scheduler(t):t()}))}const si=new Set(Object.getOwnPropertyNames(Symbol).map((t=>Symbol[t])).filter(Se)),ci=gi(),di=gi(!1,!0),ui=gi(!0),pi=gi(!0,!0),fi={};function gi(t=!1,e=!1){return function(i,n,a){if("__v_isReactive"===n)return!t;if("__v_isReadonly"===n)return t;if("__v_raw"===n&&a===(t?$i:Gi).get(i))return i;const r=_e(i);if(!t&&r&&be(fi,n))return Reflect.get(fi,n,a);const o=Reflect.get(i,n,a);return(Se(n)?si.has(n):"__proto__"===n||"__v_isRef"===n)?o:(t||oi(i,0,n),e?o:Ji(o)?r&&De(n)?o:o.value:Ne(o)?t?Ui(o):zi(o):o)}}function hi(t=!1){return function(e,i,n,a){const r=e[i];if(!t&&(n=qi(n),!_e(e)&&Ji(r)&&!Ji(n)))return r.value=n,!0;const o=_e(e)&&De(i)?Number(i)<e.length:be(e,i),l=Reflect.set(e,i,n,a);return e===qi(a)&&(o?$e(n,r)&&li(e,"set",i,n):li(e,"add",i,n)),l}}["includes","indexOf","lastIndexOf"].forEach((t=>{const e=Array.prototype[t];fi[t]=function(...t){const i=qi(this);for(let t=0,e=this.length;t<e;t++)oi(i,0,t+"");const n=e.apply(i,t);return-1===n||!1===n?e.apply(i,t.map(qi)):n}})),["push","pop","shift","unshift","splice"].forEach((t=>{const e=Array.prototype[t];fi[t]=function(...t){ai();const i=e.apply(this,t);return ri(),i}}));const mi={get:ci,set:hi(),deleteProperty:function(t,e){const i=be(t,e),n=(t[e],Reflect.deleteProperty(t,e));return n&&i&&li(t,"delete",e,void 0),n},has:function(t,e){const i=Reflect.has(t,e);return Se(e)&&si.has(e)||oi(t,0,e),i},ownKeys:function(t){return oi(t,0,_e(t)?"length":Je),Reflect.ownKeys(t)}},Ci={get:ui,set:(t,e)=>!0,deleteProperty:(t,e)=>!0},yi=Ce({},mi,{get:di,set:hi(!0)}),vi=(Ce({},Ci,{get:pi}),t=>Ne(t)?zi(t):t),bi=t=>Ne(t)?Ui(t):t,_i=t=>t,Li=t=>Reflect.getPrototypeOf(t);function wi(t,e,i=!1,n=!1){const a=qi(t=t.__v_raw),r=qi(e);e!==r&&!i&&oi(a,0,e),!i&&oi(a,0,r);const{has:o}=Li(a),l=i?bi:n?_i:vi;return o.call(a,e)?l(t.get(e)):o.call(a,r)?l(t.get(r)):void 0}function xi(t,e=!1){const i=this.__v_raw,n=qi(i),a=qi(t);return t!==a&&!e&&oi(n,0,t),!e&&oi(n,0,a),t===a?i.has(t):i.has(t)||i.has(a)}function ki(t,e=!1){return t=t.__v_raw,!e&&oi(qi(t),0,Je),Reflect.get(t,"size",t)}function Si(t){t=qi(t);const e=qi(this),i=Li(e).has.call(e,t);return e.add(t),i||li(e,"add",t,t),this}function Ni(t,e){e=qi(e);const i=qi(this),{has:n,get:a}=Li(i);let r=n.call(i,t);r||(t=qi(t),r=n.call(i,t));const o=a.call(i,t);return i.set(t,e),r?$e(e,o)&&li(i,"set",t,e):li(i,"add",t,e),this}function Mi(t){const e=qi(this),{has:i,get:n}=Li(e);let a=i.call(e,t);a||(t=qi(t),a=i.call(e,t)),n&&n.call(e,t);const r=e.delete(t);return a&&li(e,"delete",t,void 0),r}function Ti(){const t=qi(this),e=0!==t.size,i=t.clear();return e&&li(t,"clear",void 0,void 0),i}function Oi(t,e){return function(i,n){const a=this,r=a.__v_raw,o=qi(r),l=t?bi:e?_i:vi;return!t&&oi(o,0,Je),r.forEach(((t,e)=>i.call(n,l(t),l(e),a)))}}function Ai(t,e,i){return function(...n){const a=this.__v_raw,r=qi(a),o=Le(r),l="entries"===t||t===Symbol.iterator&&o,s="keys"===t&&o,c=a[t](...n),d=e?bi:i?_i:vi;return!e&&oi(r,0,s?Qe:Je),{next(){const{value:t,done:e}=c.next();return e?{value:t,done:e}:{value:l?[d(t[0]),d(t[1])]:d(t),done:e}},[Symbol.iterator](){return this}}}}function Di(t){return function(...e){return"delete"!==t&&this}}const Ei={get(t){return wi(this,t)},get size(){return ki(this)},has:xi,add:Si,set:Ni,delete:Mi,clear:Ti,forEach:Oi(!1,!1)},Pi={get(t){return wi(this,t,!1,!0)},get size(){return ki(this)},has:xi,add:Si,set:Ni,delete:Mi,clear:Ti,forEach:Oi(!1,!0)},Fi={get(t){return wi(this,t,!0)},get size(){return ki(this,!0)},has(t){return xi.call(this,t,!0)},add:Di("add"),set:Di("set"),delete:Di("delete"),clear:Di("clear"),forEach:Oi(!0,!1)};function Ri(t,e){const i=e?Pi:t?Fi:Ei;return(e,n,a)=>"__v_isReactive"===n?!t:"__v_isReadonly"===n?t:"__v_raw"===n?e:Reflect.get(be(i,n)&&n in e?i:e,n,a)}["keys","values","entries",Symbol.iterator].forEach((t=>{Ei[t]=Ai(t,!1,!1),Fi[t]=Ai(t,!0,!1),Pi[t]=Ai(t,!1,!0)}));const Bi={get:Ri(!1,!1)},Ii={get:Ri(!1,!0)},ji={get:Ri(!0,!1)},Gi=new WeakMap,$i=new WeakMap;function zi(t){return t&&t.__v_isReadonly?t:Zi(t,!1,mi,Bi)}function Ui(t){return Zi(t,!0,Ci,ji)}function Zi(t,e,i,n){if(!Ne(t))return t;if(t.__v_raw&&(!e||!t.__v_isReactive))return t;const a=e?$i:Gi,r=a.get(t);if(r)return r;const o=function(t){return t.__v_skip||!Object.isExtensible(t)?0:function(t){switch(t){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}((t=>Oe(t).slice(8,-1))(t))}(t);if(0===o)return t;const l=new Proxy(t,2===o?n:i);return a.set(t,l),l}function Wi(t){return Vi(t)?Wi(t.__v_raw):!(!t||!t.__v_isReactive)}function Vi(t){return!(!t||!t.__v_isReadonly)}function Hi(t){return Wi(t)||Vi(t)}function qi(t){return t&&qi(t.__v_raw)||t}const Ki=t=>Ne(t)?zi(t):t;function Ji(t){return Boolean(t&&!0===t.__v_isRef)}function Qi(t){return function(t,e=!1){return Ji(t)?t:new Xi(t,e)}(t)}class Xi{constructor(t,e=!1){this._rawValue=t,this._shallow=e,this.__v_isRef=!0,this._value=e?t:Ki(t)}get value(){return oi(qi(this),0,"value"),this._value}set value(t){$e(qi(t),this._rawValue)&&(this._rawValue=t,this._value=this._shallow?t:Ki(t),li(qi(this),"set","value",t))}}const Yi={get:(t,e,i)=>function(t){return Ji(t)?t.value:t}(Reflect.get(t,e,i)),set:(t,e,i,n)=>{const a=t[e];return Ji(a)&&!Ji(i)?(a.value=i,!0):Reflect.set(t,e,i,n)}};function tn(t){return Wi(t)?t:new Proxy(t,Yi)}class en{constructor(t,e){this._object=t,this._key=e,this.__v_isRef=!0}get value(){return this._object[this._key]}set value(t){this._object[this._key]=t}}class nn{constructor(t,e,i){this._setter=e,this._dirty=!0,this.__v_isRef=!0,this.effect=Xe(t,{lazy:!0,scheduler:()=>{this._dirty||(this._dirty=!0,li(qi(this),"set","value"))}}),this.__v_isReadonly=i}get value(){return this._dirty&&(this._value=this.effect(),this._dirty=!1),oi(qi(this),0,"value"),this._value}set value(t){this._setter(t)}}function an(t,e,i,n){let a;try{a=n?t(...n):t()}catch(t){on(t,e,i)}return a}function rn(t,e,i,n){if(xe(t)){const a=an(t,e,i,n);return a&&Me(a)&&a.catch((t=>{on(t,e,i)})),a}const a=[];for(let r=0;r<t.length;r++)a.push(rn(t[r],e,i,n));return a}function on(t,e,i,n=!0){if(e&&e.vnode,e){let n=e.parent;const a=e.proxy,r=i;for(;n;){const e=n.ec;if(e)for(let i=0;i<e.length;i++)if(!1===e[i](t,a,r))return;n=n.parent}const o=e.appContext.config.errorHandler;if(o)return void an(o,null,10,[t,a,r])}!function(t,e,i,n=!0){console.error(t)}(t,0,0,n)}let ln=!1,sn=!1;const cn=[];let dn=0;const un=[];let pn=null,fn=0;const gn=[];let hn=null,mn=0;const Cn=Promise.resolve();let yn=null,vn=null;function bn(t){const e=yn||Cn;return t?e.then(this?t.bind(this):t):e}function _n(t){cn.length&&cn.includes(t,ln&&t.allowRecurse?dn+1:dn)||t===vn||(cn.push(t),Ln())}function Ln(){ln||sn||(sn=!0,yn=Cn.then(Nn))}function wn(t,e,i,n){_e(t)?i.push(...t):e&&e.includes(t,t.allowRecurse?n+1:n)||i.push(t),Ln()}function xn(t,e=null){if(un.length){for(vn=e,pn=[...new Set(un)],un.length=0,fn=0;fn<pn.length;fn++)pn[fn]();pn=null,fn=0,vn=null,xn(t,e)}}function kn(t){if(gn.length){const t=[...new Set(gn)];if(gn.length=0,hn)return void hn.push(...t);for(hn=t,hn.sort(((t,e)=>Sn(t)-Sn(e))),mn=0;mn<hn.length;mn++)hn[mn]();hn=null,mn=0}}const Sn=t=>null==t.id?1/0:t.id;function Nn(t){sn=!1,ln=!0,xn(t),cn.sort(((t,e)=>Sn(t)-Sn(e)));try{for(dn=0;dn<cn.length;dn++){const t=cn[dn];t&&an(t,null,14)}}finally{dn=0,cn.length=0,kn(),ln=!1,yn=null,(cn.length||gn.length)&&Nn(t)}}function Mn(t,e,...i){const n=t.vnode.props||de;let a=i;const r=e.startsWith("update:"),o=r&&e.slice(7);if(o&&o in n){const t=`${"modelValue"===o?"model":o}Modifiers`,{number:e,trim:r}=n[t]||de;r?a=i.map((t=>t.trim())):e&&(a=i.map(Ze))}__VUE_PROD_DEVTOOLS__;let l=Ge(Re(e)),s=n[l];!s&&r&&(l=Ge(Ie(e)),s=n[l]),s&&rn(s,t,6,a);const c=n[l+"Once"];if(c){if(t.emitted){if(t.emitted[l])return}else(t.emitted={})[l]=!0;rn(c,t,6,a)}}function Tn(t,e,i=!1){if(!e.deopt&&void 0!==t.__emits)return t.__emits;const n=t.emits;let a={},r=!1;if(__VUE_OPTIONS_API__&&!xe(t)){const n=t=>{r=!0,Ce(a,Tn(t,e,!0))};!i&&e.mixins.length&&e.mixins.forEach(n),t.extends&&n(t.extends),t.mixins&&t.mixins.forEach(n)}return n||r?(_e(n)?n.forEach((t=>a[t]=null)):Ce(a,n),t.__emits=a):t.__emits=null}function On(t,e){return!(!t||!he(e))&&(e=e.slice(2).replace(/Once$/,""),be(t,e[0].toLowerCase()+e.slice(1))||be(t,Ie(e))||be(t,e))}let An=null;function Dn(t){An=t}function En(t){const{type:e,vnode:i,proxy:n,withProxy:a,props:r,propsOptions:[o],slots:l,attrs:s,emit:c,render:d,renderCache:u,data:p,setupState:f,ctx:g}=t;let h;An=t;try{let t;if(4&i.shapeFlag){const e=a||n;h=qa(d.call(e,e,u,r,f,p,g)),t=s}else{const i=e;h=qa(i.length>1?i(r,{attrs:s,slots:l,emit:c}):i(r,null)),t=e.props?s:Pn(s)}let m=h;if(!1!==e.inheritAttrs&&t){const e=Object.keys(t),{shapeFlag:i}=m;e.length&&(1&i||6&i)&&(o&&e.some(me)&&(t=Fn(t,o)),m=Wa(m,t))}i.dirs&&(m.dirs=m.dirs?m.dirs.concat(i.dirs):i.dirs),i.transition&&(m.transition=i.transition),h=m}catch(e){on(e,t,1),h=Za(Da)}return An=null,h}const Pn=t=>{let e;for(const i in t)("class"===i||"style"===i||he(i))&&((e||(e={}))[i]=t[i]);return e},Fn=(t,e)=>{const i={};for(const n in t)me(n)&&n.slice(9)in e||(i[n]=t[n]);return i};function Rn(t,e,i){const n=Object.keys(e);if(n.length!==Object.keys(t).length)return!0;for(let a=0;a<n.length;a++){const r=n[a];if(e[r]!==t[r]&&!On(i,r))return!0}return!1}function Bn(t){return xe(t)&&(t=t()),_e(t)&&(t=function(t){let e;for(let i=0;i<t.length;i++){const n=t[i];if(!ja(n))return;if(n.type!==Da||"v-if"===n.children){if(e)return;e=n}}return e}(t)),qa(t)}let In=0;const jn=t=>In+=t;function Gn(t,e,i,n){const[a,r]=t.propsOptions;if(e)for(const r in e){const o=e[r];if(Ee(r))continue;let l;a&&be(a,l=Re(r))?i[l]=o:On(t.emitsOptions,r)||(n[r]=o)}if(r){const e=qi(i);for(let n=0;n<r.length;n++){const o=r[n];i[o]=$n(a,e,o,e[o],t)}}}function $n(t,e,i,n,a){const r=t[i];if(null!=r){const t=be(r,"default");if(t&&void 0===n){const t=r.default;r.type!==Function&&xe(t)?(gr(a),n=t(e),gr(null)):n=t}r[0]&&(be(e,i)||t?!r[1]||""!==n&&n!==Ie(i)||(n=!0):n=!1)}return n}function zn(t,e,i=!1){if(!e.deopt&&t.__props)return t.__props;const n=t.props,a={},r=[];let o=!1;if(__VUE_OPTIONS_API__&&!xe(t)){const n=t=>{o=!0;const[i,n]=zn(t,e,!0);Ce(a,i),n&&r.push(...n)};!i&&e.mixins.length&&e.mixins.forEach(n),t.extends&&n(t.extends),t.mixins&&t.mixins.forEach(n)}if(!n&&!o)return t.__props=ue;if(_e(n))for(let t=0;t<n.length;t++){const e=Re(n[t]);Un(e)&&(a[e]=de)}else if(n)for(const t in n){const e=Re(t);if(Un(e)){const i=n[t],o=a[e]=_e(i)||xe(i)?{type:i}:i;if(o){const t=Vn(Boolean,o.type),i=Vn(String,o.type);o[0]=t>-1,o[1]=i<0||t<i,(t>-1||be(o,"default"))&&r.push(e)}}}return t.__props=[a,r]}function Un(t){return"$"!==t[0]}function Zn(t){const e=t&&t.toString().match(/^\s*function (\w+)/);return e?e[1]:""}function Wn(t,e){return Zn(t)===Zn(e)}function Vn(t,e){if(_e(e)){for(let i=0,n=e.length;i<n;i++)if(Wn(e[i],t))return i}else if(xe(e))return Wn(e,t)?0:-1;return-1}function Hn(t,e,i=fr,n=!1){if(i){const a=i[t]||(i[t]=[]),r=e.__weh||(e.__weh=(...n)=>{if(i.isUnmounted)return;ai(),gr(i);const a=rn(e,i,t,n);return gr(null),ri(),a});return n?a.unshift(r):a.push(r),r}}const qn=t=>(e,i=fr)=>!hr&&Hn(t,e,i),Kn=qn("bm"),Jn=qn("m"),Qn=qn("bu"),Xn=qn("u"),Yn=qn("bum"),ta=qn("um"),ea=qn("rtg"),ia=qn("rtc"),na={};function aa(t,e,i){return ra(t,e,i)}function ra(t,e,{immediate:i,deep:n,flush:a,onTrack:r,onTrigger:o}=de,l=fr){let s,c,d=!1;if(Ji(t)?(s=()=>t.value,d=!!t._shallow):Wi(t)?(s=()=>t,n=!0):s=_e(t)?()=>t.map((t=>Ji(t)?t.value:Wi(t)?la(t):xe(t)?an(t,l,2):void 0)):xe(t)?e?()=>an(t,l,2):()=>{if(!l||!l.isUnmounted)return c&&c(),an(t,l,3,[u])}:pe,e&&n){const t=s;s=()=>la(t())}const u=t=>{c=h.options.onStop=()=>{an(t,l,4)}};let p=_e(t)?[]:na;const f=()=>{if(h.active)if(e){const t=h();(n||d||$e(t,p))&&(c&&c(),rn(e,l,3,[t,p===na?void 0:p,u]),p=t)}else h()};let g;f.allowRecurse=!!e,g="sync"===a?f:"post"===a?()=>La(f,l&&l.suspense):()=>{!l||l.isMounted?function(t){wn(t,pn,un,fn)}(f):f()};const h=Xe(s,{lazy:!0,onTrack:r,onTrigger:o,scheduler:g});return yr(h,l),e?i?f():p=h():"post"===a?La(h,l&&l.suspense):h(),()=>{Ye(h),l&&ye(l.effects,h)}}function oa(t,e,i){const n=this.proxy;return ra(ke(t)?()=>n[t]:t.bind(n),e.bind(n),i,this)}function la(t,e=new Set){if(!Ne(t)||e.has(t))return t;if(e.add(t),Ji(t))la(t.value,e);else if(_e(t))for(let i=0;i<t.length;i++)la(t[i],e);else if(we(t)||Le(t))t.forEach((t=>{la(t,e)}));else for(const i in t)la(t[i],e);return t}const sa=t=>t.type.__isKeepAlive;function ca(t,e,i=fr){const n=t.__wdc||(t.__wdc=()=>{let e=i;for(;e;){if(e.isDeactivated)return;e=e.parent}t()});if(Hn(e,n,i),i){let t=i.parent;for(;t&&t.parent;)sa(t.parent.vnode)&&da(n,e,i,t),t=t.parent}}function da(t,e,i,n){const a=Hn(e,t,n,!0);ta((()=>{ye(n[e],a)}),i)}const ua=t=>"_"===t[0]||"$stable"===t,pa=t=>_e(t)?t.map(qa):[qa(t)],fa=(t,e,i)=>function(t,e=An){if(!e)return t;const i=(...i)=>{In||Ra(!0);const n=An;Dn(e);const a=t(...i);return Dn(n),In||Ba(),a};return i._c=!0,i}((t=>pa(e(t))),i),ga=(t,e)=>{const i=t._ctx;for(const n in t){if(ua(n))continue;const a=t[n];if(xe(a))e[n]=fa(0,a,i);else if(null!=a){const t=pa(a);e[n]=()=>t}}},ha=(t,e)=>{const i=pa(e);t.slots.default=()=>i};function ma(t,e){if(null===An)return t;const i=An.proxy,n=t.dirs||(t.dirs=[]);for(let t=0;t<e.length;t++){let[a,r,o,l=de]=e[t];xe(a)&&(a={mounted:a,updated:a}),n.push({dir:a,instance:i,value:r,oldValue:void 0,arg:o,modifiers:l})}return t}function Ca(t,e,i,n){const a=t.dirs,r=e&&e.dirs;for(let o=0;o<a.length;o++){const l=a[o];r&&(l.oldValue=r[o].value);const s=l.dir[n];s&&rn(s,i,8,[t.el,l,t,e])}}function ya(){return{app:null,config:{isNativeTag:fe,performance:!1,globalProperties:{},optionMergeStrategies:{},isCustomElement:fe,errorHandler:void 0,warnHandler:void 0},mixins:[],components:{},directives:{},provides:Object.create(null)}}let va=0;function ba(t,e){return function(i,n=null){null==n||Ne(n)||(n=null);const a=ya(),r=new Set;let o=!1;const l=a.app={_uid:va++,_component:i,_props:n,_container:null,_context:a,version:_r,get config(){return a.config},set config(t){},use:(t,...e)=>(r.has(t)||(t&&xe(t.install)?(r.add(t),t.install(l,...e)):xe(t)&&(r.add(t),t(l,...e))),l),mixin:t=>(__VUE_OPTIONS_API__&&(a.mixins.includes(t)||(a.mixins.push(t),(t.props||t.emits)&&(a.deopt=!0))),l),component:(t,e)=>e?(a.components[t]=e,l):a.components[t],directive:(t,e)=>e?(a.directives[t]=e,l):a.directives[t],mount(r,s){if(!o){const c=Za(i,n);return c.appContext=a,s&&e?e(c,r):t(c,r),o=!0,l._container=r,r.__vue_app__=l,__VUE_PROD_DEVTOOLS__,c.component.proxy}},unmount(){o&&(t(null,l._container),__VUE_PROD_DEVTOOLS__)},provide:(t,e)=>(a.provides[t]=e,l)};return l}}const _a={scheduler:_n,allowRecurse:!0},La=function(t,e){e&&e.pendingBranch?_e(t)?e.effects.push(...t):e.effects.push(t):wn(t,hn,gn,mn)},wa=(t,e,i,n)=>{if(_e(t))return void t.forEach(((t,a)=>wa(t,e&&(_e(e)?e[a]:e),i,n)));let a;a=!n||n.type.__asyncLoader?null:4&n.shapeFlag?n.component.exposed||n.component.proxy:n.el;const{i:r,r:o}=t,l=e&&e.r,s=r.refs===de?r.refs={}:r.refs,c=r.setupState;if(null!=l&&l!==o&&(ke(l)?(s[l]=null,be(c,l)&&(c[l]=null)):Ji(l)&&(l.value=null)),ke(o)){const t=()=>{s[o]=a,be(c,o)&&(c[o]=a)};a?(t.id=-1,La(t,i)):t()}else if(Ji(o)){const t=()=>{o.value=a};a?(t.id=-1,La(t,i)):t()}else xe(o)&&an(o,r,12,[a,s])};function xa(t,e,i,n=null){rn(t,e,7,[i,n])}function ka(t,e,i=!1){const n=t.children,a=e.children;if(_e(n)&&_e(a))for(let t=0;t<n.length;t++){const e=n[t];let r=a[t];1&r.shapeFlag&&!r.dynamicChildren&&((r.patchFlag<=0||32===r.patchFlag)&&(r=a[t]=Ka(a[t]),r.el=e.el),i||ka(e,r))}}const Sa=t=>t&&(t.disabled||""===t.disabled);function Na(t){return function(t,e,i=!0){const n=An||fr;if(n){const i=n.type;if("components"===t){if("_self"===e)return i;const t=i.displayName||i.name;if(t&&(t===e||t===Re(e)||t===je(Re(e))))return i}return Ta(n[t]||i[t],e)||Ta(n.appContext[t],e)}}("components",t)||t}const Ma=Symbol();function Ta(t,e){return t&&(t[e]||t[Re(e)]||t[je(Re(e))])}const Oa=Symbol(void 0),Aa=Symbol(void 0),Da=Symbol(void 0),Ea=Symbol(void 0),Pa=[];let Fa=null;function Ra(t=!1){Pa.push(Fa=t?null:[])}function Ba(){Pa.pop(),Fa=Pa[Pa.length-1]||null}function Ia(t,e,i,n,a){const r=Za(t,e,i,n,a,!0);return r.dynamicChildren=Fa||ue,Ba(),Fa&&Fa.push(r),r}function ja(t){return!!t&&!0===t.__v_isVNode}function Ga(t,e){return t.type===e.type&&t.key===e.key}const $a="__vInternal",za=({key:t})=>null!=t?t:null,Ua=({ref:t})=>null!=t?ke(t)||Ji(t)||xe(t)?{i:An,r:t}:t:null,Za=function(t,e=null,i=null,n=0,a=null,r=!1){if(t&&t!==Ma||(t=Da),ja(t)){const n=Wa(t,e,!0);return i&&Ja(n,i),n}var o;if(xe(o=t)&&"__vccOpts"in o&&(t=t.__vccOpts),e){(Hi(e)||$a in e)&&(e=Ce({},e));let{class:t,style:i}=e;t&&!ke(t)&&(e.class=le(t)),Ne(i)&&(Hi(i)&&!_e(i)&&(i=Ce({},i)),e.style=ne(i))}const l=ke(t)?1:(t=>t.__isSuspense)(t)?128:(t=>t.__isTeleport)(t)?64:Ne(t)?4:xe(t)?2:0,s={__v_isVNode:!0,__v_skip:!0,type:t,props:e,key:e&&za(e),ref:e&&Ua(e),scopeId:null,children:null,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:l,patchFlag:n,dynamicProps:a,dynamicChildren:null,appContext:null};if(Ja(s,i),128&l){const{content:t,fallback:e}=function(t){const{shapeFlag:e,children:i}=t;let n,a;return 32&e?(n=Bn(i.default),a=Bn(i.fallback)):(n=Bn(i),a=qa(null)),{content:n,fallback:a}}(s);s.ssContent=t,s.ssFallback=e}return!r&&Fa&&(n>0||6&l)&&32!==n&&Fa.push(s),s};function Wa(t,e,i=!1){const{props:n,ref:a,patchFlag:r}=t,o=e?function(...t){const e=Ce({},t[0]);for(let i=1;i<t.length;i++){const n=t[i];for(const t in n)if("class"===t)e.class!==n.class&&(e.class=le([e.class,n.class]));else if("style"===t)e.style=ne([e.style,n.style]);else if(he(t)){const i=e[t],a=n[t];i!==a&&(e[t]=i?[].concat(i,n[t]):a)}else""!==t&&(e[t]=n[t])}return e}(n||{},e):n;return{__v_isVNode:!0,__v_skip:!0,type:t.type,props:o,key:o&&za(o),ref:e&&e.ref?i&&a?_e(a)?a.concat(Ua(e)):[a,Ua(e)]:Ua(e):a,scopeId:t.scopeId,children:t.children,target:t.target,targetAnchor:t.targetAnchor,staticCount:t.staticCount,shapeFlag:t.shapeFlag,patchFlag:e&&t.type!==Oa?-1===r?16:16|r:r,dynamicProps:t.dynamicProps,dynamicChildren:t.dynamicChildren,appContext:t.appContext,dirs:t.dirs,transition:t.transition,component:t.component,suspense:t.suspense,ssContent:t.ssContent&&Wa(t.ssContent),ssFallback:t.ssFallback&&Wa(t.ssFallback),el:t.el,anchor:t.anchor}}function Va(t=" ",e=0){return Za(Aa,null,t,e)}function Ha(t="",e=!1){return e?(Ra(),Ia(Da,null,t)):Za(Da,null,t)}function qa(t){return null==t||"boolean"==typeof t?Za(Da):_e(t)?Za(Oa,null,t):"object"==typeof t?null===t.el?t:Wa(t):Za(Aa,null,String(t))}function Ka(t){return null===t.el?t:Wa(t)}function Ja(t,e){let i=0;const{shapeFlag:n}=t;if(null==e)e=null;else if(_e(e))i=16;else if("object"==typeof e){if(1&n||64&n){const i=e.default;return void(i&&(i._c&&jn(1),Ja(t,i()),i._c&&jn(-1)))}{i=32;const n=e._;n||$a in e?3===n&&An&&(1024&An.vnode.patchFlag?(e._=2,t.patchFlag|=1024):e._=1):e._ctx=An}}else xe(e)?(e={default:e,_ctx:An},i=32):(e=String(e),64&n?(i=16,e=[Va(e)]):i=8);t.children=e,t.shapeFlag|=i}function Qa(t,e,i=!1){const n=fr||An;if(n){const a=null==n.parent?n.vnode.appContext&&n.vnode.appContext.provides:n.parent.provides;if(a&&t in a)return a[t];if(arguments.length>1)return i&&xe(e)?e():e}}let Xa=!1;function Ya(t,e,i=[],n=[],a=[],r=!1){const{mixins:o,extends:l,data:s,computed:c,methods:d,watch:u,provide:p,inject:f,components:g,directives:h,beforeMount:m,mounted:C,beforeUpdate:y,updated:v,activated:b,deactivated:_,beforeDestroy:L,beforeUnmount:w,destroyed:x,unmounted:k,render:S,renderTracked:N,renderTriggered:M,errorCaptured:T,expose:O}=e,A=t.proxy,D=t.ctx,E=t.appContext.mixins;if(r&&S&&t.render===pe&&(t.render=S),r||(Xa=!0,tr("beforeCreate","bc",e,t,E),Xa=!1,nr(t,E,i,n,a)),l&&Ya(t,l,i,n,a,!0),o&&nr(t,o,i,n,a),f)if(_e(f))for(let t=0;t<f.length;t++){const e=f[t];D[e]=Qa(e)}else for(const t in f){const e=f[t];Ne(e)?D[t]=Qa(e.from||t,e.default,!0):D[t]=Qa(e)}if(d)for(const t in d){const e=d[t];xe(e)&&(D[t]=e.bind(A))}if(r?s&&i.push(s):(i.length&&i.forEach((e=>ar(t,e,A))),s&&ar(t,s,A)),c)for(const t in c){const e=c[t],i=vr({get:xe(e)?e.bind(A,A):xe(e.get)?e.get.bind(A,A):pe,set:!xe(e)&&xe(e.set)?e.set.bind(A):pe});Object.defineProperty(D,t,{enumerable:!0,configurable:!0,get:()=>i.value,set:t=>i.value=t})}if(u&&n.push(u),!r&&n.length&&n.forEach((t=>{for(const e in t)rr(t[e],D,A,e)})),p&&a.push(p),!r&&a.length&&a.forEach((t=>{const e=xe(t)?t.call(A):t;Reflect.ownKeys(e).forEach((t=>{!function(t,e){if(fr){let i=fr.provides;const n=fr.parent&&fr.parent.provides;n===i&&(i=fr.provides=Object.create(n)),i[t]=e}}(t,e[t])}))})),r&&(g&&Ce(t.components||(t.components=Ce({},t.type.components)),g),h&&Ce(t.directives||(t.directives=Ce({},t.type.directives)),h)),r||tr("created","c",e,t,E),m&&Kn(m.bind(A)),C&&Jn(C.bind(A)),y&&Qn(y.bind(A)),v&&Xn(v.bind(A)),b&&ca(b.bind(A),"a",void 0),_&&function(t,e){ca(t,"da",void 0)}(_.bind(A)),T&&((t,e=fr)=>{Hn("ec",t,e)})(T.bind(A)),N&&ia(N.bind(A)),M&&ea(M.bind(A)),w&&Yn(w.bind(A)),k&&ta(k.bind(A)),_e(O)&&!r)if(O.length){const e=t.exposed||(t.exposed=tn({}));O.forEach((t=>{e[t]=function(t,e){return Ji(t[e])?t[e]:new en(t,e)}(A,t)}))}else t.exposed||(t.exposed=de)}function tr(t,e,i,n,a){ir(t,e,a,n);const{extends:r,mixins:o}=i;r&&er(t,e,r,n),o&&ir(t,e,o,n);const l=i[t];l&&rn(l.bind(n.proxy),n,e)}function er(t,e,i,n){i.extends&&er(t,e,i.extends,n);const a=i[t];a&&rn(a.bind(n.proxy),n,e)}function ir(t,e,i,n){for(let a=0;a<i.length;a++){const r=i[a].mixins;r&&ir(t,e,r,n);const o=i[a][t];o&&rn(o.bind(n.proxy),n,e)}}function nr(t,e,i,n,a){for(let r=0;r<e.length;r++)Ya(t,e[r],i,n,a,!0)}function ar(t,e,i){const n=e.call(i,i);Ne(n)&&(t.data===de?t.data=zi(n):Ce(t.data,n))}function rr(t,e,i,n){const a=n.includes(".")?function(t,e){const i=e.split(".");return()=>{let e=t;for(let t=0;t<i.length&&e;t++)e=e[i[t]];return e}}(i,n):()=>i[n];if(ke(t)){const i=e[t];xe(i)&&aa(a,i)}else if(xe(t))aa(a,t.bind(i));else if(Ne(t))if(_e(t))t.forEach((t=>rr(t,e,i,n)));else{const n=xe(t.handler)?t.handler.bind(i):e[t.handler];xe(n)&&aa(a,n,t)}}function or(t,e,i){const n=i.appContext.config.optionMergeStrategies,{mixins:a,extends:r}=e;r&&or(t,r,i),a&&a.forEach((e=>or(t,e,i)));for(const a in e)n&&be(n,a)?t[a]=n[a](t[a],e[a],i.proxy,a):t[a]=e[a]}const lr=t=>t&&(t.proxy?t.proxy:lr(t.parent)),sr=Ce(Object.create(null),{$:t=>t,$el:t=>t.vnode.el,$data:t=>t.data,$props:t=>t.props,$attrs:t=>t.attrs,$slots:t=>t.slots,$refs:t=>t.refs,$parent:t=>lr(t.parent),$root:t=>t.root&&t.root.proxy,$emit:t=>t.emit,$options:t=>__VUE_OPTIONS_API__?function(t){const e=t.type,{__merged:i,mixins:n,extends:a}=e;if(i)return i;const r=t.appContext.mixins;if(!r.length&&!n&&!a)return e;const o={};return r.forEach((e=>or(o,e,t))),or(o,e,t),e.__merged=o}(t):t.type,$forceUpdate:t=>()=>_n(t.update),$nextTick:t=>bn.bind(t.proxy),$watch:t=>__VUE_OPTIONS_API__?oa.bind(t):pe}),cr={get({_:t},e){const{ctx:i,setupState:n,data:a,props:r,accessCache:o,type:l,appContext:s}=t;if("__v_skip"===e)return!0;let c;if("$"!==e[0]){const l=o[e];if(void 0!==l)switch(l){case 0:return n[e];case 1:return a[e];case 3:return i[e];case 2:return r[e]}else{if(n!==de&&be(n,e))return o[e]=0,n[e];if(a!==de&&be(a,e))return o[e]=1,a[e];if((c=t.propsOptions[0])&&be(c,e))return o[e]=2,r[e];if(i!==de&&be(i,e))return o[e]=3,i[e];__VUE_OPTIONS_API__&&Xa||(o[e]=4)}}const d=sr[e];let u,p;return d?("$attrs"===e&&oi(t,0,e),d(t)):(u=l.__cssModules)&&(u=u[e])?u:i!==de&&be(i,e)?(o[e]=3,i[e]):(p=s.config.globalProperties,be(p,e)?p[e]:void 0)},set({_:t},e,i){const{data:n,setupState:a,ctx:r}=t;if(a!==de&&be(a,e))a[e]=i;else if(n!==de&&be(n,e))n[e]=i;else if(e in t.props)return!1;return!("$"===e[0]&&e.slice(1)in t||(r[e]=i,0))},has({_:{data:t,setupState:e,accessCache:i,ctx:n,appContext:a,propsOptions:r}},o){let l;return void 0!==i[o]||t!==de&&be(t,o)||e!==de&&be(e,o)||(l=r[0])&&be(l,o)||be(n,o)||be(sr,o)||be(a.config.globalProperties,o)}},dr=Ce({},cr,{get(t,e){if(e!==Symbol.unscopables)return cr.get(t,e,t)},has:(t,e)=>"_"!==e[0]&&!ee(e)}),ur=ya();let pr=0,fr=null;const gr=t=>{fr=t};let hr=!1;function mr(t,e,i){xe(e)?t.render=e:Ne(e)&&(__VUE_PROD_DEVTOOLS__&&(t.devtoolsRawSetupState=e),t.setupState=tn(e)),Cr(t)}function Cr(t,e){const i=t.type;t.render||(t.render=i.render||pe,t.render._rc&&(t.withProxy=new Proxy(t.ctx,dr))),__VUE_OPTIONS_API__&&(fr=t,ai(),Ya(t,i),ri(),fr=null)}function yr(t,e=fr){e&&(e.effects||(e.effects=[])).push(t)}function vr(t){const e=function(t){let e,i;return xe(t)?(e=t,i=pe):(e=t.get,i=t.set),new nn(e,i,xe(t)||!t.set)}(t);return yr(e.effect),e}function br(t,e){let i;if(_e(t)||ke(t)){i=new Array(t.length);for(let n=0,a=t.length;n<a;n++)i[n]=e(t[n],n)}else if("number"==typeof t){i=new Array(t);for(let n=0;n<t;n++)i[n]=e(n+1,n)}else if(Ne(t))if(t[Symbol.iterator])i=Array.from(t,e);else{const n=Object.keys(t);i=new Array(n.length);for(let a=0,r=n.length;a<r;a++){const r=n[a];i[a]=e(t[r],r,a)}}else i=[];return i}const _r="3.0.4",Lr="http://www.w3.org/2000/svg",wr="undefined"!=typeof document?document:null;let xr,kr;const Sr={insert:(t,e,i)=>{e.insertBefore(t,i||null)},remove:t=>{const e=t.parentNode;e&&e.removeChild(t)},createElement:(t,e,i)=>e?wr.createElementNS(Lr,t):wr.createElement(t,i?{is:i}:void 0),createText:t=>wr.createTextNode(t),createComment:t=>wr.createComment(t),setText:(t,e)=>{t.nodeValue=e},setElementText:(t,e)=>{t.textContent=e},parentNode:t=>t.parentNode,nextSibling:t=>t.nextSibling,querySelector:t=>wr.querySelector(t),setScopeId(t,e){t.setAttribute(e,"")},cloneNode:t=>t.cloneNode(!0),insertStaticContent(t,e,i,n){const a=n?kr||(kr=wr.createElementNS(Lr,"svg")):xr||(xr=wr.createElement("div"));a.innerHTML=t;const r=a.firstChild;let o=r,l=o;for(;o;)l=o,Sr.insert(o,e,i),o=a.firstChild;return[r,l]}},Nr=/\s*!important$/;function Mr(t,e,i){if(_e(i))i.forEach((i=>Mr(t,e,i)));else if(e.startsWith("--"))t.setProperty(e,i);else{const n=function(t,e){const i=Or[e];if(i)return i;let n=Re(e);if("filter"!==n&&n in t)return Or[e]=n;n=je(n);for(let i=0;i<Tr.length;i++){const a=Tr[i]+n;if(a in t)return Or[e]=a}return e}(t,e);Nr.test(i)?t.setProperty(Ie(n),i.replace(Nr,""),"important"):t[n]=i}}const Tr=["Webkit","Moz","ms"],Or={},Ar="http://www.w3.org/1999/xlink";let Dr=Date.now;"undefined"!=typeof document&&Dr()>document.createEvent("Event").timeStamp&&(Dr=()=>performance.now());let Er=0;const Pr=Promise.resolve(),Fr=()=>{Er=0},Rr=/(?:Once|Passive|Capture)$/,Br=/^on[a-z]/,Ir={beforeMount(t,{value:e},{transition:i}){t._vod="none"===t.style.display?"":t.style.display,i&&e?i.beforeEnter(t):jr(t,e)},mounted(t,{value:e},{transition:i}){i&&e&&i.enter(t)},updated(t,{value:e,oldValue:i},{transition:n}){n&&e!==i?e?(n.beforeEnter(t),jr(t,!0),n.enter(t)):n.leave(t,(()=>{jr(t,!1)})):jr(t,e)},beforeUnmount(t,{value:e}){jr(t,e)}};function jr(t,e){t.style.display=e?t._vod:"none"}const Gr=Ce({patchProp:(t,e,i,n,a=!1,r,o,l,s)=>{switch(e){case"class":!function(t,e,i){if(null==e&&(e=""),i)t.setAttribute("class",e);else{const i=t._vtc;i&&(e=(e?[e,...i]:[...i]).join(" ")),t.className=e}}(t,n,a);break;case"style":!function(t,e,i){const n=t.style;if(i)if(ke(i))e!==i&&(n.cssText=i);else{for(const t in i)Mr(n,t,i[t]);if(e&&!ke(e))for(const t in e)null==i[t]&&Mr(n,t,"")}else t.removeAttribute("style")}(t,i,n);break;default:he(e)?me(e)||function(t,e,i,n,a=null){const r=t._vei||(t._vei={}),o=r[e];if(n&&o)o.value=n;else{const[i,l]=function(t){let e;if(Rr.test(t)){let i;for(e={};i=t.match(Rr);)t=t.slice(0,t.length-i[0].length),e[i[0].toLowerCase()]=!0}return[t.slice(2).toLowerCase(),e]}(e);n?function(t,e,i,n){t.addEventListener(e,i,n)}(t,i,r[e]=function(t,e){const i=t=>{(t.timeStamp||Dr())>=i.attached-1&&rn(function(t,e){if(_e(e)){const i=t.stopImmediatePropagation;return t.stopImmediatePropagation=()=>{i.call(t),t._stopped=!0},e.map((t=>e=>!e._stopped&&t(e)))}return e}(t,i.value),e,5,[t])};return i.value=t,i.attached=Er||(Pr.then(Fr),Er=Dr()),i}(n,a),l):o&&(function(t,e,i,n){t.removeEventListener(e,i,n)}(t,i,o,l),r[e]=void 0)}}(t,e,0,n,o):function(t,e,i,n){return n?"innerHTML"===e||!!(e in t&&Br.test(e)&&xe(i)):!("spellcheck"===e||"draggable"===e||"form"===e&&"string"==typeof i||"list"===e&&"INPUT"===t.tagName||Br.test(e)&&ke(i)||!(e in t))}(t,e,n,a)?function(t,e,i,n,a,r,o){if("innerHTML"===e||"textContent"===e)return n&&o(n,a,r),void(t[e]=null==i?"":i);if("value"!==e||"PROGRESS"===t.tagName){if(""===i||null==i){const n=typeof t[e];if(""===i&&"boolean"===n)return void(t[e]=!0);if(null==i&&"string"===n)return t[e]="",void t.removeAttribute(e);if("number"===n)return t[e]=0,void t.removeAttribute(e)}try{t[e]=i}catch(t){}}else{t._value=i;const e=null==i?"":i;t.value!==e&&(t.value=e)}}(t,e,n,r,o,l,s):("true-value"===e?t._trueValue=n:"false-value"===e&&(t._falseValue=n),function(t,e,i,n){if(n&&e.startsWith("xlink:"))null==i?t.removeAttributeNS(Ar,e.slice(6,e.length)):t.setAttributeNS(Ar,e,i);else{const n=ie(e);null==i||n&&!1===i?t.removeAttribute(e):t.setAttribute(e,n?"":i)}}(t,e,n,a))}},forcePatchProp:(t,e)=>"value"===e},Sr);let $r;function zr(){return $r||($r=function(t){return function(t,e){"boolean"!=typeof __VUE_OPTIONS_API__&&(Ve().__VUE_OPTIONS_API__=!0),"boolean"!=typeof __VUE_PROD_DEVTOOLS__&&(Ve().__VUE_PROD_DEVTOOLS__=!1);const{insert:i,remove:n,patchProp:a,forcePatchProp:r,createElement:o,createText:l,createComment:s,setText:c,setElementText:d,parentNode:u,nextSibling:p,setScopeId:f=pe,cloneNode:g,insertStaticContent:h}=t,m=(t,e,i,n=null,a=null,r=null,o=!1,l=!1)=>{t&&!Ga(t,e)&&(n=z(t),B(t,a,r,!0),t=null),-2===e.patchFlag&&(l=!1,e.dynamicChildren=null);const{type:s,ref:c,shapeFlag:d}=e;switch(s){case Aa:C(t,e,i,n);break;case Da:y(t,e,i,n);break;case Ea:null==t&&v(e,i,n,o);break;case Oa:N(t,e,i,n,a,r,o,l);break;default:1&d?b(t,e,i,n,a,r,o,l):6&d?M(t,e,i,n,a,r,o,l):(64&d||128&d)&&s.process(t,e,i,n,a,r,o,l,Z)}null!=c&&a&&wa(c,t&&t.ref,r,e)},C=(t,e,n,a)=>{if(null==t)i(e.el=l(e.children),n,a);else{const i=e.el=t.el;e.children!==t.children&&c(i,e.children)}},y=(t,e,n,a)=>{null==t?i(e.el=s(e.children||""),n,a):e.el=t.el},v=(t,e,i,n)=>{[t.el,t.anchor]=h(t.children,e,i,n)},b=(t,e,i,n,a,r,o,l)=>{o=o||"svg"===e.type,null==t?_(e,i,n,a,r,o,l):x(t,e,a,r,o,l)},_=(t,e,n,r,l,s,c)=>{let u,p;const{type:f,props:h,shapeFlag:m,transition:C,scopeId:y,patchFlag:v,dirs:b}=t;if(t.el&&void 0!==g&&-1===v)u=t.el=g(t.el);else{if(u=t.el=o(t.type,s,h&&h.is),8&m?d(u,t.children):16&m&&w(t.children,u,null,r,l,s&&"foreignObject"!==f,c||!!t.dynamicChildren),b&&Ca(t,null,r,"created"),h){for(const e in h)Ee(e)||a(u,e,null,h[e],s,t.children,r,l,$);(p=h.onVnodeBeforeMount)&&xa(p,r,t)}L(u,y,t,r)}__VUE_PROD_DEVTOOLS__&&(Object.defineProperty(u,"__vnode",{value:t,enumerable:!1}),Object.defineProperty(u,"__vueParentComponent",{value:r,enumerable:!1})),b&&Ca(t,null,r,"beforeMount");const _=(!l||l&&!l.pendingBranch)&&C&&!C.persisted;_&&C.beforeEnter(u),i(u,e,n),((p=h&&h.onVnodeMounted)||_||b)&&La((()=>{p&&xa(p,r,t),_&&C.enter(u),b&&Ca(t,null,r,"mounted")}),l)},L=(t,e,i,n)=>{if(e&&f(t,e),n){const a=n.type.__scopeId;a&&a!==e&&f(t,a+"-s"),i===n.subTree&&L(t,n.vnode.scopeId,n.vnode,n.parent)}},w=(t,e,i,n,a,r,o,l=0)=>{for(let s=l;s<t.length;s++){const l=t[s]=o?Ka(t[s]):qa(t[s]);m(null,l,e,i,n,a,r,o)}},x=(t,e,i,n,o,l)=>{const s=e.el=t.el;let{patchFlag:c,dynamicChildren:u,dirs:p}=e;c|=16&t.patchFlag;const f=t.props||de,g=e.props||de;let h;if((h=g.onVnodeBeforeUpdate)&&xa(h,i,e,t),p&&Ca(e,t,i,"beforeUpdate"),c>0){if(16&c)S(s,e,f,g,i,n,o);else if(2&c&&f.class!==g.class&&a(s,"class",null,g.class,o),4&c&&a(s,"style",f.style,g.style,o),8&c){const l=e.dynamicProps;for(let e=0;e<l.length;e++){const c=l[e],d=f[c],u=g[c];(u!==d||r&&r(s,c))&&a(s,c,d,u,o,t.children,i,n,$)}}1&c&&t.children!==e.children&&d(s,e.children)}else l||null!=u||S(s,e,f,g,i,n,o);const m=o&&"foreignObject"!==e.type;u?k(t.dynamicChildren,u,s,i,n,m):l||E(t,e,s,null,i,n,m),((h=g.onVnodeUpdated)||p)&&La((()=>{h&&xa(h,i,e,t),p&&Ca(e,t,i,"updated")}),n)},k=(t,e,i,n,a,r)=>{for(let o=0;o<e.length;o++){const l=t[o],s=e[o],c=l.type===Oa||!Ga(l,s)||6&l.shapeFlag||64&l.shapeFlag?u(l.el):i;m(l,s,c,null,n,a,r,!0)}},S=(t,e,i,n,o,l,s)=>{if(i!==n){for(const c in n){if(Ee(c))continue;const d=n[c],u=i[c];(d!==u||r&&r(t,c))&&a(t,c,u,d,s,e.children,o,l,$)}if(i!==de)for(const r in i)Ee(r)||r in n||a(t,r,i[r],null,s,e.children,o,l,$)}},N=(t,e,n,a,r,o,s,c)=>{const d=e.el=t?t.el:l(""),u=e.anchor=t?t.anchor:l("");let{patchFlag:p,dynamicChildren:f}=e;p>0&&(c=!0),null==t?(i(d,n,a),i(u,n,a),w(e.children,n,u,r,o,s,c)):p>0&&64&p&&f?(k(t.dynamicChildren,f,n,r,o,s),(null!=e.key||r&&e===r.subTree)&&ka(t,e,!0)):E(t,e,n,u,r,o,s,c)},M=(t,e,i,n,a,r,o,l)=>{null==t?512&e.shapeFlag?a.ctx.activate(e,i,n,o,l):T(e,i,n,a,r,o,l):O(t,e,l)},T=(t,e,i,n,a,r,o)=>{const l=t.component=function(t,e,i){const n=t.type,a=(e?e.appContext:t.appContext)||ur,r={uid:pr++,vnode:t,type:n,parent:e,appContext:a,root:null,next:null,subTree:null,update:null,render:null,proxy:null,exposed:null,withProxy:null,effects:null,provides:e?e.provides:Object.create(a.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:zn(n,a),emitsOptions:Tn(n,a),emit:null,emitted:null,ctx:de,data:de,props:de,attrs:de,slots:de,refs:de,setupState:de,setupContext:null,suspense:i,suspenseId:i?i.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null};return r.ctx={_:r},r.root=e?e.root:r,r.emit=Mn.bind(null,r),__VUE_PROD_DEVTOOLS__,r}(t,n,a);if(sa(t)&&(l.ctx.renderer=Z),function(t,e=!1){hr=e;const{props:i,children:n,shapeFlag:a}=t.vnode,r=4&a;(function(t,e,i,n=!1){const a={},r={};Ue(r,$a,1),Gn(t,e,a,r),i?t.props=n?a:Zi(a,!1,yi,Ii):t.type.props?t.props=a:t.props=r,t.attrs=r})(t,i,r,e),((t,e)=>{if(32&t.vnode.shapeFlag){const i=e._;i?(t.slots=e,Ue(e,"_",i)):ga(e,t.slots={})}else t.slots={},e&&ha(t,e);Ue(t.slots,$a,1)})(t,n),r&&function(t,e){const i=t.type;t.accessCache=Object.create(null),t.proxy=new Proxy(t.ctx,cr);const{setup:n}=i;if(n){const i=t.setupContext=n.length>1?function(t){return{attrs:t.attrs,slots:t.slots,emit:t.emit,expose:e=>{t.exposed=tn(e)}}}(t):null;fr=t,ai();const a=an(n,t,0,[t.props,i]);if(ri(),fr=null,Me(a)){if(e)return a.then((e=>{mr(t,e)}));t.asyncDep=a}else mr(t,a)}else Cr(t)}(t,e),hr=!1}(l),l.asyncDep){if(a&&a.registerDep(l,A),!t.el){const t=l.subTree=Za(Da);y(null,t,e,i)}}else A(l,t,e,i,a,r,o)},O=(t,e,i)=>{const n=e.component=t.component;if(function(t,e,i){const{props:n,children:a,component:r}=t,{props:o,children:l,patchFlag:s}=e,c=r.emitsOptions;if(e.dirs||e.transition)return!0;if(!(i&&s>=0))return!(!a&&!l||l&&l.$stable)||n!==o&&(n?!o||Rn(n,o,c):!!o);if(1024&s)return!0;if(16&s)return n?Rn(n,o,c):!!o;if(8&s){const t=e.dynamicProps;for(let e=0;e<t.length;e++){const i=t[e];if(o[i]!==n[i]&&!On(c,i))return!0}}return!1}(t,e,i)){if(n.asyncDep&&!n.asyncResolved)return void D(n,e,i);n.next=e,function(t){const e=cn.indexOf(t);e>-1&&cn.splice(e,1)}(n.update),n.update()}else e.component=t.component,e.el=t.el,n.vnode=e},A=(t,e,i,n,a,r,o)=>{t.update=Xe((function(){if(t.isMounted){let e,{next:i,bu:n,u:l,parent:s,vnode:c}=t,d=i;i?(i.el=c.el,D(t,i,o)):i=c,n&&ze(n),(e=i.props&&i.props.onVnodeBeforeUpdate)&&xa(e,s,i,c);const p=En(t),f=t.subTree;t.subTree=p,m(f,p,u(f.el),z(f),t,a,r),i.el=p.el,null===d&&function({vnode:t,parent:e},i){for(;e&&e.subTree===t;)(t=e.vnode).el=i,e=e.parent}(t,p.el),l&&La(l,a),(e=i.props&&i.props.onVnodeUpdated)&&La((()=>{xa(e,s,i,c)}),a),__VUE_PROD_DEVTOOLS__}else{let o;const{el:l,props:s}=e,{bm:c,m:d,parent:u}=t;c&&ze(c),(o=s&&s.onVnodeBeforeMount)&&xa(o,u,e);const p=t.subTree=En(t);m(null,p,i,n,t,a,r),e.el=p.el,d&&La(d,a),(o=s&&s.onVnodeMounted)&&La((()=>{xa(o,u,e)}),a);const{a:f}=t;f&&256&e.shapeFlag&&La(f,a),t.isMounted=!0}}),_a)},D=(t,e,i)=>{e.component=t;const n=t.vnode.props;t.vnode=e,t.next=null,function(t,e,i,n){const{props:a,attrs:r,vnode:{patchFlag:o}}=t,l=qi(a),[s]=t.propsOptions;if(!(n||o>0)||16&o){let n;Gn(t,e,a,r);for(const r in l)e&&(be(e,r)||(n=Ie(r))!==r&&be(e,n))||(s?!i||void 0===i[r]&&void 0===i[n]||(a[r]=$n(s,e||de,r,void 0,t)):delete a[r]);if(r!==l)for(const t in r)e&&be(e,t)||delete r[t]}else if(8&o){const i=t.vnode.dynamicProps;for(let n=0;n<i.length;n++){const o=i[n],c=e[o];if(s)if(be(r,o))r[o]=c;else{const e=Re(o);a[e]=$n(s,l,e,c,t)}else r[o]=c}}li(t,"set","$attrs")}(t,e.props,n,i),((t,e)=>{const{vnode:i,slots:n}=t;let a=!0,r=de;if(32&i.shapeFlag){const t=e._;t?1===t?a=!1:Ce(n,e):(a=!e.$stable,ga(e,n)),r=e}else e&&(ha(t,e),r={default:1});if(a)for(const t in n)ua(t)||t in r||delete n[t]})(t,e.children),xn(void 0,t.update)},E=(t,e,i,n,a,r,o,l=!1)=>{const s=t&&t.children,c=t?t.shapeFlag:0,u=e.children,{patchFlag:p,shapeFlag:f}=e;if(p>0){if(128&p)return void F(s,u,i,n,a,r,o,l);if(256&p)return void P(s,u,i,n,a,r,o,l)}8&f?(16&c&&$(s,a,r),u!==s&&d(i,u)):16&c?16&f?F(s,u,i,n,a,r,o,l):$(s,a,r,!0):(8&c&&d(i,""),16&f&&w(u,i,n,a,r,o,l))},P=(t,e,i,n,a,r,o,l)=>{e=e||ue;const s=(t=t||ue).length,c=e.length,d=Math.min(s,c);let u;for(u=0;u<d;u++){const n=e[u]=l?Ka(e[u]):qa(e[u]);m(t[u],n,i,null,a,r,o,l)}s>c?$(t,a,r,!0,!1,d):w(e,i,n,a,r,o,l,d)},F=(t,e,i,n,a,r,o,l)=>{let s=0;const c=e.length;let d=t.length-1,u=c-1;for(;s<=d&&s<=u;){const n=t[s],c=e[s]=l?Ka(e[s]):qa(e[s]);if(!Ga(n,c))break;m(n,c,i,null,a,r,o,l),s++}for(;s<=d&&s<=u;){const n=t[d],s=e[u]=l?Ka(e[u]):qa(e[u]);if(!Ga(n,s))break;m(n,s,i,null,a,r,o,l),d--,u--}if(s>d){if(s<=u){const t=u+1,d=t<c?e[t].el:n;for(;s<=u;)m(null,e[s]=l?Ka(e[s]):qa(e[s]),i,d,a,r,o),s++}}else if(s>u)for(;s<=d;)B(t[s],a,r,!0),s++;else{const p=s,f=s,g=new Map;for(s=f;s<=u;s++){const t=e[s]=l?Ka(e[s]):qa(e[s]);null!=t.key&&g.set(t.key,s)}let h,C=0;const y=u-f+1;let v=!1,b=0;const _=new Array(y);for(s=0;s<y;s++)_[s]=0;for(s=p;s<=d;s++){const n=t[s];if(C>=y){B(n,a,r,!0);continue}let c;if(null!=n.key)c=g.get(n.key);else for(h=f;h<=u;h++)if(0===_[h-f]&&Ga(n,e[h])){c=h;break}void 0===c?B(n,a,r,!0):(_[c-f]=s+1,c>=b?b=c:v=!0,m(n,e[c],i,null,a,r,o,l),C++)}const L=v?function(t){const e=t.slice(),i=[0];let n,a,r,o,l;const s=t.length;for(n=0;n<s;n++){const s=t[n];if(0!==s){if(a=i[i.length-1],t[a]<s){e[n]=a,i.push(n);continue}for(r=0,o=i.length-1;r<o;)l=(r+o)/2|0,t[i[l]]<s?r=l+1:o=l;s<t[i[r]]&&(r>0&&(e[n]=i[r-1]),i[r]=n)}}for(r=i.length,o=i[r-1];r-- >0;)i[r]=o,o=e[o];return i}(_):ue;for(h=L.length-1,s=y-1;s>=0;s--){const t=f+s,l=e[t],d=t+1<c?e[t+1].el:n;0===_[s]?m(null,l,i,d,a,r,o):v&&(h<0||s!==L[h]?R(l,i,d,2):h--)}}},R=(t,e,n,a,r=null)=>{const{el:o,type:l,transition:s,children:c,shapeFlag:d}=t;if(6&d)R(t.component.subTree,e,n,a);else if(128&d)t.suspense.move(e,n,a);else if(64&d)l.move(t,e,n,Z);else if(l!==Oa)if(l!==Ea)if(2!==a&&1&d&&s)if(0===a)s.beforeEnter(o),i(o,e,n),La((()=>s.enter(o)),r);else{const{leave:t,delayLeave:a,afterLeave:r}=s,l=()=>i(o,e,n),c=()=>{t(o,(()=>{l(),r&&r()}))};a?a(o,l,c):c()}else i(o,e,n);else(({el:t,anchor:e},n,a)=>{let r;for(;t&&t!==e;)r=p(t),i(t,n,a),t=r;i(e,n,a)})(t,e,n);else{i(o,e,n);for(let t=0;t<c.length;t++)R(c[t],e,n,a);i(t.anchor,e,n)}},B=(t,e,i,n=!1,a=!1)=>{const{type:r,props:o,ref:l,children:s,dynamicChildren:c,shapeFlag:d,patchFlag:u,dirs:p}=t;if(null!=l&&wa(l,null,i,null),256&d)return void e.ctx.deactivate(t);const f=1&d&&p;let g;if((g=o&&o.onVnodeBeforeUnmount)&&xa(g,e,t),6&d)G(t.component,i,n);else{if(128&d)return void t.suspense.unmount(i,n);f&&Ca(t,null,e,"beforeUnmount"),c&&(r!==Oa||u>0&&64&u)?$(c,e,i,!1,!0):(r===Oa&&(128&u||256&u)||!a&&16&d)&&$(s,e,i),64&d&&(n||!Sa(t.props))&&t.type.remove(t,Z),n&&I(t)}((g=o&&o.onVnodeUnmounted)||f)&&La((()=>{g&&xa(g,e,t),f&&Ca(t,null,e,"unmounted")}),i)},I=t=>{const{type:e,el:i,anchor:a,transition:r}=t;if(e===Oa)return void j(i,a);if(e===Ea)return void(({el:t,anchor:e})=>{let i;for(;t&&t!==e;)i=p(t),n(t),t=i;n(e)})(t);const o=()=>{n(i),r&&!r.persisted&&r.afterLeave&&r.afterLeave()};if(1&t.shapeFlag&&r&&!r.persisted){const{leave:e,delayLeave:n}=r,a=()=>e(i,o);n?n(t.el,o,a):a()}else o()},j=(t,e)=>{let i;for(;t!==e;)i=p(t),n(t),t=i;n(e)},G=(t,e,i)=>{const{bum:n,effects:a,update:r,subTree:o,um:l}=t;if(n&&ze(n),a)for(let t=0;t<a.length;t++)Ye(a[t]);r&&(Ye(r),B(o,t,e,i)),l&&La(l,e),La((()=>{t.isUnmounted=!0}),e),e&&e.pendingBranch&&!e.isUnmounted&&t.asyncDep&&!t.asyncResolved&&t.suspenseId===e.pendingId&&(e.deps--,0===e.deps&&e.resolve()),__VUE_PROD_DEVTOOLS__},$=(t,e,i,n=!1,a=!1,r=0)=>{for(let o=r;o<t.length;o++)B(t[o],e,i,n,a)},z=t=>6&t.shapeFlag?z(t.component.subTree):128&t.shapeFlag?t.suspense.next():p(t.anchor||t.el),U=(t,e)=>{null==t?e._vnode&&B(e._vnode,null,null,!0):m(e._vnode||null,t,e),kn(),e._vnode=t},Z={p:m,um:B,m:R,r:I,mt:T,mc:w,pc:E,pbc:k,n:z,o:t};let W;return{render:U,hydrate:W,createApp:ba(U,W)}}(t)}(Gr))}const Ur=(...t)=>Object.prototype.toString.call(...t).slice(8,-1);var Zr={props:{data:{required:!0,validator:t=>"Null"===Ur(t)},name:{required:!0,type:String}}};const Wr={class:"null"},Vr={class:"key"},Hr={key:0,class:"separator"},qr=Za("span",{class:"value"},"null",-1);Zr.render=function(t,e,i,n,a,r){return Ra(),Ia("span",Wr,[Za("span",Vr,se(i.name),1),""!==i.name?(Ra(),Ia("span",Hr,": ")):Ha("v-if",!0),qr])},Zr.__file="src/components/NullWrapper.vue";var Kr={props:{data:{required:!0,validator:t=>"Boolean"===Ur(t)},name:{required:!0,type:String}}};const Jr={class:"boolean"},Qr={class:"key"},Xr={key:0,class:"separator"},Yr={class:"value"};Kr.render=function(t,e,i,n,a,r){return Ra(),Ia("span",Jr,[Za("span",Qr,se(i.name),1),""!==i.name?(Ra(),Ia("span",Xr,": ")):Ha("v-if",!0),Za("span",Yr,se(i.data),1)])},Kr.__file="src/components/BooleanWrapper.vue";var to={props:{data:{required:!0,validator:t=>"Number"===Ur(t)},name:{required:!0,type:String}}};const eo={class:"number"},io={class:"key"},no={key:0,class:"separator"},ao={class:"value"};to.render=function(t,e,i,n,a,r){return Ra(),Ia("span",eo,[Za("span",io,se(i.name),1),""!==i.name?(Ra(),Ia("span",no,": ")):Ha("v-if",!0),Za("span",ao,se(i.data),1)])},to.__file="src/components/NumberWrapper.vue";var ro={props:{data:{required:!0,validator:t=>"String"===Ur(t)},name:{required:!0,type:String}}};const oo={class:"string"},lo={class:"key"},so={key:0,class:"separator"},co=Za("span",{class:"quotes"},'"',-1),uo={class:"value"},po=Za("span",{class:"quotes"},'"',-1);ro.render=function(t,e,i,n,a,r){return Ra(),Ia("span",oo,[Za("span",lo,se(i.name),1),""!==i.name?(Ra(),Ia("span",so,": ")):Ha("v-if",!0),co,Za("span",uo,se(i.data),1),po])},ro.__file="src/components/StringWrapper.vue";const fo=new Set;function go(t={collapseSignal,expandSignal}){const e=Qi(!1),i=Qi(!1),n=()=>{e.value=!1,i.value=!i.value};aa((()=>t.collapseSignal),n);const a=Qi(!1),r=()=>{e.value=!0,a.value=!a.value};return aa((()=>t.expandSignal),r),aa((()=>t.data),(()=>{t.expandOnCreatedAndUpdated(t.path)?r():n()}),{immediate:!0}),{isExpanding:e,innerCollapseSignal:i,innerExpandSignal:a,handleClick:t=>{fo.clear(),!0===t.metaKey&&!0===t.shiftKey?n():!0===t.metaKey?r():e.value=!e.value}}}var ho={name:"array-wrapper",props:{path:{required:!0,validator:t=>"Array"===Ur(t)&&t.every((t=>"String"===Ur(t)||"Number"===Ur(t)))},data:{required:!0,validator:t=>"Array"===Ur(t)},name:{required:!0,type:String},collapseSignal:{default:!1,type:Boolean},expandSignal:{default:!1,type:Boolean},expandOnCreatedAndUpdated:{required:!0,type:Function},getKeys:{required:!0,type:Function}},setup(t){const{isExpanding:e,innerExpandSignal:i,innerCollapseSignal:n,handleClick:a}=go(t),r=vr((()=>t.getKeys(t.data,t.path))),o=fo.has(t.data);return fo.add(t.data),{keys:r,isExpanding:e,innerExpandSignal:i,innerCollapseSignal:n,handleClick:a,isCircular:o}},components:{}};const mo={class:"array"},Co={key:0,class:"value"},yo={key:0,class:"value"};ho.render=function(t,e,i,n,a,r){const o=Na("wrapper");return Ra(),Ia("span",mo,[Za("span",{class:"indicator",onClick:e[1]||(e[1]=(...t)=>n.handleClick&&n.handleClick(...t))},se(n.isExpanding?"▼":"▶"),1),Za("span",{class:"key",onClick:e[2]||(e[2]=(...t)=>n.handleClick&&n.handleClick(...t))},se(""===i.name?"":i.name),1),Za("span",{class:"separator",onClick:e[3]||(e[3]=(...t)=>n.handleClick&&n.handleClick(...t))},se(""===i.name?"":": "),1),Za("span",{class:"count",onClick:e[4]||(e[4]=(...t)=>n.handleClick&&n.handleClick(...t))},se(!1===n.isExpanding&&i.data.length>=2?"("+i.data.length+")":""),1),Za("span",{class:"preview",onClick:e[5]||(e[5]=(...t)=>n.handleClick&&n.handleClick(...t))},se(n.isExpanding?"Array("+i.data.length+")":"[...]"),1),n.isCircular?(Ra(),Ia(Oa,{key:0},[n.isExpanding?(Ra(),Ia("span",Co,[(Ra(!0),Ia(Oa,null,br(n.keys,(t=>(Ra(),Ia(o,{key:t,name:t,path:i.path.concat(t),data:i.data[t],"expand-signal":n.innerExpandSignal,"collapse-signal":n.innerCollapseSignal,expandOnCreatedAndUpdated:()=>!1,getKeys:i.getKeys},null,8,["name","path","data","expand-signal","collapse-signal","expandOnCreatedAndUpdated","getKeys"])))),128))])):Ha("v-if",!0)],64)):(Ra(),Ia(Oa,{key:1},[n.isExpanding?(Ra(),Ia("span",yo,[(Ra(!0),Ia(Oa,null,br(n.keys,(t=>(Ra(),Ia(o,{key:t,name:t,path:i.path.concat(t),data:i.data[t],"expand-signal":n.innerExpandSignal,"collapse-signal":n.innerCollapseSignal,expandOnCreatedAndUpdated:i.expandOnCreatedAndUpdated,getKeys:i.getKeys},null,8,["name","path","data","expand-signal","collapse-signal","expandOnCreatedAndUpdated","getKeys"])))),128))])):Ha("v-if",!0)],64))])},ho.__file="src/components/ArrayWrapper.vue";var vo={name:"object-wrapper",props:{path:{required:!0,validator:t=>"Array"===Ur(t)&&t.every((t=>"String"===Ur(t)||"Number"===Ur(t)))},data:{required:!0,validator:t=>"Object"===Ur(t)},name:{required:!0,type:String},collapseSignal:{default:!1,type:Boolean},expandSignal:{default:!1,type:Boolean},expandOnCreatedAndUpdated:{required:!0,type:Function},getKeys:{required:!0,type:Function}},setup(t){const{isExpanding:e,innerExpandSignal:i,innerCollapseSignal:n,handleClick:a}=go(t),r=vr((()=>t.getKeys(t.data,t.path))),o=fo.has(t.data);return fo.add(t.data),{keys:r,isExpanding:e,innerExpandSignal:i,innerCollapseSignal:n,handleClick:a,isCircular:o}},components:{}};const bo={class:"object"},_o={key:0,class:"value"},Lo={key:1,class:"value"};vo.render=function(t,e,i,n,a,r){const o=Na("wrapper");return Ra(),Ia("span",bo,[Za("span",{class:"indicator",onClick:e[1]||(e[1]=(...t)=>n.handleClick&&n.handleClick(...t))},se(n.isExpanding?"▼":"▶"),1),Za("span",{class:"key",onClick:e[2]||(e[2]=(...t)=>n.handleClick&&n.handleClick(...t))},se(""===i.name?"":i.name),1),Za("span",{class:"separator",onClick:e[3]||(e[3]=(...t)=>n.handleClick&&n.handleClick(...t))},se(""===i.name?"":": "),1),Za("span",{class:"preview",onClick:e[4]||(e[4]=(...t)=>n.handleClick&&n.handleClick(...t))},se(n.isExpanding?"":"{...}"),1),n.isCircular?(Ra(),Ia(Oa,{key:0},[n.isExpanding?(Ra(),Ia("span",_o,[(Ra(!0),Ia(Oa,null,br(n.keys,(t=>(Ra(),Ia(o,{key:t,class:"value",name:t,path:i.path.concat(t),data:i.data[t],"expand-signal":n.innerExpandSignal,"collapse-signal":n.innerCollapseSignal,expandOnCreatedAndUpdated:()=>!1,getKeys:i.getKeys},null,8,["name","path","data","expand-signal","collapse-signal","expandOnCreatedAndUpdated","getKeys"])))),128))])):Ha("v-if",!0)],64)):ma((Ra(),Ia("span",Lo,[(Ra(!0),Ia(Oa,null,br(n.keys,(t=>(Ra(),Ia(o,{key:t,class:"value",name:t,path:i.path.concat(t),data:i.data[t],"expand-signal":n.innerExpandSignal,"collapse-signal":n.innerCollapseSignal,expandOnCreatedAndUpdated:i.expandOnCreatedAndUpdated,getKeys:i.getKeys},null,8,["name","path","data","expand-signal","collapse-signal","expandOnCreatedAndUpdated","getKeys"])))),128))],512)),[[Ir,n.isExpanding]])])},vo.__file="src/components/ObjectWrapper.vue";const wo={name:"wrapper",props:{path:{required:!0,validator:t=>"Array"===Ur(t)&&t.every((t=>"String"===Ur(t)||"Number"===Ur(t)))},data:{required:!0,validator:t=>"Null"===Ur(t)||"Boolean"===Ur(t)||"Number"===Ur(t)||"String"===Ur(t)||"Array"===Ur(t)||"Object"===Ur(t)},name:{required:!0,type:String},collapseSignal:{default:!1,type:Boolean},expandSignal:{default:!1,type:Boolean},expandOnCreatedAndUpdated:{required:!0,type:Function},getKeys:{required:!0,type:Function}},setup:()=>({objectToString:Ur}),components:{NullWrapper:Zr,BooleanWrapper:Kr,NumberWrapper:to,StringWrapper:ro,ArrayWrapper:ho,ObjectWrapper:vo}};ho.components.Wrapper=wo,vo.components.Wrapper=wo,wo.render=function(t,e,i,n,a,r){const o=Na("null-wrapper"),l=Na("boolean-wrapper"),s=Na("number-wrapper"),c=Na("string-wrapper"),d=Na("array-wrapper"),u=Na("object-wrapper");return"Null"===t.objectToString(t.data)?(Ra(),Ia(o,{key:0,name:t.name,data:t.data},null,8,["name","data"])):"Boolean"===t.objectToString(t.data)?(Ra(),Ia(l,{key:1,name:t.name,data:t.data},null,8,["name","data"])):"Number"===t.objectToString(t.data)?(Ra(),Ia(s,{key:2,name:t.name,data:t.data},null,8,["name","data"])):"String"===t.objectToString(t.data)?(Ra(),Ia(c,{key:3,name:t.name,data:t.data},null,8,["name","data"])):"Array"===t.objectToString(t.data)?(Ra(),Ia(d,{key:4,name:t.name,path:t.path,data:t.data,"collapse-signal":t.collapseSignal,"expand-signal":t.expandSignal,expandOnCreatedAndUpdated:t.expandOnCreatedAndUpdated,getKeys:t.getKeys},null,8,["name","path","data","collapse-signal","expand-signal","expandOnCreatedAndUpdated","getKeys"])):"Object"===t.objectToString(t.data)?(Ra(),Ia(u,{key:5,name:t.name,path:t.path,data:t.data,"collapse-signal":t.collapseSignal,"expand-signal":t.expandSignal,expandOnCreatedAndUpdated:t.expandOnCreatedAndUpdated,getKeys:t.getKeys},null,8,["name","path","data","collapse-signal","expand-signal","expandOnCreatedAndUpdated","getKeys"])):Ha("v-if",!0)},wo.__file="src/components/Wrapper.vue";const xo=Object.freeze({expandOnCreatedAndUpdated:t=>!1,getKeys:(t,e)=>Object.keys(t)});var ko=gt({components:{CodeAce:mt,CodeMonaco:Kt,FullCodePreview:Xt,Preview:Ht},data:function(){return{mousedown:!1,leftContainerSize:40,mobileMode:!1,shared:dt,initialCode:"",currentTab:"code-editor",fullCode:"",fullCodeConfig:{mimimal:!1,esm:!0,node:!1}}},computed:{currentTime:function(){this.shared.message;for(var t=new Date,e=[t.getHours(),t.getMinutes(),t.getSeconds()],i="",n=0,a=e.length;n<a;++n)i+=(e[n]<10?"0":"")+e[n],n<a-1&&(i+=":");return i}},mounted:function(){var t=this;dt.isMobile?(this.leftContainerSize=0,ut().then((function(t){dt.runCode=pt(t)}))):(ut().then((function(e){t.initialCode=pt(e)})),window.addEventListener("mousemove",(function(e){if(t.mousedown){var i=e.clientX/window.innerWidth;i=Math.min(.9,Math.max(.1,i)),t.leftContainerSize=100*i}})),window.addEventListener("mouseup",(function(e){t.mousedown=!1})))},methods:{onSplitterDragStart:function(){this.mousedown=!0},disposeAndRun:function(){this.$refs.preview.refreshAll()},updateFullCode:function(){var t=this.$refs.preview.getOption();if(t){var e=(0,Yt.collectDeps)(t);e.push("svg"===dt.renderer?"SVGRenderer":"CanvasRenderer"),this.fullCode=(0,Yt.buildExampleCode)(dt.sourceCode,e,{minimal:this.fullCodeConfig.minimal,ts:!1,esm:this.fullCodeConfig.esm,theme:dt.darkMode?"dark":"",ROOT_PATH:dt.cdnRoot})}},updateOptionOutline:function(){var t=Object.freeze(this.$refs.preview.getOption());t&&((t,e,i={})=>{void 0===i.rootName&&(i.rootName=""),void 0===i.getKeys&&(i.getKeys=xo.getKeys),void 0===i.expandOnCreatedAndUpdated&&(i.expandOnCreatedAndUpdated=xo.expandOnCreatedAndUpdated),e.classList.add("object-visualizer"),((...t)=>{zr().render(...t)})(null,e),((...t)=>{const e=zr().createApp(...t),{mount:i}=e;return e.mount=t=>{const n=function(t){return ke(t)?document.querySelector(t):t}(t);if(!n)return;const a=e._component;xe(a)||a.render||a.template||(a.template=n.innerHTML),n.innerHTML="";const r=i(n);return n.removeAttribute("v-cloak"),n.setAttribute("data-v-app",""),r},e})(wo,{data:t,name:i.rootName,path:[],expandOnCreatedAndUpdated:i.expandOnCreatedAndUpdated,getKeys:i.getKeys}).mount(e)})(t,this.$el.querySelector("#option-outline"),{getKeys:function(t,e){return Object.keys(t).filter((function(e){return!(Array.isArray(t[e])&&!t[e].length)}))},expandOnCreatedAndUpdated:function(t){return 0===t.length||"series"===t[0]&&t.length<=1}})},updateTabContent:function(t){"full-code"===t?this.updateFullCode():"full-option"===t&&this.updateOptionOutline()}},watch:{"shared.typeCheck":function(t){this.initialCode=dt.sourceCode,this.updateFullCode()},currentTab:function(t){this.updateTabContent(t)},"shared.runHash":function(){this.updateTabContent(this.currentTab)},fullCodeConfig:{deep:!0,handler:function(){this.updateFullCode()}}}},Y,[],!1,null,null,null);ko.options.__file="src/editor/Editor.vue";const So=ko.exports;var No=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{attrs:{id:"example-explore"}},[i("div",{attrs:{id:"left-container"}},[i("div",{attrs:{id:"left-chart-nav"}},[i("scrollactive",{attrs:{"active-class":"active",offset:80,duration:500,"scroll-container-selector":"#example-explore","bezier-easing-value":".5,0,.35,1"},on:{itemchanged:t.onActiveNavChanged}},[i("ul",t._l(t.EXAMPLE_CATEGORIES,(function(e){return i("li",{key:e},[i("a",{staticClass:"left-chart-nav-link scrollactive-item",attrs:{id:"left-chart-nav-"+e,href:"#chart-type-"+e}},[i("span",{staticClass:"chart-icon",domProps:{innerHTML:t._s(t.icons[e])}}),t._v(" "),i("span",{staticClass:"chart-name"},[t._v(t._s(t.$t("chartTypes."+e)))])])])})),0)])],1)]),t._v(" "),i("div",{attrs:{id:"explore-container"}},[i("div",{staticClass:"example-list-panel"},t._l(t.exampleList,(function(e){return i("div",{key:e.category},[i("h3",{staticClass:"chart-type-head",attrs:{id:"chart-type-"+e.category}},[t._v("\n                    "+t._s(t.$t("chartTypes."+e.category))+"\n                    "),i("span",[t._v(t._s(e.category))])]),t._v(" "),i("div",{staticClass:"row",attrs:{id:"chart-row-"+e.category}},t._l(e.examples,(function(t){return i("div",{key:t.id,staticClass:"col-xl-2 col-lg-3 col-md-4 col-sm-6"},[i("ExampleCard",{attrs:{example:t}})],1)})),0)])})),0)]),t._v(" "),i("div",{attrs:{id:"toolbar"}},[i("el-switch",{attrs:{"active-color":"#181432","active-text":t.$t("editor.darkMode"),"inactive-text":""},model:{value:t.shared.darkMode,callback:function(e){t.$set(t.shared,"darkMode",e)},expression:"shared.darkMode"}})],1)])};No._withStripped=!0;var Mo=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"example-list-item"},[n("a",{staticClass:"example-link",attrs:{target:"_blank",href:t.exampleLink}},[n("img",{staticClass:"chart-area",attrs:{src:i(555),"data-src":t.screenshotURL}}),t._v(" "),n("h4",{staticClass:"example-title"},[t._v(t._s(t.title))]),t._v(" "),t.showSubtitle?n("h5",{staticClass:"example-subtitle"},[t._v(t._s(t.subtitle))]):t._e()])])};Mo._withStripped=!0;var To=gt({props:["example"],computed:{title:function(){return("zh"===dt.locale?this.example.titleCN:this.example.title)||this.example.title||""},showSubtitle:function(){return"zh"===dt.locale},subtitle:function(){return this.example.title||""},exampleTheme:function(){return this.example.theme||(dt.darkMode?"dark":"")},exampleLink:function(){var t=this.example,e=["c="+t.id],i=this.exampleTheme;return t.isGL&&e.push("gl=1"),i&&e.push("theme="+i),"local"in ot&&e.push("local"),"useDirtyRect"in ot&&e.push("useDirtyRect"),"./editor.html?"+e.join("&")},screenshotURL:function(){var t=this.example,e=this.exampleTheme?"-"+this.exampleTheme:"",i=st?"webp":"png",n=t.isGL?"data-gl":"data";return"".concat(dt.cdnRoot,"/").concat(n,"/thumb").concat(e,"/").concat(t.id,".").concat(i,"?_v_=").concat(dt.version)}}},Mo,[],!1,null,null,null);To.options.__file="src/explore/ExampleCard.vue";const Oo=To.exports,Ao="undefined"!=typeof window,Do=Ao&&!("onscroll"in window)||"undefined"!=typeof navigator&&/(gle|ing|ro)bot|crawl|spider/i.test(navigator.userAgent),Eo=Ao&&"IntersectionObserver"in window,Po=Ao&&"classList"in document.createElement("p"),Fo={elements_selector:"img",container:Do||Ao?document:null,threshold:300,thresholds:null,data_src:"src",data_srcset:"srcset",data_sizes:"sizes",data_bg:"bg",data_poster:"poster",class_loading:"loading",class_loaded:"loaded",class_error:"error",load_delay:0,auto_unobserve:!0,callback_enter:null,callback_exit:null,callback_reveal:null,callback_loaded:null,callback_error:null,callback_finish:null,use_native:!1},Ro=function(t,e){var i;let n="LazyLoad::Initialized",a=new t(e);try{i=new CustomEvent(n,{detail:{instance:a}})}catch(t){(i=document.createEvent("CustomEvent")).initCustomEvent(n,!1,!1,{instance:a})}window.dispatchEvent(i)},Bo="data-",Io="was-processed",jo="ll-timeout",Go="true",$o=(t,e)=>t.getAttribute(Bo+e),zo=(t,e,i)=>{var n=Bo+e;null!==i?t.setAttribute(n,i):t.removeAttribute(n)},Uo=t=>$o(t,Io)===Go,Zo=(t,e)=>zo(t,jo,e),Wo=t=>$o(t,jo),Vo=(t,e,i,n)=>{t&&(void 0===n?void 0===i?t(e):t(e,i):t(e,i,n))},Ho=(t,e)=>{t.loadingCount+=e,0===t._elements.length&&0===t.loadingCount&&Vo(t._settings.callback_finish,t)},qo=t=>{let e=[];for(let i,n=0;i=t.children[n];n+=1)"SOURCE"===i.tagName&&e.push(i);return e},Ko=(t,e,i)=>{i&&t.setAttribute(e,i)},Jo=(t,e)=>{Ko(t,"sizes",$o(t,e.data_sizes)),Ko(t,"srcset",$o(t,e.data_srcset)),Ko(t,"src",$o(t,e.data_src))},Qo={IMG:(t,e)=>{const i=t.parentNode;i&&"PICTURE"===i.tagName&&qo(i).forEach((t=>{Jo(t,e)})),Jo(t,e)},IFRAME:(t,e)=>{Ko(t,"src",$o(t,e.data_src))},VIDEO:(t,e)=>{qo(t).forEach((t=>{Ko(t,"src",$o(t,e.data_src))})),Ko(t,"poster",$o(t,e.data_poster)),Ko(t,"src",$o(t,e.data_src)),t.load()}},Xo=(t,e)=>{Po?t.classList.add(e):t.className+=(t.className?" ":"")+e},Yo=(t,e)=>{Po?t.classList.remove(e):t.className=t.className.replace(new RegExp("(^|\\s+)"+e+"(\\s+|$)")," ").replace(/^\s+/,"").replace(/\s+$/,"")},tl="load",el="loadeddata",il="error",nl=(t,e,i)=>{t.addEventListener(e,i)},al=(t,e,i)=>{t.removeEventListener(e,i)},rl=(t,e,i)=>{al(t,tl,e),al(t,el,e),al(t,il,i)},ol=function(t,e,i){var n=i._settings;const a=e?n.class_loaded:n.class_error,r=e?n.callback_loaded:n.callback_error,o=t.target;Yo(o,n.class_loading),Xo(o,a),Vo(r,o,i),Ho(i,-1)},ll=["IMG","IFRAME","VIDEO"],sl=(t,e)=>{var i=e._observer;dl(t,e),i&&e._settings.auto_unobserve&&i.unobserve(t)},cl=t=>{var e=Wo(t);e&&(clearTimeout(e),Zo(t,null))},dl=(t,e,i)=>{var n=e._settings;!i&&Uo(t)||(ll.indexOf(t.tagName)>-1&&(((t,e)=>{const i=a=>{ol(a,!0,e),rl(t,i,n)},n=a=>{ol(a,!1,e),rl(t,i,n)};((t,e,i)=>{nl(t,tl,e),nl(t,el,e),nl(t,il,i)})(t,i,n)})(t,e),Xo(t,n.class_loading)),((t,e)=>{const i=e._settings,n=t.tagName,a=Qo[n];if(a)return a(t,i),Ho(e,1),void(e._elements=(r=e._elements,o=t,r.filter((t=>t!==o))));var r,o;((t,e)=>{const i=$o(t,e.data_src),n=$o(t,e.data_bg);i&&(t.style.backgroundImage=`url("${i}")`),n&&(t.style.backgroundImage=n)})(t,i)})(t,e),(t=>{zo(t,Io,Go)})(t),Vo(n.callback_reveal,t,e),Vo(n.callback_set,t,e))},ul=t=>{return!!Eo&&(t._observer=new IntersectionObserver((e=>{e.forEach((e=>(t=>t.isIntersecting||t.intersectionRatio>0)(e)?((t,e,i)=>{const n=i._settings;Vo(n.callback_enter,t,e,i),n.load_delay?((t,e)=>{var i=e._settings.load_delay,n=Wo(t);n||(n=setTimeout((function(){sl(t,e),cl(t)}),i),Zo(t,n))})(t,i):sl(t,i)})(e.target,e,t):((t,e,i)=>{const n=i._settings;Vo(n.callback_exit,t,e,i),n.load_delay&&cl(t)})(e.target,e,t)))}),{root:(e=t._settings).container===document?null:e.container,rootMargin:e.thresholds||e.threshold+"px"}),!0);var e},pl=["IMG","IFRAME"],fl=(t,e)=>{return(t=>t.filter((t=>!Uo(t))))((i=t||(t=>t.container.querySelectorAll(t.elements_selector))(e),Array.prototype.slice.call(i)));var i},gl=function(t,e){var i;this._settings=(t=>Object.assign({},Fo,t))(t),this.loadingCount=0,ul(this),this.update(e),i=this,Ao&&window.addEventListener("online",(t=>{(t=>{var e=t._settings;e.container.querySelectorAll("."+e.class_error).forEach((t=>{Yo(t,e.class_error),(t=>{zo(t,Io,null)})(t)})),t.update()})(i)}))};gl.prototype={update:function(t){var e,i=this._settings;this._elements=fl(t,i),!Do&&this._observer?((t=>t.use_native&&"loading"in HTMLImageElement.prototype)(i)&&((e=this)._elements.forEach((t=>{-1!==pl.indexOf(t.tagName)&&(t.setAttribute("loading","lazy"),dl(t,e))})),this._elements=fl(t,i)),this._elements.forEach((t=>{this._observer.observe(t)}))):this.loadAll()},destroy:function(){this._observer&&(this._elements.forEach((t=>{this._observer.unobserve(t)})),this._observer=null),this._elements=null,this._settings=null},load:function(t,e){dl(t,this,e)},loadAll:function(){this._elements.forEach((t=>{sl(t,this)}))}},Ao&&function(t,e){if(e)if(e.length)for(let i,n=0;i=e[n];n+=1)Ro(t,i);else Ro(t,e)}(gl,window.lazyLoadOptions);const hl=gl;var ml={};["line","bar","scatter","pie","radar","funnel","gauge","map","graph","treemap","parallel","sankey","candlestick","boxplot","heatmap","pictorialBar","themeRiver","calendar","custom","sunburst","tree","dataset","geo","lines","dataZoom","rich","drag"].forEach((function(t){ml[t]=i(472)("./"+t+".svg")}));var Cl=i(926);["globe","bar3D","scatter3D","surface","map3D","lines3D","line3D","scatterGL","linesGL","flowGL","graphGL","geo3D"].forEach((function(t){ml[t]=Cl}));var yl="ec-shot-loaded",vl=gt({components:{ExampleCard:Oo},data:function(){var t={};function e(e,i){var n=0;do{for(var a=!1,r=0;r<e.length;r++){var o=e[r];if(!rt.hasOwnProperty(o.id)){"string"==typeof o.category&&(o.category=[o.category]);var l=(o.category||[])[n];if(l){a=!0;var s=t[l];s||(s={category:l,examples:[]},t[l]=s),o.isGL=i,s.examples.push(o)}}}if(!a)break}while(++n&&n<4)}return e(Ft,!1),e(Rt,!0),{shared:dt,icons:ml,EXAMPLE_CATEGORIES:at,exampleListByCategory:t}},watch:{"shared.darkMode":function(){for(var t=this.$el.querySelectorAll("img.chart-area"),e=0;e<t.length;e++)t[e].classList.remove(yl),t[e].setAttribute("data-was-processed","false");this._lazyload.update()}},computed:{exampleList:function(){for(var t=[],e=0;e<at.length;e++){var i=at[e],n=this.exampleListByCategory[i];n&&n.examples.length>0&&t.push({category:i,examples:n.examples})}return t}},mounted:function(){this._lazyload=new hl({elements_selector:"img.chart-area",load_delay:400,class_loaded:yl})},methods:{onActiveNavChanged:function(t,e,i){}}},No,[],!1,null,null,null);vl.options.__file="src/explore/Explore.vue";const bl=vl.exports;var _l=function(){var t=this.$createElement;return(this._self._c||t)("preview")};_l._withStripped=!0;var Ll=gt({components:{Preview:Ht},mounted:function(){ut().then((function(t){dt.runCode=pt(t)}))}},_l,[],!1,null,null,null);Ll.options.__file="src/editor/View.vue";const wl=Ll.exports;var xl=i(463),kl=i.n(xl);function Sl(t,e){var i=new Q({locale:e.locale,fallbackLocale:"en",messages:X});if(dt.cdnRoot=e.cdnRoot,dt.version=e.version,dt.locale=e.locale||"en","string"==typeof t&&(t=document.querySelector(t)),!t)throw new Error("Can't find el.");var n=document.createElement("div");t.appendChild(n),new(a())({i18n:i,el:n,render:function(t){return t({editor:So,explore:bl,view:wl}[e.page]||bl)}})}a().use(kl())},555:(t,e,i)=>{t.exports=i.p+"../asset/placeholder.jpg"},38:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="138px" viewBox="0 0 175 138" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>bar</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="bar" fill="#5067A2" fill-rule="nonzero"> <path d="M121.488231,0 L102.050114,0 C99.36627,-1.1969592e-16 97.1905846,2.17568537 97.1905846,4.85952929 L97.1905846,133.140471 C97.1905846,135.824315 99.36627,138 102.050114,138 L121.488231,138 C124.172075,138 126.34776,135.824315 126.34776,133.140471 L126.34776,4.85952929 C126.34776,2.17568537 124.172075,1.1969592e-16 121.488231,0 Z M170.083523,30.1571753 L150.645406,30.1571753 C147.961562,30.1571753 145.785877,32.3328607 145.785877,35.0167046 L145.785877,132.207289 C145.785877,134.891133 147.961562,137.066819 150.645406,137.066819 L170.083523,137.066819 C172.767367,137.066819 174.943052,134.891133 174.943052,132.207289 L174.943052,35.0167046 C174.943052,32.3328607 172.767367,30.1571753 170.083523,30.1571753 Z M53.4548215,39.8762339 C50.7709777,39.876234 48.5952924,42.0519193 48.5952924,44.7357631 L48.5952924,132.207289 C48.5952924,134.891133 50.7709777,137.066818 53.4548215,137.066819 L72.8929386,137.066819 C75.5767824,137.066818 77.7524677,134.891133 77.7524677,132.207289 L77.7524677,44.7357631 C77.7524676,42.0519193 75.5767824,39.876234 72.8929386,39.8762339 L53.4548215,39.8762339 Z M29.1571753,67.17388 L29.1571753,132.207289 C29.1571753,134.891133 26.9814901,137.066818 24.2976462,137.066819 L4.85952929,137.066819 C2.17568537,137.066819 3.28676086e-16,134.891133 0,132.207289 L0,67.17388 C7.33863613e-08,64.4900361 2.17568542,62.3143508 4.85952929,62.3143508 L24.2976462,62.3143508 C26.98149,62.3143509 29.1571753,64.4900362 29.1571753,67.17388 Z" id="Shape"></path> </g> </g> </svg>'},851:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="98px" viewBox="0 0 175 98" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>boxplot</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="boxplot" fill="#5067A2" fill-rule="nonzero"> <path d="M165.206074,4.85900217 L165.206074,43.7310195 L145.770065,43.7310195 L145.770065,14.5770065 C145.770065,11.8934537 143.594616,9.71800434 140.911063,9.71800434 L72.8850325,9.71800434 C70.2014797,9.71800434 68.0260304,11.8934537 68.0260304,14.5770065 L68.0260304,82.6030369 C68.0260304,85.2865897 70.2014797,87.462039 72.8850325,87.462039 L140.911063,87.462039 C143.594616,87.462039 145.770065,85.2865897 145.770065,82.6030369 L145.770065,53.4490239 L165.206074,53.4490239 L165.206074,92.3210412 C165.206074,95.004594 167.381523,97.1800434 170.065076,97.1800434 C172.748629,97.1800434 174.924078,95.004594 174.924078,92.3210412 L174.924078,4.85900217 C174.924078,2.17544937 172.748629,1.43751749e-14 170.065076,1.42108547e-14 C167.381523,-1.05827854e-15 165.206074,2.17544937 165.206074,4.85900217 Z M58.308026,14.5770065 L58.308026,82.6030369 C58.308026,83.8917244 57.7960969,85.1276306 56.8848572,86.0388703 C55.9736176,86.9501099 54.7377114,87.462039 53.4490239,87.462039 L34.0130152,87.462039 C31.3294624,87.462039 29.154013,85.2865897 29.154013,82.6030369 L29.154013,53.4490239 L9.71800434,53.4490239 L9.71800434,92.3210412 C9.71800434,95.004594 7.54255497,97.1800434 4.85900217,97.1800434 C2.17544937,97.1800434 3.28640434e-16,95.004594 0,92.3210412 L0,4.85900217 C-3.28640434e-16,2.17544937 2.17544937,4.31255248e-14 4.85900217,4.26325641e-14 C7.54255497,4.21396035e-14 9.71800434,2.17544937 9.71800434,4.85900217 L9.71800434,43.7310195 L29.154013,43.7310195 L29.154013,14.5770065 C29.154013,11.8934537 31.3294624,9.71800434 34.0130152,9.71800434 L53.4490239,9.71800434 C56.1325767,9.71800434 58.308026,11.8934537 58.308026,14.5770065 L58.308026,14.5770065 Z" id="Shape"></path> </g> </g> </svg>'},496:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="164px" height="138px" viewBox="0 0 164 138" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>calendar </title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="calendar-" transform="translate(-0.500000, -0.315789)" fill="#5067A2" fill-rule="nonzero"> <path d="M147.236842,56.3782895 C147.236842,53.9965615 145.304597,52.0657895 142.921053,52.0657895 L125.657895,52.0657895 C123.27435,52.0657895 121.342105,53.9965615 121.342105,56.3782895 L121.342105,65.0032895 C121.342105,67.3850175 123.27435,69.3157895 125.657895,69.3157895 L142.921053,69.3157895 C145.304597,69.3157895 147.236842,67.3850175 147.236842,65.0032895 L147.236842,56.3782895 Z M147.236842,82.2532895 C147.236842,79.8715615 145.304597,77.9407895 142.921053,77.9407895 L125.657895,77.9407895 C123.27435,77.9407895 121.342105,79.8715615 121.342105,82.2532895 L121.342105,90.8782895 C121.342105,93.2600175 123.27435,95.1907895 125.657895,95.1907895 L142.921053,95.1907895 C145.304597,95.1907895 147.236842,93.2600175 147.236842,90.8782895 L147.236842,82.2532895 Z M112.710526,56.3782895 C112.710526,53.9965615 110.778282,52.0657895 108.394737,52.0657895 L91.1315789,52.0657895 C88.7480342,52.0657895 86.8157895,53.9965615 86.8157895,56.3782895 L86.8157895,65.0032895 C86.8157895,67.3850175 88.7480342,69.3157895 91.1315789,69.3157895 L108.394737,69.3157895 C110.778282,69.3157895 112.710526,67.3850175 112.710526,65.0032895 L112.710526,56.3782895 Z M112.710526,82.2532895 C112.710526,79.8715615 110.778282,77.9407895 108.394737,77.9407895 L91.1315789,77.9407895 C88.7480342,77.9407895 86.8157895,79.8715615 86.8157895,82.2532895 L86.8157895,90.8782895 C86.8157895,93.2600175 88.7480342,95.1907895 91.1315789,95.1907895 L108.394737,95.1907895 C110.778282,95.1907895 112.710526,93.2600175 112.710526,90.8782895 L112.710526,82.2532895 Z M112.710526,108.128289 C112.710526,105.746561 110.778282,103.815789 108.394737,103.815789 L91.1315789,103.815789 C88.7480342,103.815789 86.8157895,105.746561 86.8157895,108.128289 L86.8157895,116.753289 C86.8157895,119.135017 88.7480342,121.065789 91.1315789,121.065789 L108.394737,121.065789 C110.778282,121.065789 112.710526,119.135017 112.710526,116.753289 L112.710526,108.128289 Z M78.1842105,56.3782895 C78.1842105,53.9965615 76.2519658,52.0657895 73.8684211,52.0657895 L56.6052632,52.0657895 C54.2217184,52.0657895 52.2894737,53.9965615 52.2894737,56.3782895 L52.2894737,65.0032895 C52.2894737,67.3850175 54.2217184,69.3157895 56.6052632,69.3157895 L73.8684211,69.3157895 C76.2519658,69.3157895 78.1842105,67.3850175 78.1842105,65.0032895 L78.1842105,56.3782895 Z M78.1842105,82.2532895 C78.1842105,79.8715615 76.2519658,77.9407895 73.8684211,77.9407895 L56.6052632,77.9407895 C54.2217184,77.9407895 52.2894737,79.8715615 52.2894737,82.2532895 L52.2894737,90.8782895 C52.2894737,93.2600175 54.2217184,95.1907895 56.6052632,95.1907895 L73.8684211,95.1907895 C76.2519658,95.1907895 78.1842105,93.2600175 78.1842105,90.8782895 L78.1842105,82.2532895 Z M78.1842105,108.128289 C78.1842105,105.746561 76.2519658,103.815789 73.8684211,103.815789 L56.6052632,103.815789 C54.2217184,103.815789 52.2894737,105.746561 52.2894737,108.128289 L52.2894737,116.753289 C52.2894737,119.135017 54.2217184,121.065789 56.6052632,121.065789 L73.8684211,121.065789 C76.2519658,121.065789 78.1842105,119.135017 78.1842105,116.753289 L78.1842105,108.128289 Z M43.6578947,82.2532895 C43.6578947,79.8715615 41.72565,77.9407895 39.3421053,77.9407895 L22.0789474,77.9407895 C19.6954027,77.9407895 17.7631579,79.8715615 17.7631579,82.2532895 L17.7631579,90.8782895 C17.7631579,93.2600175 19.6954027,95.1907895 22.0789474,95.1907895 L39.3421053,95.1907895 C41.72565,95.1907895 43.6578947,93.2600175 43.6578947,90.8782895 L43.6578947,82.2532895 Z M43.6578947,108.128289 C43.6578947,105.746561 41.72565,103.815789 39.3421053,103.815789 L22.0789474,103.815789 C19.6954027,103.815789 17.7631579,105.746561 17.7631579,108.128289 L17.7631579,116.753289 C17.7631579,119.135017 19.6954027,121.065789 22.0789474,121.065789 L39.3421053,121.065789 C41.72565,121.065789 43.6578947,119.135017 43.6578947,116.753289 L43.6578947,108.128289 Z M164.5,39.1282895 L164.5,134.003289 C164.5,136.385017 162.567755,138.315789 160.184211,138.315789 L4.81578947,138.315789 C2.43224476,138.315789 0.5,136.385017 0.5,134.003289 L0.5,39.1282895 C0.5,36.7465615 2.43224476,34.8157895 4.81578947,34.8157895 L160.184211,34.8157895 C162.567755,34.8157895 164.5,36.7465615 164.5,39.1282895 Z M164.5,4.62828947 L164.5,21.8782895 C164.5,24.2600175 162.567755,26.1907895 160.184211,26.1907895 L4.81578947,26.1907895 C2.43224476,26.1907895 0.5,24.2600175 0.5,21.8782895 L0.5,4.62828947 C0.5,2.24656149 2.43224476,0.315789474 4.81578947,0.315789474 L160.184211,0.315789474 C162.567755,0.315789474 164.5,2.24656149 164.5,4.62828947 Z" id="Shape"></path> </g> </g> </svg>'},173:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="138px" viewBox="0 0 175 138" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>Candlestick (1)</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="Candlestick-(1)" fill="#5067A2" fill-rule="nonzero"> <path d="M121.508001,34.0222403 L116.647681,33.0222403 L116.647681,4.86032 C116.647681,2.17603934 114.471642,-7.11961547e-08 111.787361,-7.11961549e-08 C109.10308,-7.1196155e-08 106.927041,2.17603934 106.927041,4.86032 L106.927041,33.0222403 L102.066721,33.0222403 C100.777684,33.0222403 99.5414424,33.5343082 98.6299556,34.4457951 C97.7184688,35.3572819 97.2064009,36.5935234 97.2064009,37.8825604 L97.2064009,105.927041 C97.2064009,107.216078 97.7184688,108.452319 98.6299556,109.363806 C99.5414424,110.275293 100.777684,110.787361 102.066721,110.787361 L106.927041,110.787361 L106.927041,125.572455 C106.927041,128.256735 109.10308,130.432775 111.787361,130.432775 C114.471642,130.432775 116.647681,128.256735 116.647681,125.572455 L116.647681,110.787361 L121.508001,110.787361 C122.797038,110.787361 124.03328,110.275293 124.944766,109.363806 C125.856253,108.452319 126.368321,107.216078 126.368321,105.927041 L126.368321,37.8825604 C126.368321,36.5935233 125.856253,35.3572819 124.944766,34.445795 C124.03328,33.5343082 122.797038,33.0222402 121.508001,33.0222403 L121.508001,34.0222403 Z M170.111202,41.6032004 L165.250881,41.6032004 L165.250881,27.0222403 C165.250881,24.3379598 163.074842,22.1619207 160.390561,22.1619207 C157.706281,22.1619207 155.530242,24.3379598 155.530241,27.0222403 L155.530241,41.6032004 L150.669921,41.6032004 C149.380884,41.6032004 148.144643,42.1152684 147.233156,43.0267552 C146.321669,43.938242 145.809601,45.1744835 145.809601,46.4635205 L145.809601,75.6254408 C145.809601,78.3097214 147.985641,80.4857608 150.669921,80.4857608 L155.530241,80.4857608 L155.530241,104.729037 C155.530241,107.413318 157.706281,109.589357 160.390561,109.589357 C163.074842,109.589357 165.250881,107.413318 165.250881,104.729037 L165.250881,80.4857608 L170.111202,80.4857608 C172.795482,80.4857608 174.971522,78.3097214 174.971522,75.6254408 L174.971522,46.4635205 C174.971522,45.1744835 174.459454,43.938242 173.547967,43.0267552 C172.63648,42.1152684 171.400239,41.6032004 170.111202,41.6032004 L170.111202,41.6032004 Z M72.9048007,84.3460808 L68.0444807,84.3460808 L68.0444807,55.1841605 C68.0444805,52.4998799 65.8684412,50.3238407 63.1841606,50.3238407 C60.49988,50.3238407 58.3238406,52.4998799 58.3238405,55.1841605 L58.3238405,84.3460808 L53.4635205,84.3460808 C52.1744835,84.3460807 50.938242,84.8581487 50.0267552,85.7696355 C49.1152683,86.6811224 48.6032003,87.9173639 48.6032004,89.2064009 L48.6032004,118.368321 C48.6032004,119.657358 49.1152684,120.8936 50.0267552,121.805086 C50.938242,122.716573 52.1744835,123.228641 53.4635205,123.228641 L58.3238405,123.228641 L58.3238405,132.949281 C58.3238406,135.633562 60.49988,137.809601 63.1841606,137.809601 C65.8684412,137.809601 68.0444805,135.633562 68.0444807,132.949281 L68.0444807,123.228641 L72.9048007,123.228641 C75.5890813,123.228641 77.7651206,121.052602 77.7651206,118.368321 L77.7651206,89.2064009 C77.7651207,87.9173639 77.2530527,86.6811224 76.3415659,85.7696356 C75.4300791,84.8581488 74.1938377,84.3460808 72.9048007,84.3460808 Z M29.1619203,41.6032004 L29.1619203,90.2064009 C29.1619203,92.8906815 26.9858809,95.0667209 24.3016003,95.0667209 L19.4412801,95.0667209 L19.4412801,119.572455 C19.4412801,122.256735 17.2652407,124.432775 14.5809601,124.432775 C11.8966795,124.432775 9.72064013,122.256735 9.72064013,119.572455 L9.72064013,95.0667209 L4.86032,95.0667209 C2.17603938,95.0667209 3.28729566e-16,92.8906815 0,90.2064009 L0,41.6032004 C-3.28729566e-16,38.9189198 2.17603938,36.7428804 4.86032,36.7428804 L9.72064013,36.7428804 L9.72064013,12.4412801 C9.72064013,9.75699951 11.8966795,7.58096013 14.5809601,7.58096013 C17.2652407,7.58096013 19.4412801,9.75699951 19.4412801,12.4412801 L19.4412801,36.7428804 L24.3016003,36.7428804 C26.9858809,36.7428804 29.1619203,38.9189198 29.1619203,41.6032004 Z" id="Shape"></path> </g> </g> </svg>'},353:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="159px" height="142px" viewBox="0 0 159 142" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>custom</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="custom" transform="translate(0.000000, -0.825151)" fill="#5067A2" fill-rule="nonzero"> <path d="M74.8235294,81.2918174 L74.8235294,138.091817 C74.8235294,140.705965 72.7298022,142.825151 70.1470588,142.825151 L4.67647054,142.825151 C2.09372718,142.825151 3.16294839e-16,140.705965 0,138.091817 L0,81.2918174 C-3.63362476e-08,80.0364594 0.492698108,78.8325175 1.36970646,77.9448453 C2.24671482,77.0571731 3.43619342,76.558484 4.67647054,76.558484 L70.1470588,76.558484 C71.387336,76.558484 72.5768146,77.0571731 73.4538229,77.9448453 C74.3308313,78.8325175 74.8235294,80.0364594 74.8235294,81.2918174 Z M74.8235294,5.55848402 L74.8235294,62.358484 C74.8235294,63.6138421 74.3308313,64.817784 73.4538229,65.7054562 C72.5768146,66.5931284 71.387336,67.0918174 70.1470588,67.0918174 L4.67647054,67.0918174 C3.43619342,67.0918174 2.24671482,66.5931284 1.36970646,65.7054562 C0.492698108,64.817784 -3.63362423e-08,63.6138421 0,62.358484 L0,5.55848402 C-2.35506485e-15,4.30312598 0.492698161,3.09918414 1.36970651,2.21151195 C2.24671486,1.32383977 3.43619344,0.825150732 4.67647054,0.825150732 L70.1470588,0.825150732 C72.7298022,0.825150732 74.8235294,2.94433623 74.8235294,5.55848402 Z M159,10.2918174 L159,57.6251507 C159,62.8534463 154.812546,67.0918174 149.647059,67.0918174 L93.5294118,67.0918174 C88.363925,67.0918174 84.1764706,62.8534464 84.1764706,57.6251507 L84.1764706,10.2918174 C84.1764706,5.06352179 88.363925,0.825150732 93.5294118,0.825150732 L149.647059,0.825150732 C154.812546,0.825150809 159,5.06352184 159,10.2918174 Z M154.323529,76.558484 C155.563807,76.558484 156.753285,77.0571731 157.630294,77.9448453 C158.507302,78.8325175 159,80.0364594 159,81.2918174 L159,138.091817 C159,140.705965 156.906273,142.825151 154.323529,142.825151 L88.8529412,142.825151 C86.2701978,142.825151 84.1764706,140.705965 84.1764706,138.091817 L84.1764706,81.2918174 C84.1764706,80.0364594 84.6691687,78.8325175 85.5461771,77.9448453 C86.4231854,77.0571731 87.612664,76.558484 88.8529412,76.558484 L154.323529,76.558484 L154.323529,76.558484 Z M93.5294118,133.358484 L149.647059,133.358484 L149.647059,86.0251507 L93.5294118,86.0251507 L93.5294118,133.358484 L93.5294118,133.358484 Z" id="Shape"></path> </g> </g> </svg>'},6:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="83px" viewBox="0 0 175 83" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>dataZoom</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="dataZoom" fill="#5067A2" fill-rule="nonzero"> <path d="M9.20037003,18.4191593 L9.20957963,13.8143694 L9.20957963,18.4191593 L41.4431082,18.4191593 L41.4431082,64.4670572 L9.20957963,64.4670572 L9.20957963,18.4191593 L9.20037003,18.4191593 Z M133.538904,64.4670572 L133.538904,18.4191593 L165.772433,18.4191593 L165.772433,64.4670572 L133.538904,64.4670572 L133.538904,64.4670572 Z M165.772433,9.20957963 L133.538904,9.20957963 L133.538904,4.60478981 C133.538904,2.06163473 131.47727,2.74466854e-07 128.934115,2.74466854e-07 C126.390959,2.74466855e-07 124.329325,2.06163473 124.329325,4.60478981 L124.329325,9.20957963 L50.6526879,9.20957963 L50.6526879,4.60478981 C50.6526879,2.06163462 48.5910532,-6.1602121e-15 46.047898,-6.31593544e-15 C43.5047429,-6.47165878e-15 41.4431082,2.06163462 41.4431082,4.60478981 L41.4431082,9.20957963 L9.20957963,9.20957963 C4.13510123,9.20957963 0,13.3446809 0,18.4191593 L0,64.4670572 C0,69.5507451 4.13510123,73.6766368 9.20957963,73.6766368 L41.4431082,73.6766368 L41.4431082,78.2814267 C41.4431082,80.8245818 43.5047429,82.8862165 46.047898,82.8862165 C48.5910532,82.8862165 50.6526879,80.8245818 50.6526879,78.2814267 L50.6526879,73.6766368 L124.329325,73.6766368 L124.329325,78.2814267 C124.329325,80.8245818 126.390959,82.8862165 128.934115,82.8862165 C131.47727,82.8862165 133.538904,80.8245818 133.538904,78.2814267 L133.538904,73.6766368 L165.772433,73.6766368 C170.858743,73.6766368 174.982013,69.5533676 174.982013,64.4670572 L174.982013,18.4191593 C174.982013,13.3446809 170.856121,9.20957963 165.772433,9.20957963 Z" id="Shape"></path> </g> </g> </svg>'},238:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="145px" height="157px" viewBox="0 0 145 157" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>dataset</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="dataset" fill="#5067A2" fill-rule="nonzero"> <path d="M77,133.051622 C77,135.720999 74.7614237,137.884956 72,137.884956 C69.2385763,137.884956 67,135.720999 67,133.051622 L67,92.7182891 C67,90.0489128 69.2385763,87.8849558 72,87.8849558 C74.7614237,87.8849558 77,90.0489128 77,92.7182891 L77,133.051622 Z M87,92.7182888 C87.0000002,90.0489126 89.2385764,87.8849558 92,87.8849558 C94.7614236,87.8849558 96.9999998,90.0489126 97,92.7182888 L97,133.051623 C96.9999998,135.720999 94.7614236,137.884956 92,137.884956 C89.2385764,137.884956 87.0000002,135.720999 87,133.051623 L87,92.7182888 Z M58,133.072456 C58,135.730326 55.7614237,137.884956 53,137.884956 C50.2385763,137.884956 48,135.730326 48,133.072456 L48,73.6974557 C48,71.0395854 50.2385763,68.8849558 53,68.8849558 C55.7614237,68.8849558 58,71.0395854 58,73.6974557 L58,133.072456 Z M39,133.066774 C38.9999999,135.727782 36.7614237,137.884956 34,137.884956 C31.2385763,137.884956 29.0000001,135.727782 29,133.066774 L29,44.7031376 C29,42.0421293 31.2385763,39.8849558 34,39.8849558 C36.7614237,39.8849558 39,42.0421293 39,44.7031376 L39,133.066774 Z M126.3,132.884956 L126.3,63.9913737 C126.403893,62.6917747 125.897136,61.4145164 124.9129,60.4952543 L83.0962,21.7192841 C82.9895,21.6282393 82.8537001,21.5918214 82.7469999,21.5098811 C81.8447692,20.5509026 80.5501183,19.997952 79.1870999,19.9894333 L39,19.9894333 L39,10.8849558 L135.9903,10.8849558 L136,132.884956 L126.3,132.884956 Z M116,146.884956 L10,146.884956 L10,28.8849558 L74.0143636,28.8849558 L74.0143636,58.8841865 C74.0143636,63.8855711 78.3314545,67.9611095 83.6507272,67.9611097 L116,67.9611097 L116,146.884956 Z M144.990333,10.0614263 C144.990333,5.00519104 140.659667,0.884955752 135.323667,0.884955752 L38.6666667,0.884955752 C33.3403334,0.884955752 29.0000001,5.00519104 28.9999999,10.0614263 L28.9999999,19.2378969 L9.66666665,19.2378969 C4.34033332,19.2378969 0,23.3581322 0,28.4143675 L0,147.708485 C0,152.773897 4.34033332,156.884956 9.66666665,156.884956 L116,156.884956 C121.338753,156.884956 125.666667,152.77651 125.666667,147.708485 L125.666667,142.202603 L135.333333,142.202603 C140.672086,142.202603 145,138.094157 145,133.026132 L144.990333,10.0614263 Z" id="Shape"></path> </g> </g> </svg>'},642:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="159px" viewBox="0 0 175 159" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>drag</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="drag" transform="translate(0.000000, 0.000000)" fill="#5067A2" fill-rule="nonzero"> <path d="M174.799112,77.2243509 C175.141784,80.4933122 173.860538,83.7226514 171.369927,85.8675022 L145.821493,107.665891 C143.704571,109.29545 140.681703,108.978807 138.948417,106.945941 C137.215132,104.913075 137.380357,101.878162 139.32409,100.045479 L158.345038,83.8019696 L92.4385031,83.8019696 L92.4385031,144.173679 L109.273597,130.085944 C111.397298,128.30558 114.562167,128.583909 116.342532,130.70761 C118.122896,132.83131 117.844567,135.99618 115.720867,137.776544 L93.3308935,156.516741 C89.5429956,159.697467 83.9995074,159.633553 80.2859517,156.366338 L59.0490671,137.706356 C57.140269,135.840194 57.0244102,132.80703 58.7852891,130.800695 C60.546168,128.79436 63.5687212,128.515654 65.6667932,130.166159 L82.4116455,144.885586 L82.4116455,83.8019696 L16.5051101,83.8019696 L35.5360859,100.045479 C36.9700273,101.186546 37.6671397,103.019075 37.3541473,104.824694 C37.041155,106.630312 35.7679333,108.121296 34.0335988,108.713163 C32.2992644,109.305031 30.380183,108.903467 29.0286553,107.665891 L3.52032945,85.8975828 C1.25557692,83.9644222 -0.0328273042,81.1246883 0.00397844461,78.147297 C0.0407841935,75.1699056 1.39899211,72.3628885 3.71083975,70.4863026 L29.118897,49.820949 C31.2816477,48.328475 34.2285594,48.7508003 35.8850928,50.7906204 C37.5416262,52.8304405 37.3503183,55.8013071 35.4458442,57.6118174 L15.5625855,73.7751119 L82.4116455,73.7751119 L82.4116455,14.1153089 L65.6667932,28.8347359 C64.3276607,30.0598688 62.43094,30.4655542 60.7078175,29.8954003 C58.9846951,29.3252464 57.7042897,27.8683002 57.360198,26.0862151 C57.0161064,24.30413 57.662069,22.4752334 59.0490671,21.3045658 L80.2759248,2.65461056 C83.9853287,-0.629787191 89.5418994,-0.698070701 93.3308935,2.49418084 L115.720867,21.2243509 C117.320514,22.5881211 117.904229,24.8023516 117.184781,26.777481 C116.465334,28.7526104 114.594242,30.0726692 112.492218,30.0880931 C111.314421,30.0896881 110.174126,29.6740664 109.273597,28.9149508 L92.4385031,14.8272158 L92.4385031,73.7751119 L159.29759,73.7751119 L139.414331,57.6118174 C138.022627,56.4816171 137.339593,54.6948034 137.622523,52.9244518 C137.905453,51.1541001 139.111362,49.669169 140.785997,49.0290176 C142.460631,48.3888662 144.349574,48.6907487 145.741278,49.820949 L171.149336,70.4863026 C173.218763,72.1532673 174.533435,74.5803549 174.799112,77.2243509" id="Path"></path> </g> </g> </svg>'},797:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="137px" viewBox="0 0 175 137" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>funnel </title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="funnel-" fill="#5067A2" fill-rule="nonzero"> <path d="M116.331467,108.325366 L60.5285591,108.325366 C58.9291301,108.325102 57.4459378,109.160985 56.6178211,110.52934 C55.7897045,111.897695 55.7371711,113.5994 56.4793063,115.016231 L66.3876358,133.863994 C67.1750739,135.367321 68.7306799,136.310539 70.4277481,136.313655 L106.432278,136.313655 C108.129346,136.310539 109.684952,135.367321 110.47239,133.863994 L120.380719,115.016231 C121.122854,113.5994 121.070321,111.897695 120.242204,110.52934 C119.414088,109.160985 117.930896,108.325102 116.331467,108.325366 L116.331467,108.325366 Z M134.968998,71.0137414 L41.9001683,71.0137414 C40.2925309,71.0025161 38.7981975,71.8401445 37.9688482,73.2173896 C37.139499,74.5946346 37.098146,76.3072185 37.8600561,77.722887 L47.8415098,96.5706503 C48.6348072,98.0648166 50.1899261,98.9971843 51.881622,98.9928896 L125.024106,98.9928896 C126.716211,98.9981743 128.270437,98.0607046 129.055078,96.5615098 L139.00911,77.7137465 C139.754942,76.2976526 139.705659,74.5945859 138.879188,73.2239903 C138.052717,71.8533948 136.569493,71.014997 134.968998,71.0137414 L134.968998,71.0137414 Z M153.63395,35.5759245 L23.2352156,35.5759245 C21.6347203,35.5771801 20.151496,36.4155778 19.325025,37.7861734 C18.498554,39.156769 18.4492717,40.8598357 19.1951033,42.2759296 L29.1491354,61.1145524 C29.9359394,62.6172637 31.4930184,63.5578521 33.1892477,63.5550727 L143.70734,63.5550727 C145.402425,63.5537423 146.957543,62.6143387 147.747452,61.1145524 L157.674063,42.266789 C158.415446,40.8514003 158.363824,39.1515952 157.537917,37.7838041 C156.712011,36.4160129 155.231751,35.5788553 153.63395,35.5759245 L153.63395,35.5759245 Z M174.995358,4.69922974 C174.994253,5.44166711 174.81229,6.17265769 174.465208,6.82897225 L164.538597,25.6767355 C163.746223,27.1729824 162.191592,28.108575 160.498485,28.1081153 L14.4968732,28.1081153 C12.8031994,28.1106197 11.2475937,27.1744407 10.4567611,25.6767355 L0.530150516,6.82897225 C-0.215681017,5.41287837 -0.166398756,3.70981169 0.660072225,2.33921611 C1.48654321,0.96862053 2.96976742,0.130222778 4.57026264,0.1289671 L170.425096,0.1289671 C172.949182,0.1289671 174.995358,2.17514338 174.995358,4.69922974 L174.995358,4.69922974 Z" id="Shape"></path> </g> </g> </svg>'},822:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="100px" viewBox="0 0 175 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>gange</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="gange" fill="#5067A2" fill-rule="nonzero"> <path d="M143.698895,82.9089367 C142.437361,67.6655629 135.026556,53.5920156 123.171797,43.9267897 L135.7146,25.9137777 C153.409366,39.7333892 164.305583,60.4959162 165.625777,82.9089367 L143.698895,82.9089367 L143.698895,82.9089367 Z M115.601912,38.6960173 C112.342946,36.8541942 108.909619,35.339582 105.352176,34.174346 L107.654453,22.8655635 C107.981818,21.2534161 107.424245,19.5890834 106.191766,18.4995036 C104.959288,17.4099237 103.239147,17.0606298 101.679304,17.5831975 C100.119461,18.1057651 98.9568933,19.4208039 98.6295287,21.0329513 L96.4193432,31.8996968 C93.4676767,31.3974455 90.4804994,31.132603 87.4865101,31.1077136 C77.1817177,31.1042083 67.0761605,33.9468942 58.284434,39.3222365 L45.5021944,21.4934066 C70.6181595,5.43266895 102.701308,5.12868193 128.117087,20.7106326 L115.601912,38.6960173 L115.601912,38.6960173 Z M31.2649159,82.9089367 L9.34724295,82.9089367 C10.6455448,61.0475255 21.0636813,40.7358347 38.0612364,26.9267794 L50.843476,44.7464001 C39.5322634,54.3814577 32.493597,68.101229 31.2649159,82.9089367 L31.2649159,82.9089367 Z M87.4865101,0.0269797767 C39.2492112,0.0269797767 0,39.276191 0,87.5134899 C5.46353103e-08,90.0565144 2.06152873,92.118043 4.60455321,92.118043 L35.685287,92.118043 C38.2283115,92.118043 40.2898401,90.0565144 40.2898401,87.5134899 C40.315223,61.4580101 61.4310302,40.3422029 87.4865101,40.31682 C89.908505,40.31682 92.2384089,40.6759751 94.5683128,41.0351302 L86.9247546,78.6451205 C82.0531374,79.4923583 78.2774037,83.5443651 78.2774037,88.6646282 C78.2774037,94.3864333 82.9158433,99.0248728 88.6376484,99.0248728 C94.3594535,99.0248728 98.997893,94.3864333 98.997893,88.6646282 C98.997893,85.7361324 97.7546637,83.102328 95.793124,81.2236703 L103.501146,43.3005704 C121.633876,49.8942906 134.68318,67.1337376 134.68318,87.5134899 C134.68318,90.0565144 136.744709,92.118043 139.287733,92.118043 L170.368467,92.118043 C172.911491,92.118043 174.97302,90.0565144 174.97302,87.5134899 C174.97302,39.276191 135.723809,0.0269798756 87.4865101,0.0269797767 L87.4865101,0.0269797767 Z" id="Shape"></path> </g> </g> </svg>'},317:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="142px" viewBox="0 0 175 142" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>geo</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="geo" fill="#5067A2" fill-rule="nonzero"> <path d="M9.20332621,34.019885 L55.2181167,56.861627 L55.2181167,128.571076 L9.20332621,103.207724 L9.20332621,34.019885 Z M171.819596,50.2815119 L151.996424,43.1124076 C149.63126,42.3318353 147.074346,43.5747977 146.227189,45.9169373 C145.380032,48.2590769 146.550177,50.8501245 148.867418,51.7631882 L165.653614,57.8371405 L165.653614,131.138702 L119.638823,119.625801 L119.638823,87.4706656 C119.638823,84.9293389 117.578671,82.8691865 115.037344,82.8691865 C112.496018,82.8691865 110.435865,84.9293389 110.435865,87.4706656 L110.435865,119.644207 L64.4210748,131.41479 L64.4210748,58.2236647 L81.060023,51.7263763 C83.2914479,50.7138845 84.3410975,48.1328302 83.4496557,45.8503474 C82.5582139,43.5678645 80.037126,42.3813901 77.7101463,43.1492194 L61.2460542,49.5820871 L6.64490386,22.4793755 C5.21943693,21.7614379 3.52312776,21.8367966 2.16693957,22.6783095 C0.810751382,23.5198224 -0.00997312356,25.0062796 0.000368118324,26.6023007 L0.000368118324,105.913394 C0.000368118324,107.597535 0.91146097,109.134429 2.38393426,109.944289 L58.8072703,141.059491 C59.8287987,141.620871 61.0435892,141.795727 62.16635,141.49203 L115.046547,127.963681 L169.141535,141.501233 C170.516378,141.840666 171.970958,141.532118 173.089604,140.663763 C174.206625,139.788526 174.858383,138.44767 174.856572,137.028595 L174.856572,54.6069022 C174.855748,52.6695411 173.64154,50.9402146 171.819596,50.2815119 Z M115.037344,16.5986853 C121.13907,16.6012266 126.083435,21.5497125 126.080894,27.651438 C126.078353,33.7531634 121.129867,38.697529 115.028141,38.6949877 C108.926416,38.6924463 103.98205,33.7439604 103.984592,27.642235 C103.987133,21.5405096 108.935619,16.596144 115.037344,16.5986853 L115.037344,16.5986853 Z M99.5763747,54.7173377 C102.208421,58.3341002 105.00612,61.9140509 107.813022,65.199507 C108.806942,66.3866886 109.718035,67.4358258 110.491083,68.3285127 C111.04326,68.8806902 111.402176,69.2856204 111.558626,69.4512736 C112.438859,70.4713636 113.723372,71.0524431 115.07068,71.0400337 C116.417988,71.0276243 117.69158,70.4229833 118.552874,69.3868529 C118.72773,69.2211997 119.06824,68.8254725 119.555997,68.264092 C120.506081,67.2663872 121.406012,66.2220982 122.252463,65.1350863 C125.059366,61.8496302 127.866268,58.2788825 130.498314,54.6437141 C133.121157,51.0177486 135.412694,47.4470008 137.262488,44.0879211 C140.741206,37.8851274 142.646219,32.5382087 142.646219,28.1207888 C142.701436,12.5861956 130.314255,0.0425636812 115.028141,0.0425636812 C99.7604339,0.0425636812 87.42847,12.5861956 87.42847,28.1207888 C87.42847,32.5382087 89.3334823,37.9403451 92.8029975,44.1523418 C94.7172128,47.5114215 97.0087494,51.0729663 99.5763747,54.7173377 Z" id="Shape"></path> </g> </g> </svg>'},926:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="120px" viewBox="0 0 175 120" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>gl</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="gl" fill="#5067A2"> <path d="M170.394737,101.315789 L119.736842,101.315789 L119.736842,4.60526316 C119.736842,2.06315789 117.673684,0 115.131579,0 L105.921053,0 C103.378947,0 101.315789,2.06315789 101.315789,4.60526316 L101.315789,115.131579 C101.315789,117.673684 103.378947,119.736842 105.921053,119.736842 L170.394737,119.736842 C172.936842,119.736842 175,117.673684 175,115.131579 L175,105.921053 C175,103.378947 172.936842,101.315789 170.394737,101.315789" id="Fill-1"></path> <path d="M78.2894737,0 L4.60526316,0 C2.06315789,0 0,2.06315789 0,4.60526316 L0,115.131579 C0,117.673684 2.06315789,119.736842 4.60526316,119.736842 L78.2894737,119.736842 C80.8315789,119.736842 82.8947368,117.673684 82.8947368,115.131579 L82.8947368,59.8684211 C82.8947368,57.3263158 80.8315789,55.2631579 78.2894737,55.2631579 L41.4473684,55.2631579 C38.9052632,55.2631579 36.8421053,57.3263158 36.8421053,59.8684211 L36.8421053,69.0789474 C36.8421053,71.6210526 38.9052632,73.6842105 41.4473684,73.6842105 L64.4736842,73.6842105 L64.4736842,101.315789 L18.4210526,101.315789 L18.4210526,18.4210526 L64.4736842,18.4210526 L64.4736842,32.2368421 C64.4736842,34.7789474 66.5368421,36.8421053 69.0789474,36.8421053 L78.2894737,36.8421053 C80.8315789,36.8421053 82.8947368,34.7789474 82.8947368,32.2368421 L82.8947368,4.60526316 C82.8947368,2.06315789 80.8315789,0 78.2894737,0" id="Fill-3"></path> </g> </g> </svg>'},769:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="171px" height="146px" viewBox="0 0 171 146" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>graph</title> <desc>Created with Sketch.</desc> <defs> <polygon id="path-1" points="0.06 0 171 0 171 146 0.06 146"></polygon> </defs> <g id="graph" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <mask id="mask-2" fill="white"> <use xlink:href="#path-1"></use> </mask> <g id="Clip-2"></g> <path d="M171,100 C171,106.075 166.075,111 160,111 C154.016,111 149.158,106.219 149.014,100.27 L114.105,83.503 C111.564,86.693 108.179,89.18 104.282,90.616 L108.698,124.651 C112.951,126.172 116,130.225 116,135 C116,141.075 111.075,146 105,146 C98.925,146 94,141.075 94,135 C94,131.233 95.896,127.912 98.781,125.93 L94.364,91.896 C82.94,90.82 74,81.206 74,69.5 C74,69.479 74.001,69.46 74.001,69.439 L53.719,64.759 C50.642,70.269 44.76,74 38,74 C36.07,74 34.215,73.689 32.472,73.127 L20.624,90.679 C21.499,92.256 22,94.068 22,96 C22,102.075 17.075,107 11,107 C4.925,107 0,102.075 0,96 C0,89.925 4.925,85 11,85 C11.452,85 11.895,85.035 12.332,85.089 L24.184,67.531 C21.574,64.407 20,60.389 20,56 C20,48.496 24.594,42.07 31.121,39.368 L29.111,21.279 C24.958,19.707 22,15.704 22,11 C22,4.925 26.925,0 33,0 C39.075,0 44,4.925 44,11 C44,14.838 42.031,18.214 39.051,20.182 L41.061,38.279 C49.223,39.681 55.49,46.564 55.95,55.011 L76.245,59.694 C79.889,52.181 87.589,47 96.5,47 C100.902,47 105.006,48.269 108.475,50.455 L131.538,27.391 C131.192,26.322 131,25.184 131,24 C131,17.925 135.925,13 142,13 C148.075,13 153,17.925 153,24 C153,30.075 148.075,35 142,35 C140.816,35 139.678,34.808 138.609,34.461 L115.546,57.525 C117.73,60.994 119,65.098 119,69.5 C119,71.216 118.802,72.884 118.438,74.49 L153.345,91.257 C155.193,89.847 157.495,89 160,89 C166.075,89 171,93.925 171,100" id="Fill-1" fill="#4F608A" mask="url(#mask-2)"></path> </g> </svg>'},781:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="165px" height="137px" viewBox="0 0 165 137" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>heatmap</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="heatmap" transform="translate(-0.500000, -0.474277)" fill-rule="nonzero"> <path d="M44.5999999,89.4742765 L5.40000005,89.4742765 C2.6938048,89.4742765 0.500000074,87.2916647 0.5,84.5992766 L0.5,55.3492765 C0.500000074,52.6568883 2.6938048,50.4742765 5.40000005,50.4742765 L44.5999999,50.4742765 C47.3061952,50.4742765 49.4999999,52.6568883 49.5,55.3492765 L49.5,84.5992766 C49.4999999,87.2916647 47.3061952,89.4742765 44.5999999,89.4742765" id="Path" fill="#687DB0"></path> <path d="M102.6,89.4742765 L63.3999999,89.4742765 C60.6938047,89.4742765 58.5000001,87.2916647 58.5,84.5992766 L58.5,55.3492765 C58.5000001,52.6568884 60.6938047,50.4742766 63.3999999,50.4742765 L102.6,50.4742765 C105.306195,50.4742765 107.5,52.6568883 107.5,55.3492765 L107.5,84.5992766 C107.5,87.2916647 105.306195,89.4742765 102.6,89.4742765" id="Path" fill="#8497C0"></path> <path d="M160.6,89.4742765 L121.4,89.4742765 C118.693805,89.4742765 116.5,87.2916647 116.5,84.5992766 L116.5,55.3492765 C116.5,52.6568884 118.693805,50.4742766 121.4,50.4742765 L160.6,50.4742765 C163.306195,50.4742766 165.5,52.6568884 165.5,55.3492765 L165.5,84.5992766 C165.5,87.2916647 163.306195,89.4742765 160.6,89.4742765" id="Path" fill="#A7B4D1"></path> <path d="M44.5999999,137.474277 L5.40000005,137.474277 C2.69380475,137.474277 0.5,135.291665 0.5,132.599276 L0.5,103.349277 C0.5,100.656888 2.69380475,98.4742765 5.40000005,98.4742765 L44.5999999,98.4742765 C45.8995608,98.4742765 47.1458949,98.9878911 48.0648232,99.902131 C48.9837515,100.816371 49.5,102.056346 49.5,103.349277 L49.5,132.599276 C49.5,135.291665 47.3061953,137.474277 44.5999999,137.474277" id="Path" fill="#8497C0"></path> <path d="M102.6,137.474277 L63.3999999,137.474277 C60.6938047,137.474276 58.5,135.291665 58.5,132.599276 L58.5,103.349277 C58.5,100.656888 60.6938047,98.4742766 63.3999999,98.4742765 L102.6,98.4742765 C105.306195,98.4742765 107.5,100.656888 107.5,103.349277 L107.5,132.599276 C107.5,135.291665 105.306195,137.474277 102.6,137.474277" id="Path" fill="#A7B4D1"></path> <path d="M160.6,137.474277 L121.4,137.474277 C118.693805,137.474276 116.5,135.291665 116.5,132.599276 L116.5,103.349277 C116.5,100.656888 118.693805,98.4742766 121.4,98.4742765 L160.6,98.4742765 C163.306195,98.4742766 165.5,100.656888 165.5,103.349277 L165.5,132.599276 C165.5,135.291665 163.306195,137.474276 160.6,137.474277" id="Path" fill="#CDD5E3"></path> <path d="M5.40000005,0.474276527 L44.5999999,0.474276527 C47.3061953,0.474276527 49.5,2.65688839 49.5,5.34927658 L49.5,34.5992765 C49.5,37.2916647 47.3061953,39.4742765 44.5999999,39.4742765 L5.40000005,39.4742765 C2.69380475,39.4742765 0.5,37.2916647 0.5,34.5992765 L0.5,5.34927658 C0.5,2.65688839 2.69380475,0.474276527 5.40000005,0.474276527" id="Path" fill="#5067A2"></path> <path d="M102.6,39.4742765 L63.3999999,39.4742765 C60.6938047,39.4742765 58.5,37.2916646 58.5,34.5992765 L58.5,5.34927658 C58.5,2.65688845 60.6938047,0.474276601 63.3999999,0.474276527 L102.6,0.474276527 C105.306195,0.474276527 107.5,2.65688839 107.5,5.34927658 L107.5,34.5992765 C107.5,37.2916647 105.306195,39.4742765 102.6,39.4742765" id="Path" fill="#687DB0"></path> <path d="M160.6,39.4742765 L121.4,39.4742765 C118.693805,39.4742765 116.5,37.2916646 116.5,34.5992765 L116.5,5.34927658 C116.5,2.65688845 118.693805,0.474276601 121.4,0.474276527 L160.6,0.474276527 C163.306195,0.474276601 165.5,2.65688845 165.5,5.34927658 L165.5,34.5992765 C165.5,37.2916646 163.306195,39.4742765 160.6,39.4742765" id="Path" fill="#8497C0"></path> </g> </g> </svg>'},69:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="138px" viewBox="0 0 175 138" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>line</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="line" fill="#5067A2" fill-rule="nonzero"> <path d="M25.2739189,111.655778 C26.7855309,111.657407 28.2007506,110.913642 29.0567232,109.667735 L69.3606163,51.4346379 L108.642876,94.5825372 C109.596174,95.6275458 110.977093,96.1760957 112.387618,96.0700817 C113.798143,95.9640677 115.081554,95.2152689 115.86794,94.0395069 L167.15209,17.582681 C168.126301,16.2187314 168.281888,14.4329668 167.558237,12.9210891 C166.834585,11.4092114 165.346152,10.4103472 163.672804,10.3136363 C161.999456,10.2169253 160.40586,11.0376639 159.512851,12.4561069 L111.496086,84.0348638 L72.2782537,40.9605957 C71.3313898,39.926718 69.968454,39.3754562 68.5690807,39.4603596 C67.1694417,39.5586882 65.8899144,40.2864616 65.0900052,41.4391988 L21.4911146,104.439918 C20.5200574,105.846972 20.4090348,107.676368 21.202809,109.190526 C21.9965833,110.704685 23.5643138,111.65402 25.2739189,111.655778" id="Path"></path> <path d="M170.272214,127.854648 L9.20390349,127.854648 L9.20390349,5.00465881 C9.20390349,2.46307104 7.14353951,0.402707066 4.60195174,0.402707066 C2.06036398,0.402707066 3.11254732e-16,2.46307104 0,5.00465881 L0,132.4566 C3.11254728e-16,134.998188 2.06036395,137.058552 4.60195168,137.058552 L170.272214,137.058552 C172.813801,137.058552 174.874165,134.998188 174.874165,132.4566 C174.874165,129.915012 172.813801,129.257355 170.272214,129.257355" id="Path"></path> </g> </g> </svg>'},276:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="163px" height="137px" viewBox="0 0 163 137" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>lines</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="lines" fill="#5067A2" fill-rule="nonzero"> <path d="M118.024118,118.8 C120.522388,118.8 122.566427,120.8475 122.566427,123.35 C122.566427,125.8525 120.522388,127.9 118.024118,127.9 C115.517543,127.894993 113.486807,125.860819 113.481809,123.35 C113.481809,120.8475 115.525848,118.8 118.024118,118.8 Z M142.434485,46 L64.9673569,46 C62.4587091,46 60.4250482,48.0371044 60.4250482,50.55 C60.4250482,53.0628956 62.4587091,55.1 64.9673569,55.1 L142.034762,55.0909 C149.519307,56.1087027 154.7743,62.9956941 153.790257,70.4972 C152.963556,76.6852 148.066948,81.5264 142.434485,82.2544 L20.6642736,82.2726 C14.6272756,82.8301001 9.06337697,85.7822231 5.21133949,90.4717 C0.0521031846,96.7506172 -1.39663076,105.298969 1.40493936,112.931618 C4.20650947,120.564268 10.8382585,126.136619 18.8291809,127.5724 L105.232977,127.8909 C107.143393,133.33221 112.265894,136.980155 118.024118,137 C125.537097,137 131.651044,130.8757 131.651044,123.35 C131.651044,115.8243 125.537097,109.7 118.024118,109.7 C112.110032,109.7 107.113492,113.5129 105.232977,118.8 L21.8634431,118.8728 L20.4099043,118.618 C14.3307333,117.521702 9.72082575,112.509885 9.12680957,106.3512 C8.77445503,102.712306 9.88625731,99.0830035 12.2155795,96.2684 C14.5594108,93.4383 17.8571269,91.6911 21.0912506,91.3544 L142.988646,91.3271 C153.280464,90.058092 161.421536,81.9929721 162.802197,71.6984 C164.446513,59.2314 155.679857,47.729 142.434485,46 Z" id="Shape"></path> <path d="M31.9999101,18.2496933 C36.9704563,18.2496933 40.9998801,22.3350263 40.9998801,27.37454 C40.9998801,32.4140537 36.9704563,36.4993867 31.9999101,36.4993867 C27.0293639,36.4993867 22.9999401,32.4140537 22.9999401,27.37454 C22.9999401,22.3350263 27.0293639,18.2496933 31.9999101,18.2496933 Z M16.8799604,56.2181803 C19.4539519,59.9411177 22.1809428,63.6184309 24.9259336,66.9946242 C25.9069304,68.2173537 26.7979274,69.3032104 27.5539249,70.2156951 C28.1029231,70.7814356 28.435922,71.1920537 28.5979214,71.3654258 C30.4699152,73.555389 33.5839048,73.555389 35.4378986,71.3015518 C35.617898,71.1373046 35.932897,70.7266865 36.4188954,70.1518212 C37.2648925,69.2393365 38.1288897,68.1443549 39.0558866,66.9307503 C41.8008774,63.554557 44.5368683,59.8863687 47.1108598,56.1451815 C49.6758512,52.4131192 51.9258437,48.7449309 53.7348377,45.2957388 C57.1368264,38.917471 58.9998202,33.4243133 58.9998202,28.8710148 C59.05382,12.911658 46.9398603,0 31.9909101,0 C17.0509599,0 5,12.911658 5,28.8710148 C5,33.4243133 6.8629938,38.9722201 10.2559825,45.3596128 C12.1279763,48.8088048 14.3689688,52.4678683 16.8799604,56.2181803 Z" id="Shape"></path> </g> </g> </svg>'},831:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="142px" viewBox="0 0 175 142" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>geo</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="geo" fill="#5067A2" fill-rule="nonzero"> <path d="M9.20332621,34.019885 L55.2181167,56.861627 L55.2181167,128.571076 L9.20332621,103.207724 L9.20332621,34.019885 Z M171.819596,50.2815119 L151.996424,43.1124076 C149.63126,42.3318353 147.074346,43.5747977 146.227189,45.9169373 C145.380032,48.2590769 146.550177,50.8501245 148.867418,51.7631882 L165.653614,57.8371405 L165.653614,131.138702 L119.638823,119.625801 L119.638823,87.4706656 C119.638823,84.9293389 117.578671,82.8691865 115.037344,82.8691865 C112.496018,82.8691865 110.435865,84.9293389 110.435865,87.4706656 L110.435865,119.644207 L64.4210748,131.41479 L64.4210748,58.2236647 L81.060023,51.7263763 C83.2914479,50.7138845 84.3410975,48.1328302 83.4496557,45.8503474 C82.5582139,43.5678645 80.037126,42.3813901 77.7101463,43.1492194 L61.2460542,49.5820871 L6.64490386,22.4793755 C5.21943693,21.7614379 3.52312776,21.8367966 2.16693957,22.6783095 C0.810751382,23.5198224 -0.00997312356,25.0062796 0.000368118324,26.6023007 L0.000368118324,105.913394 C0.000368118324,107.597535 0.91146097,109.134429 2.38393426,109.944289 L58.8072703,141.059491 C59.8287987,141.620871 61.0435892,141.795727 62.16635,141.49203 L115.046547,127.963681 L169.141535,141.501233 C170.516378,141.840666 171.970958,141.532118 173.089604,140.663763 C174.206625,139.788526 174.858383,138.44767 174.856572,137.028595 L174.856572,54.6069022 C174.855748,52.6695411 173.64154,50.9402146 171.819596,50.2815119 Z M115.037344,16.5986853 C121.13907,16.6012266 126.083435,21.5497125 126.080894,27.651438 C126.078353,33.7531634 121.129867,38.697529 115.028141,38.6949877 C108.926416,38.6924463 103.98205,33.7439604 103.984592,27.642235 C103.987133,21.5405096 108.935619,16.596144 115.037344,16.5986853 L115.037344,16.5986853 Z M99.5763747,54.7173377 C102.208421,58.3341002 105.00612,61.9140509 107.813022,65.199507 C108.806942,66.3866886 109.718035,67.4358258 110.491083,68.3285127 C111.04326,68.8806902 111.402176,69.2856204 111.558626,69.4512736 C112.438859,70.4713636 113.723372,71.0524431 115.07068,71.0400337 C116.417988,71.0276243 117.69158,70.4229833 118.552874,69.3868529 C118.72773,69.2211997 119.06824,68.8254725 119.555997,68.264092 C120.506081,67.2663872 121.406012,66.2220982 122.252463,65.1350863 C125.059366,61.8496302 127.866268,58.2788825 130.498314,54.6437141 C133.121157,51.0177486 135.412694,47.4470008 137.262488,44.0879211 C140.741206,37.8851274 142.646219,32.5382087 142.646219,28.1207888 C142.701436,12.5861956 130.314255,0.0425636812 115.028141,0.0425636812 C99.7604339,0.0425636812 87.42847,12.5861956 87.42847,28.1207888 C87.42847,32.5382087 89.3334823,37.9403451 92.8029975,44.1523418 C94.7172128,47.5114215 97.0087494,51.0729663 99.5763747,54.7173377 Z" id="Shape"></path> </g> </g> </svg>'},582:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="148px" viewBox="0 0 175 148" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>parallel</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="parallel" fill="#5067A2" fill-rule="nonzero"> <path d="M119.966527,90.2642567 L119.966527,71.4595035 L164.953975,91.1040224 L164.953975,117.16675 L119.966527,90.2642567 Z M99.5422259,68.8202399 L109.969317,68.8202399 L109.969317,80.2370544 L99.5422259,68.8202399 Z M64.9818688,58.8230293 L64.9818688,45.8666444 L76.8485579,58.8230293 L64.9818688,58.8230293 L64.9818688,58.8230293 Z M9.99721065,95.6627504 L9.99721065,37.9888424 L54.9846583,37.9888424 L54.9846583,61.3523236 L9.99721065,95.6627504 Z M170,2.04051565e-11 C167.238576,2.04245402e-11 165,2.23857623 165,4.99999995 L165,80.2194419 L120,60.5694419 L120,5.00139509 C120,2.23997133 117.761424,0.00139506489 115,0.00139506489 C112.238576,0.00139506489 110,2.23997133 110,5.00139509 L110,58.8394419 L90.42,58.8394419 L64.9999999,31.059442 L64.9999999,5.00139509 C64.9999999,2.23997137 62.7614237,0.00139513813 60,0.00139513813 C57.2385763,0.00139513813 55,2.23997137 55,5.00139509 L55,27.999442 L10,27.999442 L10,4.99999995 C10,2.23857619 7.76142378,-7.3221713e-08 5.00000002,-7.32217131e-08 C2.23857626,-7.32217133e-08 3.38176877e-16,2.23857619 0,4.99999995 L0,142.999442 C3.38176877e-16,145.760866 2.23857626,147.999442 5.00000002,147.999442 C7.76142378,147.999442 10,145.760866 10,142.999442 L10,108.249442 L55,73.9494419 L55,142.999442 C55,145.760866 57.2385763,147.999442 60,147.999442 C62.7614237,147.999442 64.9999999,145.760866 64.9999999,142.999442 L64.9999999,68.839442 L86.01,68.839442 L110,95.0694419 L110,142.999442 C110,145.760866 112.238576,147.999442 115,147.999442 C117.761424,147.999442 120,145.760866 120,142.999442 L120,101.939442 L165,128.839442 L165,142.999442 C165,145.760866 167.238576,147.999442 170,147.999442 C172.761424,147.999442 175,145.760866 175,142.999442 L175,4.99999995 C175,3.67391749 174.473216,2.40214791 173.535534,1.46446603 C172.597852,0.526784141 171.326082,-3.88296707e-08 170,2.04051565e-11 Z" id="Shape"></path> </g> </g> </svg>'},689:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="141px" viewBox="0 0 175 141" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>pictorialBar</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="pictorialBar" fill="#5067A2" fill-rule="nonzero"> <path d="M165.182447,113.123194 C161.75364,113.169204 158.605604,115.027549 156.908673,118.007359 L62.4782339,118.007359 C59.7807842,118.007359 57.5940692,120.194074 57.5940692,122.891524 C57.5940692,125.588973 59.7807842,127.775688 62.4782339,127.775688 L156.908673,127.775688 C158.605604,130.755498 161.75364,132.613843 165.182447,132.659853 C170.576885,132.6592 174.949595,128.285961 174.949595,122.891524 C174.949595,117.497086 170.576885,113.123847 165.182447,113.123194 L165.182447,113.123194 Z M165.182447,78.9340419 C161.75364,78.980052 158.605603,80.8383969 156.908673,83.8182066 L77.2674843,83.8182066 C74.5700347,83.8182066 72.3833197,86.0049216 72.3833197,88.7023712 C72.3833197,91.3998208 74.5700347,93.5865358 77.2674843,93.5865358 L156.908673,93.5865358 C158.605603,96.5663455 161.75364,98.4246904 165.182447,98.4707005 C170.577347,98.4707005 174.950777,94.0972705 174.950777,88.7023712 C174.950777,83.3074719 170.577347,78.9340419 165.182447,78.9340419 L165.182447,78.9340419 Z M165.182447,44.7448896 C170.407595,44.9786234 174.523583,49.2828462 174.523583,54.5132188 C174.523583,59.7435915 170.407595,64.0478142 165.182447,64.2815481 C161.75364,64.235538 158.605604,62.3771932 156.908673,59.3973835 L77.2674843,59.3973835 C74.5700346,59.3973835 72.3833196,57.2106685 72.3833196,54.5132188 C72.3833196,51.8157692 74.5700346,49.6290542 77.2674843,49.6290542 L156.908673,49.6290542 C158.605604,46.6492445 161.75364,44.7908997 165.182447,44.7448896 Z M62.6149904,20.3240665 C62.6149904,19.0287054 63.1295706,17.7863991 64.0455291,16.8704405 C64.9614877,15.954482 66.2037941,15.4399018 67.4991551,15.4399019 L156.908673,15.4399019 C158.605604,12.4600922 161.75364,10.6017474 165.182447,10.5557373 C170.407595,10.7894711 174.523583,15.0936938 174.523583,20.3240665 C174.523583,25.5544392 170.407595,29.8586619 165.182447,30.0923957 C161.75364,30.0463857 158.605604,28.1880408 156.908673,25.2082312 L67.4991551,25.2082312 C66.2037941,25.2082312 64.9614877,24.6936511 64.0455291,23.7776925 C63.1295705,22.8617339 62.6149904,21.6194275 62.6149904,20.3240665 Z M23.5416735,29.3240665 C31.6340224,29.3240665 38.1941674,22.7639215 38.1941674,14.6715726 C38.1941674,6.57922368 31.6340224,0.0190787204 23.5416735,0.0190787204 C15.4493246,0.0190787204 8.88917966,6.57922368 8.88917966,14.6715726 C8.88917966,22.7639215 15.4493246,29.3240665 23.5416735,29.3240665 Z M34.0523957,34.2082312 L13.0211829,34.2082312 C10.6337153,34.2093302 8.59694107,35.9362503 8.20539657,38.2913927 L0.0683783524,87.133039 C-0.166957522,88.5485838 0.232108973,89.996 1.15960938,91.0909397 C2.08710979,92.1858793 3.44919091,92.8175461 4.88416457,92.8182066 L8.88917966,92.8182066 L9.0426883,136.115835 C9.0426883,138.813285 11.2294033,141 13.9268529,141 L33.4635113,141 C34.7588723,141 36.0011787,140.48542 36.9171373,139.569461 C37.8330959,138.653503 38.347676,137.411196 38.347676,136.115835 L38.1941674,92.8182066 L42.189414,92.8182066 C43.6255482,92.8209447 44.9898051,92.1902296 45.9180572,91.0944026 C46.8463094,89.9985755 47.2440794,88.5491696 47.0052003,87.133039 L38.8681821,38.2913927 C38.4766376,35.9362503 36.4398634,34.2093302 34.0523957,34.2082312 Z" id="Shape"></path> </g> </g> </svg>'},931:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="144px" height="152px" viewBox="0 0 144 152" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>pie (2)</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="pie-(2)" transform="translate(0.000000, -0.612903)" fill="#5067A2" fill-rule="nonzero"> <path d="M72.1778824,12.9606446 L72.1778824,73.6462877 C72.1779317,75.129331 72.9386663,76.5065116 74.1881954,77.2856176 C75.4377246,78.0647237 76.9977039,78.1345538 78.3105882,77.4701504 L128.354824,52.1402676 L132.666353,49.9503148 C134.757503,48.8920984 137.302156,49.7461658 138.350118,51.857969 L138.468706,52.1060495 L138.782118,52.8930638 C140.942118,58.6416896 144,65.8873535 144,83.8518095 C144,116.316148 115.123765,152.612903 73.2282353,152.612903 C31.3242354,152.612903 0,119.994584 0,80.8406245 C0,44.5353146 27.216,13.7391044 62.2588236,9.22232682 C64.122353,8.98280072 65.9265883,8.80315611 67.6715294,8.69194766 C68.8395088,8.61630135 69.986418,9.03213213 70.8400527,9.84074781 C71.6936873,10.6493635 72.1779411,11.7786714 72.1778824,12.9606446 Z M90.0254118,0.659269609 C88.9814749,0.488081123 87.9163292,0.795987208 87.1201941,1.49909291 C86.324059,2.20219861 85.8798887,3.22724309 85.9087059,4.29493319 L85.9087059,54.6039644 C85.9087059,56.9393437 87.6028236,57.8717845 89.5680001,56.7511446 L133.149176,31.9088684 C134.092985,31.4117209 134.762111,30.50855 134.968019,29.4538349 C135.173928,28.3991197 134.894328,27.3070442 134.208,26.4853136 C134.208,26.4853136 133.538824,25.5357637 132.446118,24.3381334 C127.296,18.6921614 122.832,14.7399812 116.860235,10.9417819 C109.345997,6.07770841 100.978781,2.71218494 92.2108235,1.0271132 C89.9745882,0.599388123 90.0254118,0.659269609 90.0254118,0.659269609 L90.0254118,0.659269609 Z" id="Shape"></path> </g> </g> </svg>'},702:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="151px" height="170px" viewBox="0 0 151 170" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>radar</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="radar" transform="translate(0.500000, 0.000000)" fill="#5067A2" fill-rule="nonzero"> <path d="M79.573911,32.0195055 C79.7511468,32.0807796 79.9252225,32.1507623 80.0954971,32.2291958 L126.376239,53.5077701 C128.225278,54.3572545 129.374745,56.2354539 129.285085,58.2607506 L126.927916,110.733256 C126.832633,112.851954 125.405699,114.680595 123.367088,115.296516 L76.444394,129.315811 C75.5054275,129.595861 74.5046062,129.595861 73.5656397,129.315811 L32.4706683,117.053921 C30.8367372,116.566659 29.5635821,115.286115 29.0909814,113.654618 C28.6183807,112.023122 29.0111288,110.264354 30.133561,108.985836 L59.2822032,75.635091 C59.7218624,75.142978 60.0532763,74.5647698 60.2551619,73.937598 L73.2246026,35.1848307 C74.1062345,32.570839 76.9431645,31.1565423 79.573911,32.0195055 L79.573911,32.0195055 Z M139.476076,121.926724 L75.0000016,158.991984 L10.5239274,121.926724 L10.5239274,47.816176 L75.0000016,10.7509165 L139.476076,47.816176 L139.476076,121.926724 Z M146.998953,40.6068232 L77.5076273,0.665810956 C75.9548023,-0.221936985 74.0452007,-0.221936985 72.4923757,0.665810956 L3.00105014,40.6068232 C1.44784731,41.4971353 0.491395456,43.1462367 0.493424274,44.9304378 L0.493424274,124.812462 C0.493424274,126.599823 1.44632208,128.247389 3.00105014,129.136077 L72.4923757,169.077089 C74.047355,169.95676 75.9526481,169.95676 77.5076273,169.077089 L146.998953,129.136077 C148.550638,128.244253 149.506533,126.596111 149.506579,124.812462 L149.506579,44.9304378 C149.506533,43.1467894 148.550638,41.4986473 146.998953,40.6068232 L146.998953,40.6068232 Z" id="Shape"></path> </g> </g> </svg>'},989:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="167px" height="162px" viewBox="0 0 167 162" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>rich</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="rich" fill="#5067A2" fill-rule="nonzero"> <path d="M5.52634288,101.24857 L96.0005147,101.24857 C98.7764873,101.24857 101.026858,98.9820436 101.026858,96.1861415 C101.026858,93.3902395 98.7764873,91.123713 96.0005147,91.123713 L5.52634288,91.123713 C2.75037036,91.123713 0.5,93.3902395 0.5,96.1861415 C0.5,98.9820436 2.75037036,101.24857 5.52634288,101.24857 Z M75.8951432,121.498284 L5.52634288,121.498284 C2.75037036,121.498284 0.5,123.76481 0.5,126.560713 C0.5,129.356615 2.75037036,131.623141 5.52634288,131.623141 L75.8951432,131.623141 C78.6711157,131.623141 80.9214861,129.356615 80.9214861,126.560713 C80.9214861,123.76481 78.6711157,121.498284 75.8951432,121.498284 Z M146.394628,92.0653247 L128.923061,116.435856 L146.394628,116.435856 L146.394628,92.0653247 Z M166.5,60.749142 L166.5,151.872855 C166.5,157.464659 161.999259,161.997712 156.447314,161.997712 C150.895369,161.997712 146.394628,157.464659 146.394628,151.872855 L146.394628,136.68557 L114.406982,136.68557 L99.2575849,157.806021 C96.0041451,162.338178 89.7188607,163.355849 85.2190093,160.079052 C80.7191578,156.802254 79.7087415,150.471846 82.9621813,145.939689 L148.304639,54.8261007 C148.455429,54.6033538 148.706746,54.4919804 148.867589,54.2894832 C149.318111,53.7697312 149.823755,53.3011987 150.375492,52.892253 C150.857637,52.4854402 151.379728,52.1292264 151.933658,51.829143 C152.481136,51.5631055 153.053631,51.3528145 153.642615,51.2014019 C154.31205,50.9842108 155.003114,50.8416105 155.703415,50.7761579 C155.954733,50.7559082 156.185944,50.624285 156.447314,50.624285 C156.819264,50.624285 157.130897,50.7964076 157.492794,50.836907 C158.850886,50.9717079 160.164137,51.3999382 161.342972,52.0923893 C161.674711,52.2746367 162.036608,52.3151361 162.338188,52.537883 C162.559347,52.7100056 162.659874,52.9428773 162.87098,53.1251247 C163.403773,53.5807433 163.836038,54.0869861 164.268304,54.6337284 C164.650306,55.1399712 165.022255,55.6259644 165.30373,56.1929564 C165.585206,56.7498235 165.766154,57.3370652 165.947102,57.9546815 C166.138103,58.6330469 166.298946,59.2709129 166.34921,59.969528 C166.369315,60.2428992 166.5,60.4757709 166.5,60.749142 L166.5,60.749142 Z M55.7897717,151.872855 L5.52634288,151.872855 C2.75037036,151.872855 0.5,154.139381 0.5,156.935284 C0.5,159.731186 2.75037036,161.997712 5.52634288,161.997712 L55.7897717,161.997712 C58.5657442,161.997712 60.8161146,159.731186 60.8161146,156.935284 C60.8161146,154.139381 58.5657442,151.872855 55.7897717,151.872855 Z M86.3887335,40.499428 L161.100608,40.499428 C164.04791,40.499428 166.437171,38.2329016 166.437171,35.4369995 C166.437171,32.6410974 164.04791,30.374571 161.100608,30.374571 L86.3887335,30.374571 C83.4414314,30.374571 81.052171,32.6410974 81.052171,35.4369995 C81.052171,38.2329016 83.4414314,40.499428 86.3887335,40.499428 Z M86.3887335,10.124857 L161.100608,10.124857 C164.04791,10.124857 166.437171,7.85833056 166.437171,5.0624285 C166.437171,2.26652644 164.04791,1.71199625e-16 161.100608,0 L86.3887335,0 C83.4414314,-1.71199625e-16 81.052171,2.26652644 81.052171,5.0624285 C81.052171,7.85833056 83.4414314,10.124857 86.3887335,10.124857 Z M5.6570278,70.873999 L60.9467995,70.873999 C63.722772,70.873999 65.9731424,68.6074726 65.9731424,65.8115705 L65.9731424,5.0624285 C65.9731424,2.26652644 63.722772,1.71199625e-16 60.9467995,0 L5.6570278,0 C2.88105528,-1.71199625e-16 0.630684915,2.26652644 0.630684915,5.0624285 L0.630684915,65.8115705 C0.630684915,68.6074726 2.88105528,70.873999 5.6570278,70.873999 Z M81.052171,65.8115705 C81.052171,63.0156685 83.3025414,60.749142 86.0785139,60.749142 L116.236571,60.749142 C119.012544,60.749142 121.262914,63.0156685 121.262914,65.8115705 C121.262914,68.6074726 119.012544,70.873999 116.236571,70.873999 L86.0785139,70.873999 C83.3025414,70.873999 81.052171,68.6074726 81.052171,65.8115705 Z" id="Shape"></path> </g> </g> </svg>'},827:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="139px" viewBox="0 0 175 139" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>sankey</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="sankey" fill-rule="nonzero"> <path d="M4.60195168,138.058552 C2.06036395,138.058552 3.11254728e-16,135.998188 0,133.4566 L0,115.048793 C-3.11254732e-16,112.507205 2.06036398,110.446841 4.60195174,110.446841 C7.14353951,110.446841 9.20390349,112.507205 9.20390349,115.048793 L9.20390349,133.4566 C9.20390349,134.677113 8.71905638,135.847638 7.856023,136.710671 C6.99298962,137.573705 5.82246517,138.058552 4.60195168,138.058552 M4.60195168,106.820503 C2.06036395,106.820503 3.11254728e-16,104.760139 0,102.218552 L0,4.60195168 C-3.11254732e-16,2.06036391 2.06036398,-6.74114049e-08 4.60195174,-6.74114054e-08 C7.14353951,-6.74114058e-08 9.20390349,2.06036391 9.20390349,4.60195168 L9.20390349,102.218552 C9.20390349,103.439065 8.71905638,104.60959 7.856023,105.472623 C6.99298962,106.335656 5.82246517,106.820503 4.60195168,106.820503" id="Shape" fill="#5067A2"></path> <path d="M4.60195168,106.820503 C2.06036395,106.820503 3.11254728e-16,104.760139 0,102.218552 L0,4.60195168 C-3.11254732e-16,2.06036391 2.06036398,-6.74114049e-08 4.60195174,-6.74114054e-08 C7.14353951,-6.74114058e-08 9.20390349,2.06036391 9.20390349,4.60195168 L9.20390349,102.218552 C9.20390349,103.439065 8.71905638,104.60959 7.856023,105.472623 C6.99298962,106.335656 5.82246517,106.820503 4.60195168,106.820503" id="Path" fill="#5067A2"></path> <path d="M87.4370826,64.4273241 C86.2165692,64.4273241 85.0460447,63.942477 84.1830114,63.0794436 C83.319978,62.2164103 82.8351309,61.0458858 82.835131,59.8253723 L82.835131,4.60195168 C82.835131,2.06036391 84.8954949,-6.74113054e-08 87.4370827,-6.74113059e-08 C89.9786705,-6.74113063e-08 92.0390345,2.06036391 92.0390345,4.60195168 L92.0390345,59.8253723 C92.0390345,61.0458858 91.5541874,62.2164103 90.691154,63.0794437 C89.8281206,63.9424771 88.6575962,64.4273242 87.4370826,64.4273241 M170.272214,38.2054031 C167.730626,38.2054031 165.670262,36.1450392 165.670262,33.6034515 L165.670262,4.60195168 C165.670262,2.06036391 167.730626,-6.74114049e-08 170.272214,-6.74114054e-08 C172.813801,-6.74114058e-08 174.874165,2.06036391 174.874165,4.60195168 L174.874165,33.6034515 C174.874165,34.823965 174.389318,35.9944894 173.526285,36.8575227 C172.663252,37.7205561 171.492727,38.2054032 170.272214,38.2054031 M105.84489,138.058552 C104.624376,138.058552 103.453852,137.573705 102.590818,136.710671 C101.727785,135.847638 101.242938,134.677113 101.242938,133.4566 L101.242938,78.2331793 C101.242938,75.6915915 103.303302,73.6312276 105.84489,73.6312276 C108.386477,73.6312276 110.446841,75.6915915 110.446841,78.2331793 L110.446841,133.4566 C110.446841,135.998188 108.386477,138.058552 105.84489,138.058552 M170.272214,138.058552 C167.730626,138.058552 165.670262,135.998188 165.670262,133.4566 L165.670262,48.3020853 C165.670262,45.7604975 167.730626,43.7001336 170.272214,43.7001336 C172.813801,43.7001336 174.874165,45.7604975 174.874165,48.3020853 L174.874165,133.4566 C174.874165,134.677113 174.389318,135.847638 173.526285,136.710671 C172.663252,137.573705 171.492727,138.058552 170.272214,138.058552" id="Shape" fill="#5067A2"></path> <polygon id="Path" fill="#95A5C8" points="110.446841 133.4566 165.670262 133.4566 165.670262 78.2331793 110.446841 78.2331793"></polygon> <polygon id="Path" fill="#5067A2" points="165.670262 133.4566 174.874165 133.4566 174.874165 78.2331793 165.670262 78.2331793"></polygon> <path d="M165.670262,77.9478582 C124.491998,75.6100668 130.198418,59.8345763 92.0390345,59.8253723 L92.0390345,32.213662 C124.832542,32.2228659 136.825229,48.0167643 165.670262,48.6242219 L165.670262,77.9478582" id="Path" fill="#95A5C8"></path> <path d="M92.0390345,59.8253723 L92.0022188,59.8253723 L92.0022188,32.213662 L92.0390345,32.213662 L92.0390345,59.8253723 M174.874165,78.2331793 C171.56076,78.2055676 168.505064,78.1135285 165.670262,77.9478582 L165.670262,48.6242219 L167.400596,48.6426296 C169.765999,48.6426296 172.260257,48.5413867 174.874165,48.3204931 L174.874165,78.2331793" id="Shape" fill="#5067A2"></path> <polygon id="Path" fill="#95A5C8" points="92.0390345 32.213662 165.670262 32.213662 165.670262 4.60195168 92.0390345 4.60195168"></polygon> <path d="M82.835131,32.213662 L92.0390345,32.213662 L92.0390345,4.60195168 L82.835131,4.60195168 L82.835131,32.213662 Z M165.670262,32.213662 L174.506009,32.213662 L174.506009,4.60195168 L165.670262,4.60195168 L165.670262,32.213662 Z" id="Shape" fill="#5067A2"></path> <polygon id="Path" fill="#95A5C8" points="9.20390349 59.8253723 82.835131 59.8253723 82.835131 4.60195168 9.20390349 4.60195168"></polygon> <polyline id="Path" fill="#5067A2" points="82.835131 59.8253723 82.835131 4.60195168 82.835131 59.8253723"></polyline> <polygon id="Path" fill="#95A5C8" points="9.20390349 133.4566 101.242938 133.4566 101.242938 115.048793 9.20390349 115.048793"></polygon> <polygon id="Path" fill="#5067A2" points="101.242938 133.4566 110.446841 133.4566 110.446841 115.048793 101.242938 115.048793"></polygon> <path d="M101.242938,115.048793 C43.4792398,114.699045 52.1585208,101.445424 9.20390349,101.445424 L9.20390349,59.8253723 C56.5579867,59.8253723 47.7682589,78.1319363 101.242938,78.2331793 L101.242938,115.048793" id="Path" fill="#95A5C8"></path> <path d="M101.675521,115.048793 L101.242938,115.048793 L101.242938,78.2331793 L101.675521,78.2331793 C104.335449,78.2331793 100.46981,113.723431 101.675521,115.048793" id="Path" fill="#5067A2"></path> </g> </g> </svg>'},687:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="138px" viewBox="0 0 175 138" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>scatter</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="scatter" fill="#5067A2" fill-rule="nonzero"> <path d="M173.526285,129.202529 C172.663252,128.339495 171.492727,127.854648 170.272214,127.854648 L9.20390349,127.854648 L9.20390349,4.60195168 C9.20390349,2.06036391 7.14353951,-6.74112924e-08 4.60195174,-6.74112925e-08 C2.06036398,-6.74112927e-08 3.11254732e-16,2.06036391 0,4.60195168 L0,132.4566 C3.11254728e-16,134.998188 2.06036395,137.058552 4.60195168,137.058552 L170.272214,137.058552 C171.492727,137.058552 172.663252,136.573705 173.526285,135.710671 C174.389318,134.847638 174.874165,133.677113 174.874165,132.4566 C174.874165,131.236086 174.389318,130.065562 173.526285,129.202529 Z M151.864407,12.8058552 C155.15291,12.8054572 158.191783,14.5596242 159.836149,17.4074853 C161.480516,20.2553464 161.480516,23.7641708 159.836149,26.6120319 C158.191783,29.459893 155.15291,31.21406 151.864407,31.213662 C146.781666,31.2130468 142.661617,27.0924991 142.661617,22.0097586 C142.661617,16.9270181 146.781666,12.8064703 151.864407,12.8058552 Z M142.660503,58.8253723 C147.743679,58.8253723 151.864407,62.9461003 151.864407,68.0292758 C151.864407,73.1124513 147.743679,77.2331793 142.660503,77.2331793 C137.577328,77.2331793 133.4566,73.1124513 133.4566,68.0292758 C133.4566,62.9461003 137.577328,58.8253723 142.660503,58.8253723 Z M124.252696,40.4175655 C127.5412,40.4171675 130.580072,42.1713345 132.224439,45.0191956 C133.868806,47.8670567 133.868806,51.3758811 132.224439,54.2237422 C130.580072,57.0716033 127.5412,58.8257703 124.252696,58.8253723 C119.169956,58.8247572 115.049907,54.7042094 115.049907,49.6214689 C115.049907,44.5387284 119.169956,40.4181807 124.252696,40.4175655 L124.252696,40.4175655 Z M105.84489,22.0097586 C109.133393,22.0093606 112.172266,23.7635277 113.816632,26.6113888 C115.460999,29.4592498 115.460999,32.9680743 113.816632,35.8159354 C112.172266,38.6637965 109.133393,40.4179635 105.84489,40.4175655 C100.762149,40.4169503 96.6421001,36.2964026 96.6421001,31.2136621 C96.6421001,26.1309216 100.762149,22.0103738 105.84489,22.0097586 L105.84489,22.0097586 Z M105.84489,58.8253723 C110.928065,58.8253723 115.048793,62.9461003 115.048793,68.0292758 C115.048793,73.1124513 110.928065,77.2331793 105.84489,77.2331793 C100.761714,77.2331793 96.6409861,73.1124513 96.6409861,68.0292758 C96.6409861,62.9461003 100.761714,58.8253723 105.84489,58.8253723 L105.84489,58.8253723 Z M87.4370826,77.2331793 C90.8200008,77.0784213 94.0146452,78.7938663 95.7543045,81.6993216 C97.4939639,84.6047768 97.4975937,88.2308616 95.7637545,91.1397939 C94.0299154,94.0487262 90.8387117,95.7705634 87.4554905,95.6225784 C82.5370015,95.4074394 78.6587219,91.3598697 78.6537937,86.4366802 C78.6488656,81.5134907 82.5190342,77.4581647 87.4370826,77.2331793 L87.4370826,77.2331793 Z M59.8253723,68.0292758 C63.1138756,68.0288778 66.1527483,69.7830448 67.7971148,72.6309059 C69.4414814,75.478767 69.4414814,78.9875915 67.7971148,81.8354525 C66.1527483,84.6833136 63.1138756,86.4374807 59.8253723,86.4370826 C54.7426318,86.4364675 50.6225828,82.3159197 50.6225828,77.2331792 C50.6225828,72.1504387 54.7426318,68.029891 59.8253723,68.0292758 L59.8253723,68.0292758 Z M32.213662,95.6409861 C35.5021653,95.6405881 38.541038,97.3947552 40.1854045,100.242616 C41.8297711,103.090477 41.8297711,106.599302 40.1854045,109.447163 C38.541038,112.295024 35.5021653,114.049191 32.213662,114.048793 C27.1309215,114.048178 23.0108725,109.92763 23.0108725,104.84489 C23.0108725,99.762149 27.1309215,95.6416013 32.213662,95.6409861 L32.213662,95.6409861 Z" id="Shape"></path> </g> </g> </svg>'},31:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="176px" height="154px" viewBox="0 0 176 154" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>sunburst</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="sunburst" transform="translate(-0.500000, -0.495167)" fill="#5067A2" fill-rule="nonzero"> <path d="M119.233629,98.0044542 L110.718691,87.8510962 C116.698944,81.6134116 119.776927,73.1460671 119.198407,64.5239101 L132.221771,61.7588152 C132.389075,63.3350954 132.468325,64.9289877 132.468325,66.5404921 C132.486789,78.3855449 127.713147,89.7343283 119.233629,98.0044542 L119.233629,98.0044542 Z M63.3185781,30.3829135 C74.7931609,22.4121709 89.3686325,20.3583561 102.598787,24.8479794 C115.828942,29.3376027 126.144611,39.8381699 130.399028,53.1465133 L117.38447,55.9116082 C114.163414,47.1482037 107.14477,40.3166874 98.2978797,37.3338959 C89.4509892,34.3511045 79.7290566,35.5384174 71.8599325,40.5626897 L63.3185781,30.3829135 L63.3185781,30.3829135 Z M57.4981296,97.8547516 L67.6773104,89.3128978 C73.1543438,94.3147256 80.4453141,97.3616135 88.4495316,97.3616137 C93.8284022,97.3676833 99.1146581,95.9617789 103.779942,93.2844195 L112.365323,103.508226 C105.247152,108.132446 96.9377023,110.586264 88.4495316,110.570666 C76.8578752,110.587037 65.7306915,106.015602 57.4981296,97.8547516 L57.4981296,97.8547516 Z M51.880208,91.0741048 C47.0035405,83.8229191 44.4062144,75.2791485 44.4219328,66.5404921 C44.4219328,54.7315996 49.0624416,44.0146553 56.6263832,36.1068361 L65.194154,46.3130303 C60.3076881,51.9176198 57.6201378,59.1046557 57.6302124,66.5404921 C57.6302124,72.3876992 59.2592335,77.8562467 62.0858054,82.5146391 L51.880208,91.0741048 L51.880208,91.0741048 Z M40.5915316,112.05008 L50.7354904,103.534644 C60.658337,113.682313 74.2570793,119.394563 88.4495316,119.3767 C99.4212094,119.3767 109.618001,116.030407 118.062495,110.306485 L126.586238,120.468649 C115.441046,128.370969 102.111678,132.606084 88.4495316,132.585752 C70.3533434,132.605952 53.0459635,125.179425 40.5915316,112.05008 L40.5915316,112.05008 Z M0.5,62.1374747 C1.61718015,39.3368661 11.5653323,17.8665508 28.2373873,2.27405071 L36.7435195,12.4097967 C23.0478109,25.4703646 14.8209875,43.2437342 13.7258907,62.1374747 L0.5,62.1374747 Z M0.5,70.9435094 L13.7258907,70.9435094 C14.5580363,85.4042184 19.5854188,99.3091254 28.1933598,110.958131 L18.0582064,119.464761 C7.47186066,105.41813 1.35420505,88.5122858 0.5,70.9435094 L0.5,70.9435094 Z M22.5490216,62.1374747 C23.6176776,45.8469855 30.7006658,30.5346593 42.4230797,19.1728312 L50.9380174,29.3261893 C42.1806215,38.1364527 36.8165849,49.7571326 35.7925234,62.1374747 L22.5490216,62.1374747 L22.5490216,62.1374747 Z M22.5490216,70.9435094 L35.7925234,70.9435094 C36.5571371,80.2216635 39.7688087,89.1310032 45.0999577,96.7628032 L34.9559989,105.278239 C27.6604148,95.2350677 23.3587128,83.3306553 22.5490216,70.9435094 Z M160.064824,88.3354281 C162.208458,81.2692542 163.294499,73.9246962 163.287644,66.5404921 C163.287927,62.7888436 163.014228,59.0421838 162.468731,55.3304099 L175.40404,52.5829271 C177.539642,66.0542744 176.545357,79.8364744 172.498218,92.86173 L160.064824,88.3354281 Z M157.009309,96.5954887 L169.451508,101.130596 C164.453629,112.804913 156.992417,123.261434 147.578597,131.784403 L139.08127,121.666269 C146.731696,114.64362 152.837128,106.105711 157.009309,96.5954887 L157.009309,96.5954887 Z M139.336631,80.7886563 C141.234304,74.0037443 141.75525,66.9076826 140.868791,59.9183539 L153.830516,57.1620651 C155.148964,66.5886629 154.449628,76.187832 151.77883,85.3237642 L139.336631,80.7886563 Z M136.263504,89.0487169 L148.714509,93.5750188 C145.090489,101.633987 139.889912,108.885878 133.419321,114.903235 L124.913189,104.776295 C129.629614,100.274719 133.477161,94.943361 136.263504,89.0487169 L136.263504,89.0487169 Z M84.1260215,141.268503 L84.1260215,154.495167 C61.049526,153.386197 39.3397973,143.226766 23.7025446,126.218989 L33.8288923,117.71236 C46.9380429,131.745712 64.9535467,140.183088 84.1260215,141.268503 L84.1260215,141.268503 Z M104.94227,2.57345585 C127.679056,8.4576749 145.591926,25.956003 152.007773,48.5497632 L139.046048,51.306052 C133.813709,33.9700374 120.081572,20.5128194 102.64403,15.6328053 L104.933465,2.64390412 L104.94227,2.57345585 L104.94227,2.57345585 Z M96.2952498,0.953145396 L96.2600278,1.12046007 L93.9970091,13.9948829 C81.1068487,12.6102912 68.1594065,16.034712 57.6390179,23.6110727 L49.1240802,13.4665207 C60.4957814,5.02434618 74.2870046,0.475385223 88.4495316,0.495231624 C91.0999932,0.495231624 93.7152325,0.644934198 96.2952498,0.953145396 L96.2952498,0.953145396 Z" id="Shape"></path> <path d="M88.5,75.295167 C93.3601058,75.295167 97.3,71.3552728 97.3,66.495167 C97.3,61.6350611 93.3601058,57.6951669 88.5,57.6951669 C83.6398942,57.6951669 79.7,61.6350611 79.7,66.495167 C79.7,71.3552728 83.6398942,75.295167 88.5,75.295167 Z M88.5,88.495167 C76.3497355,88.495167 66.5,78.6454315 66.5,66.495167 C66.5,54.3449025 76.3497355,44.495167 88.5,44.495167 C100.650264,44.495167 110.5,54.3449025 110.5,66.495167 C110.5,78.6454315 100.650264,88.495167 88.5,88.495167 Z" id="Shape"></path> </g> </g> </svg>'},951:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="175px" height="130px" viewBox="0 0 175 130" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>themeriver</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="themeriver" fill="#5067A2" fill-rule="nonzero"> <path d="M4.9275627,42.5798026 C5.20117275,42.5813119 5.47437729,42.5585448 5.74396361,42.5117692 C10.5811329,41.6686599 15.2612908,40.0922201 19.6227791,37.836902 C26.4649962,34.328322 32.1798026,30.0130599 43.8718299,30.0130599 C55.5638572,30.0130599 63.7861807,41.3940774 79.5602127,41.4912681 C95.3342445,41.5787397 96.9864845,31.7333333 115.384662,31.7333333 C132.976158,31.7333333 137.621868,44.6208049 153.6,45.4566438 C160.490812,45.8162491 166.6041,44.9318147 171.930144,42.7936218 C173.778744,42.0602993 174.992296,40.2727177 174.991648,38.2839788 L174.991648,26.7960517 C174.987486,25.3270305 174.319017,23.9387356 173.173189,23.0194311 C172.027362,22.1001266 170.527173,21.7484925 169.092179,22.0628701 C165.933485,22.7529233 162.084738,22.8403949 157.5265,22.3155656 C145.533181,20.9160213 134.676993,5.82232335 119.476386,5.82232348 C102.788762,5.82232348 99.3093394,11.1678056 81.9899772,11.1678056 C64.6803341,11.1678056 59.6069856,0.126955258 43.8718299,0.126955258 C37.3211845,0.126955258 27.9422931,3.46059231 17.9025057,7.6009112 C12.9652241,9.65163256 8.49445708,10.8373576 4.50964317,11.1678056 C1.98627058,11.3754189 0.0451326562,13.4857192 0.0485952544,16.0176158 L0.0583143318,37.7202733 C0.0583143318,40.4027335 2.24510251,42.5798026 4.9275627,42.5798026 M170.132118,85.5283219 C169.634444,85.5282959 169.139638,85.6036638 168.664541,85.7518603 C162.658162,87.6665148 157.633409,88.7064541 153.551405,88.9008353 C139.342141,89.522855 131.343356,82.7583903 118.543356,82.7583903 C104.227183,82.7583903 97.8611998,94.1491269 80.444647,94.1491269 C61.0356872,94.1491269 52.3274108,84.1287775 42.4917236,84.1287775 C35.416249,84.1287775 28.7392558,88.7453303 19.9337889,92.9828398 C15.5893698,95.0627183 10.3507973,96.5594533 4.2083523,97.4438876 C1.81553905,97.7920745 0.0427391378,99.8465342 0.0485952544,102.264541 L0.0485952544,124.297646 C0.0496707163,125.687409 0.645723287,127.010209 1.68608385,127.931672 C2.72644442,128.853134 4.11154706,129.285071 5.491268,129.118299 C10.3313591,128.544875 15.142293,127.670159 19.9337889,126.513592 C29.8083523,124.132422 34.2305239,119.068793 42.4917236,118.388459 C54.5822323,117.397115 66.5658314,123.267426 82.4759302,121.323614 C98.386029,119.379803 106.3265,110.156416 120.273349,108.543052 C132.577676,107.12407 140.586181,111.293546 152.083827,110.030068 C159.995141,109.174791 166.81792,107.085194 172.552164,103.780714 C174.06095,102.911932 174.991067,101.303681 174.991648,99.5626424 L174.991648,90.3878512 C174.991648,87.7040073 172.815962,85.5283219 170.132118,85.5283219" id="Shape"></path> <path d="M170.132118,55.1659834 C169.755896,55.1642513 169.380769,55.206657 169.014427,55.2923311 C163.386911,56.5597226 157.597804,56.9530934 151.850569,56.4586181 C133.889749,55.0007593 128.388762,42.7839029 114.655733,42.7839029 C103.264996,42.7839029 93.9249811,52.940319 79.7157175,52.5807138 C59.2668185,52.0656038 52.6578588,41.0733486 42.0738042,41.0733486 C35.5231587,41.0733486 26.5330296,47.0991647 20.6724373,49.7524677 C15.5296251,52.0293301 10.0450596,53.4382394 4.44160976,53.9219438 C1.94888222,54.1623556 0.0470459996,56.2577415 0.0485952544,58.762035 L0.0485952544,80.8242976 C0.0491745866,82.2971429 0.717699925,83.69025 1.86632297,84.6121711 C3.01494602,85.5340923 4.51970635,85.8853329 5.95778278,85.5671982 C11.10094,84.3721963 16.0531556,82.4685044 20.6724373,79.9107062 C28.3018983,75.7703873 34.249962,72.7866364 41.8016705,72.7866364 C56.6037965,72.7866364 63.1252849,82.7778284 79.3755505,82.7778284 C94.6441914,82.7778284 103.070615,71.5231587 117.639484,71.5231587 C132.208352,71.5231587 139.964161,77.2185269 150.314958,77.5295368 C156.48656,77.7044798 163.707821,76.0813971 171.988459,72.6408505 C173.80584,71.8896408 174.991328,70.1171628 174.991648,68.1506454 L174.991648,60.0255125 C174.991648,57.3416686 172.815962,55.1659834 170.132118,55.1659834" id="Path"></path> </g> </g> </svg>'},929:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="174px" height="147px" viewBox="0 0 174 147" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>tree (1)</title> <desc>Created with Sketch.</desc> <defs> <polygon id="path-1" points="2 4.69629167 172 4.69629167 172 146.375 2 146.375"></polygon> </defs> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="tree-(1)"> <mask id="mask-2" fill="white"> <use xlink:href="#path-1"></use> </mask> <g id="path-1"></g> <path d="M174,127.4965 C173.994333,137.928125 165.534,146.380667 155.101667,146.375708 C144.670042,146.370042 136.216792,137.909 136.222458,127.476667 C136.222458,127.470292 136.222458,127.464625 136.222458,127.45825 C136.226708,118.755667 142.117917,111.435042 150.127042,109.248417 L150.127042,80.2563333 L91.4625,80.2563333 L91.4625,109.120208 C99.7407917,111.126208 105.890542,118.582125 105.889125,127.476667 C105.889125,127.483042 105.889125,127.490125 105.889125,127.4965 C105.883458,137.928125 97.4224167,146.380667 86.9907917,146.375708 C76.5584583,146.370042 68.1059167,137.909 68.1115833,127.476667 C68.1122917,118.764875 74.0049167,111.440708 82.0182917,109.254083 L82.0182917,80.2563333 L23.3530417,80.2563333 L23.3530417,109.120917 C31.630625,111.127625 37.7789583,118.582833 37.77825,127.476667 C37.77825,127.478792 37.77825,127.480917 37.77825,127.483042 C37.776125,137.915375 29.3179167,146.37075 18.8862917,146.368625 C8.45395833,146.367208 -0.00141666667,137.909 0,127.476667 C0.00141666667,118.764167 5.89545833,111.439292 13.9088333,109.254083 L13.9088333,80.2563333 C13.9088333,75.0500833 18.1425417,70.812125 23.3530417,70.812125 L82.0182917,70.812125 L82.0182917,37.8179167 C74.0006667,35.6305833 68.106625,28.298625 68.1115833,19.58825 C68.1122917,9.15025 76.5705,0.694875 87.0028333,0.696291667 C97.4344583,0.697708333 105.890542,9.15591667 105.889125,19.58825 C105.889125,19.594625 105.889125,19.601 105.889125,19.607375 C105.884167,28.4976667 99.7358333,35.9465 91.4625,37.9517917 L91.4625,70.812125 L150.127042,70.812125 C155.337542,70.812125 159.57125,75.0500833 159.57125,80.2563333 L159.57125,109.113125 C167.853083,111.119125 174.00425,118.579292 174,127.476667 C174,127.483042 174,127.490125 174,127.4965 Z" id="Fill-1" fill="#5067A2" fill-rule="nonzero"></path> </g> </g> </svg>'},101:t=>{t.exports='<?xml version="1.0" encoding="UTF-8"?> <svg width="160px" height="132px" viewBox="0 0 160 132" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>treemap</title> <desc>Created with Sketch.</desc> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="treemap" transform="translate(-0.500000, -0.095199)" fill="#5067A2" fill-rule="nonzero"> <path d="M84.9444444,79.2951993 L4.9444444,79.2951993 C2.48984554,79.2951993 0.5,81.2651464 0.5,83.6951993 L0.5,127.695199 C0.5,130.125252 2.48984554,132.095199 4.9444444,132.095199 L84.9444444,132.095199 C86.1231844,132.095199 87.2536462,131.631629 88.0871413,130.806469 C88.9206363,129.981309 89.3888889,128.862152 89.3888889,127.695199 L89.3888889,83.6951993 C89.3888889,82.5282467 88.9206363,81.4090895 88.0871413,80.5839295 C87.2536462,79.7587694 86.1231844,79.2951993 84.9444444,79.2951993 L84.9444444,79.2951993 Z M156.055556,105.695199 L102.722222,105.695199 C101.543482,105.695199 100.41302,106.158769 99.5795254,106.983929 C98.7460304,107.80909 98.2777777,108.928247 98.2777777,110.095199 L98.2777777,127.695199 C98.2777777,128.862152 98.7460304,129.981309 99.5795254,130.806469 C100.41302,131.631629 101.543482,132.095199 102.722222,132.095199 L156.055556,132.095199 C158.510154,132.095199 160.5,130.125252 160.5,127.695199 L160.5,110.095199 C160.5,107.665146 158.510154,105.695199 156.055556,105.695199 L156.055556,105.695199 Z M156.055556,61.6951994 L102.722222,61.6951994 C101.543482,61.6951994 100.41302,62.1587694 99.5795254,62.9839295 C98.7460304,63.8090896 98.2777777,64.9282468 98.2777777,66.0951993 L98.2777777,92.4951993 C98.2777777,93.6621519 98.7460304,94.7813091 99.5795254,95.6064692 C100.41302,96.4316293 101.543482,96.8951993 102.722222,96.8951993 L156.055556,96.8951993 C158.510154,96.8951993 160.5,94.9252522 160.5,92.4951993 L160.5,66.0951993 C160.5,63.6651465 158.510154,61.6951994 156.055556,61.6951994 L156.055556,61.6951994 Z M156.055556,0.0951993491 L102.722222,0.0951993491 C101.543482,0.0951993149 100.41302,0.558769393 99.5795254,1.38392945 C98.7460304,2.20908951 98.2777777,3.32824674 98.2777777,4.49519931 L98.2777777,48.4951994 C98.2777777,49.662152 98.7460304,50.7813092 99.5795254,51.6064692 C100.41302,52.4316293 101.543482,52.8951994 102.722222,52.8951993 L156.055556,52.8951993 C158.510154,52.8951993 160.5,50.9252523 160.5,48.4951994 L160.5,4.49519931 C160.5,2.06514643 158.510154,0.0951993491 156.055556,0.0951993491 L156.055556,0.0951993491 Z M89.3888889,4.49519931 L89.3888889,66.0951993 C89.3888889,67.2621519 88.9206363,68.3813091 88.0871413,69.2064692 C87.2536462,70.0316293 86.1231844,70.4951993 84.9444444,70.4951993 L4.9444444,70.4951993 C2.48984554,70.4951993 0.5,68.5252522 0.5,66.0951993 L0.5,4.49519931 C0.5,2.06514643 2.48984554,0.0951993491 4.9444444,0.0951993491 L84.9444444,0.0951993491 C86.1231844,0.0951993149 87.2536462,0.558769393 88.0871413,1.38392945 C88.9206363,2.20908951 89.3888889,3.32824674 89.3888889,4.49519931 Z" id="Shape"></path> </g> </g> </svg>'},705:(t,e,i)=>{var n=i(639).Symbol;t.exports=n},239:(t,e,i)=>{var n=i(705),a=i(607),r=i(333),o=n?n.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":o&&o in Object(t)?a(t):r(t)}},957:(t,e,i)=>{var n="object"==typeof i.g&&i.g&&i.g.Object===Object&&i.g;t.exports=n},607:(t,e,i)=>{var n=i(705),a=Object.prototype,r=a.hasOwnProperty,o=a.toString,l=n?n.toStringTag:void 0;t.exports=function(t){var e=r.call(t,l),i=t[l];try{t[l]=void 0;var n=!0}catch(t){}var a=o.call(t);return n&&(e?t[l]=i:delete t[l]),a}},333:t=>{var e=Object.prototype.toString;t.exports=function(t){return e.call(t)}},639:(t,e,i)=>{var n=i(957),a="object"==typeof self&&self&&self.Object===Object&&self,r=n||a||Function("return this")();t.exports=r},279:(t,e,i)=>{var n=i(218),a=i(771),r=i(841),o=Math.max,l=Math.min;t.exports=function(t,e,i){var s,c,d,u,p,f,g=0,h=!1,m=!1,C=!0;if("function"!=typeof t)throw new TypeError("Expected a function");function y(e){var i=s,n=c;return s=c=void 0,g=e,u=t.apply(n,i)}function v(t){return g=t,p=setTimeout(_,e),h?y(t):u}function b(t){var i=t-f;return void 0===f||i>=e||i<0||m&&t-g>=d}function _(){var t=a();if(b(t))return L(t);p=setTimeout(_,function(t){var i=e-(t-f);return m?l(i,d-(t-g)):i}(t))}function L(t){return p=void 0,C&&s?y(t):(s=c=void 0,u)}function w(){var t=a(),i=b(t);if(s=arguments,c=this,f=t,i){if(void 0===p)return v(f);if(m)return clearTimeout(p),p=setTimeout(_,e),y(f)}return void 0===p&&(p=setTimeout(_,e)),u}return e=r(e)||0,n(i)&&(h=!!i.leading,d=(m="maxWait"in i)?o(r(i.maxWait)||0,e):d,C="trailing"in i?!!i.trailing:C),w.cancel=function(){void 0!==p&&clearTimeout(p),g=0,s=f=c=p=void 0},w.flush=function(){return void 0===p?u:L(a())},w}},218:t=>{t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},5:t=>{t.exports=function(t){return null!=t&&"object"==typeof t}},448:(t,e,i)=>{var n=i(239),a=i(5);t.exports=function(t){return"symbol"==typeof t||a(t)&&"[object Symbol]"==n(t)}},771:(t,e,i)=>{var n=i(639);t.exports=function(){return n.Date.now()}},841:(t,e,i)=>{var n=i(218),a=i(448),r=/^\s+|\s+$/g,o=/^[-+]0x[0-9a-f]+$/i,l=/^0b[01]+$/i,s=/^0o[0-7]+$/i,c=parseInt;t.exports=function(t){if("number"==typeof t)return t;if(a(t))return NaN;if(n(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=n(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(r,"");var i=l.test(t);return i||s.test(t)?c(t.slice(2),i?2:8):o.test(t)?NaN:+t}},463:function(t){"undefined"!=typeof self&&self,t.exports=function(t){var e={};function i(n){if(e[n])return e[n].exports;var a=e[n]={i:n,l:!1,exports:{}};return t[n].call(a.exports,a,a.exports,i),a.l=!0,a.exports}return i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var a in t)i.d(n,a,function(e){return t[e]}.bind(null,a));return n},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="/dist/",i(i.s=1)}([function(t,e){var i="function"==typeof Float32Array;function n(t,e){return 1-3*e+3*t}function a(t,e){return 3*e-6*t}function r(t){return 3*t}function o(t,e,i){return((n(e,i)*t+a(e,i))*t+r(e))*t}function l(t,e,i){return 3*n(e,i)*t*t+2*a(e,i)*t+r(e)}function s(t){return t}t.exports=function(t,e,n,a){if(!(0<=t&&t<=1&&0<=n&&n<=1))throw new Error("bezier x values must be in [0, 1] range");if(t===e&&n===a)return s;for(var r=i?new Float32Array(11):new Array(11),c=0;c<11;++c)r[c]=o(.1*c,t,n);function d(e){for(var i=0,a=1;10!==a&&r[a]<=e;++a)i+=.1;--a;var s=i+(e-r[a])/(r[a+1]-r[a])*.1,c=l(s,t,n);return c>=.001?function(t,e,i,n){for(var a=0;a<4;++a){var r=l(e,i,n);if(0===r)return e;e-=(o(e,i,n)-t)/r}return e}(e,s,t,n):0===c?s:function(t,e,i,n,a){var r,l,s=0;do{(r=o(l=e+(i-e)/2,n,a)-t)>0?i=l:e=l}while(Math.abs(r)>1e-7&&++s<10);return l}(e,i,i+.1,t,n)}return function(t){return 0===t?0:1===t?1:o(d(t),e,a)}}},function(t,e,i){"use strict";i.r(e);var n=function(){var t=this.$createElement;return(this._self._c||t)(this.tag,{ref:"scrollactive-nav-wrapper",tag:"component",staticClass:"scrollactive-nav"},[this._t("default")],2)};n._withStripped=!0;var a=i(0),r=i.n(a);function o(t){return function(t){if(Array.isArray(t))return l(t)}(t)||function(t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return l(t,e);var i=Object.prototype.toString.call(t).slice(8,-1);return"Object"===i&&t.constructor&&(i=t.constructor.name),"Map"===i||"Set"===i?Array.from(t):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?l(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var s=function(t,e,i,n,a,r,o,l){var s,c="function"==typeof t?t.options:t;if(e&&(c.render=e,c.staticRenderFns=[],c._compiled=!0),s)if(c.functional){c._injectStyles=s;var d=c.render;c.render=function(t,e){return s.call(e),d(t,e)}}else{var u=c.beforeCreate;c.beforeCreate=u?[].concat(u,s):[s]}return{exports:t,options:c}}({props:{activeClass:{type:String,default:"is-active"},offset:{type:Number,default:20},scrollOffset:{type:Number,default:null},scrollContainerSelector:{type:String,default:""},clickToScroll:{type:Boolean,default:!0},duration:{type:Number,default:600},alwaysTrack:{type:Boolean,default:!1},bezierEasingValue:{type:String,default:".5,0,.35,1"},modifyUrl:{type:Boolean,default:!0},exact:{type:Boolean,default:!1},highlightFirstItem:{type:Boolean,default:!1},tag:{type:String,default:"nav"},scrollOnStart:{type:Boolean,default:!0}},data:function(){return{observer:null,items:[],currentItem:null,lastActiveItem:null,scrollAnimationFrame:null,bezierEasing:r.a}},computed:{cubicBezierArray:function(){return this.bezierEasingValue.split(",")},scrollContainer:function(){var t=window;return this.scrollContainerSelector&&(t=document.querySelector(this.scrollContainerSelector)||window),t}},mounted:function(){var t=window.MutationObserver||window.WebKitMutationObserver;this.observer||(this.observer=new t(this.initScrollactiveItems),this.observer.observe(this.$refs["scrollactive-nav-wrapper"],{childList:!0,subtree:!0})),this.initScrollactiveItems(),this.removeActiveClass(),this.currentItem=this.getItemInsideWindow(),this.currentItem&&this.currentItem.classList.add(this.activeClass),this.scrollOnStart&&this.scrollToHashElement(),this.scrollContainer.addEventListener("scroll",this.onScroll)},updated:function(){this.initScrollactiveItems()},beforeDestroy:function(){this.scrollContainer.removeEventListener("scroll",this.onScroll),window.cancelAnimationFrame(this.scrollAnimationFrame)},methods:{onScroll:function(t){this.currentItem=this.getItemInsideWindow(),this.currentItem!==this.lastActiveItem&&(this.removeActiveClass(),this.$emit("itemchanged",t,this.currentItem,this.lastActiveItem),this.lastActiveItem=this.currentItem),this.currentItem&&this.currentItem.classList.add(this.activeClass)},getItemInsideWindow:function(){var t,e=this;return[].forEach.call(this.items,(function(i){var n=i===e.items[0],a=document.getElementById(decodeURI(i.hash.substr(1)));if(a){var r=e.scrollContainer.scrollTop||window.pageYOffset,o=r>=e.getOffsetTop(a)-e.offset,l=r<e.getOffsetTop(a)-e.offset+a.offsetHeight;n&&e.highlightFirstItem&&l&&(t=i),e.exact&&o&&l&&(t=i),!e.exact&&o&&(t=i)}})),t},initScrollactiveItems:function(){var t=this;this.items=this.$el.querySelectorAll(".scrollactive-item"),this.clickToScroll?[].forEach.call(this.items,(function(e){e.addEventListener("click",t.handleClick)})):[].forEach.call(this.items,(function(e){e.removeEventListener("click",t.handleClick)}))},setScrollactiveItems:function(){this.initScrollactiveItems()},handleClick:function(t){var e=this;t.preventDefault();var i=t.currentTarget.hash,n=document.getElementById(decodeURI(i.substr(1)));n?(this.alwaysTrack||(this.scrollContainer.removeEventListener("scroll",this.onScroll),window.cancelAnimationFrame(this.scrollAnimationFrame),this.removeActiveClass(),t.currentTarget.classList.add(this.activeClass)),this.scrollTo(n).then((function(){e.alwaysTrack||(e.scrollContainer.addEventListener("scroll",e.onScroll),e.currentItem=[].find.call(e.items,(function(t){return decodeURI(t.hash.substr(1))===n.id})),e.currentItem!==e.lastActiveItem&&(e.$emit("itemchanged",null,e.currentItem,e.lastActiveItem),e.lastActiveItem=e.currentItem)),e.modifyUrl&&e.pushHashToUrl(i)}))):console.warn("[vue-scrollactive] Element '".concat(i,"' was not found. Make sure it is set in the DOM."))},scrollTo:function(t){var e=this;return new Promise((function(i){var n=e.getOffsetTop(t),a=e.scrollContainer.scrollTop||window.pageYOffset,r=n-a,l=e.bezierEasing.apply(e,o(e.cubicBezierArray)),s=null;window.requestAnimationFrame((function t(n){s||(s=n);var o=n-s,c=o/e.duration;o>=e.duration&&(o=e.duration),c>=1&&(c=1);var d=e.scrollOffset||e.offset,u=a+l(c)*(r-d);e.scrollContainer.scrollTo(0,u),o<e.duration?e.scrollAnimationFrame=window.requestAnimationFrame(t):i()}))}))},getOffsetTop:function(t){for(var e=0,i=t;i;)e+=i.offsetTop,i=i.offsetParent;return this.scrollContainer.offsetTop&&(e-=this.scrollContainer.offsetTop),e},removeActiveClass:function(){var t=this;[].forEach.call(this.items,(function(e){e.classList.remove(t.activeClass)}))},scrollToHashElement:function(){var t=this,e=window.location.hash;if(e){var i=document.querySelector(decodeURI(e));i&&(window.location.hash="",setTimeout((function(){var n=i.offsetTop-t.offset;t.scrollContainer.scrollTo(0,n),t.pushHashToUrl(e)}),0))}},pushHashToUrl:function(t){window.history.pushState?window.history.pushState(null,null,t):window.location.hash=t}}},n);s.options.__file="src/scrollactive.vue";var c=s.exports,d={install:function(t){d.install.installed||t.component("scrollactive",c)}};"undefined"!=typeof window&&window.Vue&&d.install(window.Vue),e.default=d}])},472:(t,e,i)=>{var n={"./bar.svg":38,"./boxplot.svg":851,"./calendar.svg":496,"./candlestick.svg":173,"./custom.svg":353,"./dataZoom.svg":6,"./dataset.svg":238,"./drag.svg":642,"./funnel.svg":797,"./gauge.svg":822,"./geo.svg":317,"./gl.svg":926,"./graph.svg":769,"./heatmap.svg":781,"./line.svg":69,"./lines.svg":276,"./map.svg":831,"./parallel.svg":582,"./pictorialBar.svg":689,"./pie.svg":931,"./radar.svg":702,"./rich.svg":989,"./sankey.svg":827,"./scatter.svg":687,"./sunburst.svg":31,"./themeRiver.svg":951,"./tree.svg":929,"./treemap.svg":101};function a(t){var e=r(t);return i(e)}function r(t){if(!i.o(n,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return n[t]}a.keys=function(){return Object.keys(n)},a.resolve=r,t.exports=a,a.id=472}},e={};function i(n){if(e[n])return e[n].exports;var a=e[n]={id:n,loaded:!1,exports:{}};return t[n].call(a.exports,a,a.exports,i),a.loaded=!0,a.exports}return i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),i.p="./",i(403)})();
\ No newline at end of file
diff --git a/zh/documents/tutorial-parts/tutorial.js b/zh/documents/tutorial-parts/tutorial.js
index eb07924..66650c9 100644
--- a/zh/documents/tutorial-parts/tutorial.js
+++ b/zh/documents/tutorial-parts/tutorial.js
@@ -3,7 +3,7 @@
     "desc": "<h2 id=\"-echarts\">获取 ECharts</h2>\n<p>你可以通过以下几种方式获取 Apache ECharts<sup>TM</sup>。</p>\n<ul>\n<li><p>从 <a href=\"https://echarts.apache.org/zh/download.html\" target=\"_blank\">Apache ECharts 官网下载界面</a> 获取官方源码包后构建。</p>\n</li>\n<li><p>在 ECharts 的 <a href=\"https://github.com/apache/echarts/releases\" target=\"_blank\">GitHub</a> 获取。</p>\n</li>\n<li><p>通过 npm 获取 echarts,<code class=\"codespan\">npm install echarts --save</code>,详见“<a href=\"tutorial.html#%E5%9C%A8%20webpack%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20ECharts\" target=\"_blank\">在 webpack 中使用 echarts</a>”</p>\n</li>\n<li><p>通过 <a href=\"https://www.jsdelivr.com/package/npm/echarts\" target=\"_blank\">jsDelivr</a> 等 CDN 引入</p>\n</li>\n</ul>\n<h2 id=\"-echarts\">引入 ECharts</h2>\n<p>通过标签方式直接引入构建好的 echarts 文件</p>\n<pre><code class=\"lang-html\">&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n    &lt;meta charset=&quot;utf-8&quot;&gt;\n    &lt;!-- 引入 ECharts 文件 --&gt;\n    &lt;script src=&quot;echarts.min.js&quot;&gt;&lt;/script&gt;\n&lt;/head&gt;\n&lt;/html&gt;\n</code></pre>\n<h2 id=\"-\">绘制一个简单的图表</h2>\n<p>在绘图前我们需要为 ECharts 准备一个具备高宽的 DOM 容器。</p>\n<pre><code>&lt;body&gt;\n    &lt;!-- 为 ECharts 准备一个具备大小(宽高)的 DOM --&gt;\n    &lt;div id=&quot;main&quot; style=&quot;width: 600px;height:400px;&quot;&gt;&lt;/div&gt;\n&lt;/body&gt;\n</code></pre><p>然后就可以通过 <a href=\"api.html#echarts.init\" target=\"_blank\">echarts.init</a> 方法初始化一个 echarts 实例并通过 <a href=\"api.html#echartsInstance.setOption\" target=\"_blank\">setOption</a> 方法生成一个简单的柱状图,下面是完整代码。</p>\n<pre><code class=\"lang-html\">&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n    &lt;meta charset=&quot;utf-8&quot;&gt;\n    &lt;title&gt;ECharts&lt;/title&gt;\n    &lt;!-- 引入 echarts.js --&gt;\n    &lt;script src=&quot;echarts.min.js&quot;&gt;&lt;/script&gt;\n&lt;/head&gt;\n&lt;body&gt;\n    &lt;!-- 为ECharts准备一个具备大小(宽高)的Dom --&gt;\n    &lt;div id=&quot;main&quot; style=&quot;width: 600px;height:400px;&quot;&gt;&lt;/div&gt;\n    &lt;script type=&quot;text/javascript&quot;&gt;\n        // 基于准备好的dom,初始化echarts实例\n        var myChart = echarts.init(document.getElementById(&#39;main&#39;));\n\n        // 指定图表的配置项和数据\n        var option = {\n            title: {\n                text: &#39;ECharts 入门示例&#39;\n            },\n            tooltip: {},\n            legend: {\n                data:[&#39;销量&#39;]\n            },\n            xAxis: {\n                data: [&quot;衬衫&quot;,&quot;羊毛衫&quot;,&quot;雪纺衫&quot;,&quot;裤子&quot;,&quot;高跟鞋&quot;,&quot;袜子&quot;]\n            },\n            yAxis: {},\n            series: [{\n                name: &#39;销量&#39;,\n                type: &#39;bar&#39;,\n                data: [5, 20, 36, 10, 10, 20]\n            }]\n        };\n\n        // 使用刚指定的配置项和数据显示图表。\n        myChart.setOption(option);\n    &lt;/script&gt;\n&lt;/body&gt;\n&lt;/html&gt;\n</code></pre>\n<p>这样你的第一个图表就诞生了!</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/getting-started&reset=1&edit=1\" width=\"600\" height=\"300\" ></iframe>\n\n\n<p>你也可以直接进入 <a href=\"https://echarts.apache.org/examples/zh/editor.html?c=doc-example/getting-started\" target=\"_blank\">ECharts Gallery</a> 中查看编辑示例</p>\n"
   },
   "ECharts 5 新特性": {
-    "desc": "<p><a href=\"https://echarts-5-live.bj.bcebos.com/echarts-5-event.html?ref=ec-tutorial\" target=\"_blank\">\n   <picture>\n      <source type=\"image/webp\" srcset=\"https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/event/20200128-apache-echarts-5.webp\" />\n      <source type=\"image/png\" srcset=\"https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/event/20200128-apache-echarts-5.png\" />\n      <img width=\"700px\" src=\"https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/event/20200128-apache-echarts-5.png\" />\n   </picture>\n</a></p>\n<p>数据可视化在过去的几年中得到了长足的发展。开发者对于可视化产品的期待不再是简单的图表创建工具,而在交互、性能、数据处理等方面有了更高级的需求。</p>\n<p>Apache ECharts 始终致力于让开发者以更方便的方式创造灵活丰富的可视化作品。在最新推出的 Apache ECharts 5,我们着力加强了图表的叙事能力,让开发者可以以更简单的方式,讲述数据背后的故事。</p>\n<p><img src=\"documents/asset/img/feature-v5/echarts-5.png\" width=\"800px\" /></p>\n<p>“表·达”是 Apache ECharts 5 的核心,通过五大模块、十五项特性的全面升级,围绕可视化作品的叙事表达能力,让图“表”更能传“达”数据背后的故事,帮助开发者更轻松地创造满足各种场景需求的可视化作品。</p>\n<h2 id=\"-\">动态叙事</h2>\n<p>动画对于人类认知的重要性不言而喻。在之前的作品中,我们会通过初始化动画和过渡动画帮助用户理解数据变换之间的联系,让图表的出现和变换显得不那么生硬。这次,我们更是大幅度增强了我们的动画叙事能力,。希望能够进一步发挥动画对于用户认知的帮助作用,借助图表的动态叙事功能,帮助用户更容易理解图表背后表达的故事。</p>\n<h4 id=\"-\">动态排序图</h4>\n<p>Apache ECharts 5 新增支持动态排序柱状图(bar-racing)以及动态排序折线图(line-racing),帮助开发者方便地创建带有时序性的图表,展现数据随着时间维度上的变化,讲述数据的演变过程。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=bar-race-country&edit=1&reset=1\" width=\"700\" height=\"400\" ></iframe>\n\n\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=line-race&edit=1&reset=1\" width=\"700\" height=\"400\" ></iframe>\n\n\n<p>动态排序图展现了不同的类目随着时间在排名上的衍变。而开发者只需要通过几行简单的配置项就可以在 ECharts 中开启这样的效果。</p>\n<h4 id=\"-\">自定义系列动画</h4>\n<p>除了动态排序图,Apache ECharts 5 在自定义系列中提供了更加丰富强大的动画效果,支持标签数值文本的插值动画,图形的形变(morph)、分裂(separate)、合并(combine)等效果的过渡动画。</p>\n<p>想象一下,用这些动态效果,你可以创造出多么令人称奇的可视化作品!</p>\n<h2 id=\"-\">视觉设计</h2>\n<p>视觉设计的作用并不仅仅是为了让图表更好看,更重要的是,符合可视化原理的设计可以帮用户更快速地理解图表想表达的内容,并且尽可能消除不良设计带来的误解。</p>\n<h4 id=\"-\">默认设计</h4>\n<p>我们发现,有很大一部分开发者使用了 ECharts 默认的主题样式,因而设计优雅、符合可视化原理的默认主题设计是非常重要的。在 Apache ECharts 5 中,我们重新设计了默认的主题样式,针对不同的系列和组件分别做了优化调整。以主题色为例,我们考量了颜色之间的区分度、与背景色的对比度、相邻颜色的和谐度等因素,并且确保色觉辨识障碍人士也能清楚地区分数据。</p>\n<p><img src=\"documents/asset/img/feature-v5/theme-color.png\" width=\"400px\" /></p>\n<p>我们以最常用的柱状图为例,来看看新版本浅色主题和深色主题的样式:</p>\n<p><img src=\"documents/asset/img/feature-v5/new-theme-light.png\" width=\"500px\" />\n<img src=\"documents/asset/img/feature-v5/new-theme-dark.png\" width=\"500px\" /></p>\n<p>对于数据区域缩放,时间轴等交互组件,我们也设计了全新的样式并且提供了更好的交互体验:</p>\n<p><img src=\"documents/asset/img/feature-v5/dataZoom.png\" width=\"500px\" /></p>\n<p><img src=\"documents/asset/img/feature-v5/timeline.png\" width=\"500px\" /></p>\n<h4 id=\"-\">标签</h4>\n<p>标签是图表中的核心元素之一,清晰而明确的标签可以帮助用户对数据有更准确的理解。Apache ECharts 5 提供了多种新的标签功能,让密集的标签能清晰显示、准确表意。</p>\n<p>Apache ECharts 5 可以通过一个配置项开启自动隐藏重叠的标签。对于超出显示区域的标签,可以选择自动截断或者换行。密集的饼图标签,现在有了更美观的自动排布。</p>\n<p>这些功能可以帮助避免文字过于密集影响可读性。并且,无需开发者编写额外的代码就能默认生效,大大简化了开发者的开发成本。</p>\n<p>我们也提供了多个配置项来让开发者主动控制标签的布局策略,例如标签拖动、整体显示在画布边缘,用引导线和图形元素连接,并且仍可联动高亮表达关联关系。</p>\n<p>新的标签功能可以让你在移动端这样局限的空间内也可以有很优雅的标签展示:</p>\n<p><img src=\"documents/asset/img/feature-v5/pie-label.png\" height=\"150px\" />\n<img src=\"documents/asset/img/feature-v5/pie-label-2.png\" height=\"150px\" /></p>\n<h4 id=\"-\">时间轴</h4>\n<p>Apache ECharts 5 带来了适于表达时间标签刻度的时间轴。时间轴的默认设计更突出重要的信息,并且提供了更灵活的定制化能力,让开发者根据不同的需求定制时间轴的标签内容。</p>\n<p>首先,时间轴不再如之前般绝对平均分割,而是选取年、月、日、整点这类更有意义的点来展示,并且能同时显示不同层级的刻度。标签的 <code class=\"codespan\">formatter</code> 支持了时间模版(例如 <code class=\"codespan\">{yyyy}-{MM}-{dd}</code>),并且可以为不同时间粒度的标签指定不同的 <code class=\"codespan\">formatter</code>,结合已有的富文本标签,可以定制出醒目而多样的时间效果。</p>\n<p>不同的 dataZoom 粒度下时间刻度的显示:</p>\n<p><img src=\"documents/asset/img/feature-v5/time-axis.png\" width=\"600px\" /></p>\n<p><img src=\"documents/asset/img/feature-v5/time-axis-2.png\" width=\"600px\" /></p>\n<h4 id=\"-\">提示框</h4>\n<p>提示框(Tooltip)是一种最常用的可视化组件,可以帮助用户交互式地了解数据的详细信息。在 Apache ECharts 5 中,我们对提示框的样式进行了优化,通过对字体样式,颜色的调整,指向图形的箭头,跟随图形颜色的边框色等功能,让提示框的默认展示优雅又清晰。并且改进了富文本的渲染逻辑,确保显示效果与 HTML 方式一致,让用户在不同场景下可以选择不同的技术方案实现同样的效果。</p>\n<p><img src=\"documents/asset/img/feature-v5/new-tooltip.png\" height=\"200px\" />\n<img src=\"documents/asset/img/feature-v5/new-tooltip-2.png\" height=\"200px\" /></p>\n<p>除此之外,我们这次也加上了提示框内的列表按照数值大小或者类目顺序排序的功能。</p>\n<h4 id=\"-\">仪表盘</h4>\n<p>我们看到社区用户创建了很多酷炫的仪表盘图表,但是他们的配置方式往往比较复杂而取巧。因此,我们对仪表盘的功能作了全面升级,支持了图片或者矢量路径绘制指针、也支持了锚点(anchor)配置项、进度条(progress)、圆角效果等等配置项。</p>\n<p>不同样式的仪表盘指针:</p>\n<p><img src=\"documents/asset/img/feature-v5/gauge-pointer.png\" width=\"600px\" /></p>\n<p>这些升级,不仅可以让开发者用更简单的配置项实现酷炫的效果,而且带来了更丰富的定制能力。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=gauge-clock&edit=1&reset=1\" width=\"600\" height=\"600\" ></iframe>\n\n\n<h4 id=\"-\">扇形圆角</h4>\n<p>圆角可以带来更美观而柔和的视觉,也能够赋予更多的创造力。Apache ECharts 5 支持了饼图、旭日图、矩形树图的扇形圆角。可不要小看了简单的圆角配置项,合理地搭配其他的效果,就可以形成更具个性的的可视化作品。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=sunburst-borderRadius&edit=1&reset=1\" width=\"400\" height=\"400\" ></iframe>\n\n\n\n\n<h2 id=\"-\">交互能力</h2>\n<p>可视化作品的交互能力帮助用户探索了解作品,加深对于图表主旨的理解。</p>\n<h4 id=\"-\">状态管理</h4>\n<p>在 ECharts 4 中有高亮(emphasis)和普通(normal)两个交互的状态,在鼠标移到图形上的时候会进入高亮状态以区分该数据,开发者可以分别设置这两个状态的颜色,阴影等样式。</p>\n<p>这次在 Apache ECharts 5 中,我们在原先的鼠标 hover 高亮的基础上,新增加了<strong>淡出</strong>其它非相关元素的效果,从而可以达到聚焦目标数据的目的。</p>\n<p>比如在这个<a href=\"https://echarts.apache.org/examples/zh/editor.html?c=bar-y-category-stack\" target=\"_blank\">柱状图</a>的例子中,鼠标移到一个系列上的时候,其它非相关的系列就会淡出,从而可以更清晰的突出聚焦系列中数据的对比。在关系图,树图,旭日图,桑基等更复杂数据结构的图上,也可以通过淡出非相关元素来观察数据之间的联系。而且颜色,阴影等在高亮(emphasis)中可以设置的样式,现在也可以在淡出(blur)状态中设置了。</p>\n<p>除此之外,我们为所有系列还添加了<strong>点击选中</strong>这个之前只有在饼图、地图等少数系列中才能开启的交互,开发者可以设置为单选或多选模式,并且通过监听 <code class=\"codespan\">selectchanged</code> 事件获取到选中的所有图形然后进行更进一步的处理。与高亮和淡出一样,选中的样式也可以在 <code class=\"codespan\">select</code> 中配置。</p>\n<h4 id=\"-\">性能提升</h4>\n<h5 id=\"-\">脏矩形渲染</h5>\n<p>Apache ECharts 5 新支持了脏矩形渲染,解决只有局部变化的场景下的性能瓶颈。在使用 Canvas 渲染器时,脏矩形渲染技术探测并只更新视图变化的部分,而不是任何变动都引起画布完全重绘。这能在一些特殊场景下帮助提高渲染帧率,例如在图形很多时候,鼠标频繁触发一些图形高亮的场景。以往这类场景,会使用额外的 Canvas 层以优化性能,但是这种方式不是所有场景都通用,而且对于复杂的样式的效果并不理想。脏矩形渲染很好地同时满足了性能和显示正确。</p>\n<p>脏矩形的可视化演示,红色框选部分为该帧重绘区域:</p>\n<p><img src=\"documents/asset/img/feature-v5/dirty-rect.gif\" width=\"500px\" /></p>\n<p>大家在新的示例页面选择开启脏矩形优化就可以看到该效果。</p>\n<h5 id=\"-\">实时时序数据的折线图性能优化</h5>\n<p>除此之外,海量数据下折线图的性能也有了大幅度的性能提升。我们经常碰到大量的实时时序数据的高性能绘制的需求,这些数据可能需要几百或者几十毫秒更新一次。</p>\n<p>Apache ECharts 5 对这些场景下的 CPU 消耗、内存占用、初始化时间都进行了深度的优化,使得百万量级的数据也能做到实时的更新(每次更新耗时少于 30ms),甚至对于千万级的数据,也可以在 1s 内渲染完,并且保持很小的内存占用以及流畅的提示框(tooltip)等交互。</p>\n<h2 id=\"-\">开发体验</h2>\n<p>我们希望如此强大的可视化工具可以被更多开发者以更简单的方式使用,因而开发者的开发体验也是我们非常关注的方面。</p>\n<h4 id=\"-\">数据集</h4>\n<p>ECharts 5 加强了数据集的数据转换能力,让开发者可以使用简单的方式实现常用的数据处理,如:数据过滤(filter)、排序(sort)、聚合(aggregate)、直方图(histogram)、简单聚类(clustering)、回归线计算(regression)等。开发者可以用统一的声明式方式来使用这些功能,可以方便地实现常用的数据操作。</p>\n<h4 id=\"-\">国际化</h4>\n<p>ECharts 原有的国际化方案,采用的是根据不同的语言参数打包出不同的部署文件的形式。​这种方式,使动态的语言和静态的代码包绑定在一起,使用的时候只能通过重新加载不同语言版本的 ECharts 代码来达到切换语言的目的。</p>\n<p>因此,从 Apache ECharts 5 开始,动态的语言包和静态的代码包分离开。切换语言的时候,只需要加载相应语言包​,通过类似挂载主题的方式,使用 <code class=\"codespan\">registerLocale</code> 函数挂载语言包对象​,重新初始化后就完成了语言的切换​。</p>\n<pre><code class=\"lang-js\">// import the lang object and set when init​\necharts.registerLocale(&#39;DE&#39;, lang);​\necharts.init(DomElement, null, {​\n   locale: &#39;DE&#39;​\n});\n</code></pre>\n<h4 id=\"typescript-\">TypeScript 重构</h4>\n<p>在近 8 年的时间里,Apache ECharts 已经发展成一个非常复杂的可视化库了,为了续可以更安全高效的进行重构和新功能的开发,我们在 Apache ECharts 5 的开发之初,使用 TypeScript 对代码进行了重写,TypeScript 所带来的强类型让我们更有信心地在 ECharts 5 开发的时候对代码进行大刀阔斧的重构以实现更多令人激动人心的特性。</p>\n<p>对于开发者,我们也可以从 TypeScript 代码直接生成更好更符合代码的<code class=\"codespan\">DTS</code>类型描述文件。在此之前,ECharts 的类型描述文件一直是由社区开发者帮我们维护并发布到<a href=\"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/echarts\" target=\"_blank\">DefinityTyped</a>,这个有着不小的工作量,非常感谢大家的贡献。</p>\n<p>除此之外,如果开发者的组件是按需引入的,我们还提供了一个 <code class=\"codespan\">ComposeOption</code> 类型方法,可以组合出一个只包含了引入组件的配置项类型,可以带来更严格的类型检查,帮助你提前检测到未引入的组件类型。</p>\n<h2 id=\"-\">可访问性</h2>\n<p>Apache ECharts 一直非常重视无障碍设计,我们希望让视觉障碍人士也能平等了解图表传递的信息。并且也希望图表的开发者能以极低的开发成本实现这一点,因而有利于让开发者更愿意为视觉障碍人士提供支持。</p>\n<p>在上一个大版本中,我们支持了根据不同的图表类型和数据自动一键智能生成图表描述的功能,帮助开发者非常方便地支持图表的 DOM 描述信息。在 ECharts 5 中,我们也做了更多提高可访问性的设计,帮助视觉障碍人士更好地理解图表内容。</p>\n<h4 id=\"-\">主题配色</h4>\n<p>我们在设计新版默认主题样式的时候,将无障碍设计作为一个重要的考量依据,对颜色的明度和色值都进行反复测试,帮助视觉辨识障碍用户清楚地识别图表数据。​</p>\n<p>并且,针对有更进一步无障碍需求的开发者,我们还提供了特殊的高对比度主题,以更高对比度颜色的主题将数据作进一步区分。</p>\n<h4 id=\"-\">贴花图案</h4>\n<p>ECharts 5 还新增提供了贴花的功能,用图案辅助颜色表达,进一步帮助用户区分数据。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/aria-decal-simple&edit=1&reset=1\" width=\"600\" height=\"350\" ></iframe>\n\n\n<p>此外,贴花图案还能在一些其他的场景下提供帮助,比如:在报纸、书籍之类只有单色或者非常少的颜色的印刷品中,帮助更好地区分数据;用图形元素方便用户对数据产生更直观的理解等。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/aria-decal-newspaper&edit=1&reset=1\" width=\"600\" height=\"350\" ></iframe>\n\n\n\n\n<h2 id=\"-\">小结</h2>\n<p>除了以上介绍的功能,Apache ECharts 还在非常多的细节中做了改进,帮助开发者更轻松地创建默认好用、配置灵活的图表,用图表讲述数据背后的故事。</p>\n<p>感谢所有使用过 ECharts,甚至参与过社区贡献的开发者,正是你们才使得 Apache ECharts 5 成为可能。我们会以更大的热情投入到未来的开发中,Apache ECharts 也会以更大的诚意和大家在 6 相见!</p>\n"
+    "desc": "<p>数据可视化在过去的几年中得到了长足的发展。开发者对于可视化产品的期待不再是简单的图表创建工具,而在交互、性能、数据处理等方面有了更高级的需求。</p>\n<p>Apache ECharts 始终致力于让开发者以更方便的方式创造灵活丰富的可视化作品。在最新推出的 Apache ECharts 5,我们着力加强了图表的叙事能力,让开发者可以以更简单的方式,讲述数据背后的故事。</p>\n<p><img src=\"documents/asset/img/feature-v5/echarts-5.png\" width=\"800px\" /></p>\n<p>“表·达”是 Apache ECharts 5 的核心,通过五大模块、十五项特性的全面升级,围绕可视化作品的叙事表达能力,让图“表”更能传“达”数据背后的故事,帮助开发者更轻松地创造满足各种场景需求的可视化作品。</p>\n<h2 id=\"-\">动态叙事</h2>\n<p>动画对于人类认知的重要性不言而喻。在之前的作品中,我们会通过初始化动画和过渡动画帮助用户理解数据变换之间的联系,让图表的出现和变换显得不那么生硬。这次,我们更是大幅度增强了我们的动画叙事能力,。希望能够进一步发挥动画对于用户认知的帮助作用,借助图表的动态叙事功能,帮助用户更容易理解图表背后表达的故事。</p>\n<h4 id=\"-\">动态排序图</h4>\n<p>Apache ECharts 5 新增支持动态排序柱状图(bar-racing)以及动态排序折线图(line-racing),帮助开发者方便地创建带有时序性的图表,展现数据随着时间维度上的变化,讲述数据的演变过程。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=bar-race-country&edit=1&reset=1\" width=\"700\" height=\"400\" ></iframe>\n\n\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=line-race&edit=1&reset=1\" width=\"700\" height=\"400\" ></iframe>\n\n\n<p>动态排序图展现了不同的类目随着时间在排名上的衍变。而开发者只需要通过几行简单的配置项就可以在 ECharts 中开启这样的效果。</p>\n<h4 id=\"-\">自定义系列动画</h4>\n<p>除了动态排序图,Apache ECharts 5 在自定义系列中提供了更加丰富强大的动画效果,支持标签数值文本的插值动画,图形的形变(morph)、分裂(separate)、合并(combine)等效果的过渡动画。</p>\n<p>想象一下,用这些动态效果,你可以创造出多么令人称奇的可视化作品!</p>\n<h2 id=\"-\">视觉设计</h2>\n<p>视觉设计的作用并不仅仅是为了让图表更好看,更重要的是,符合可视化原理的设计可以帮用户更快速地理解图表想表达的内容,并且尽可能消除不良设计带来的误解。</p>\n<h4 id=\"-\">默认设计</h4>\n<p>我们发现,有很大一部分开发者使用了 ECharts 默认的主题样式,因而设计优雅、符合可视化原理的默认主题设计是非常重要的。在 Apache ECharts 5 中,我们重新设计了默认的主题样式,针对不同的系列和组件分别做了优化调整。以主题色为例,我们考量了颜色之间的区分度、与背景色的对比度、相邻颜色的和谐度等因素,并且确保色觉辨识障碍人士也能清楚地区分数据。</p>\n<p><img src=\"documents/asset/img/feature-v5/theme-color.png\" width=\"400px\" /></p>\n<p>我们以最常用的柱状图为例,来看看新版本浅色主题和深色主题的样式:</p>\n<p><img src=\"documents/asset/img/feature-v5/new-theme-light.png\" width=\"500px\" />\n<img src=\"documents/asset/img/feature-v5/new-theme-dark.png\" width=\"500px\" /></p>\n<p>对于数据区域缩放,时间轴等交互组件,我们也设计了全新的样式并且提供了更好的交互体验:</p>\n<p><img src=\"documents/asset/img/feature-v5/dataZoom.png\" width=\"500px\" /></p>\n<p><img src=\"documents/asset/img/feature-v5/timeline.png\" width=\"500px\" /></p>\n<h4 id=\"-\">标签</h4>\n<p>标签是图表中的核心元素之一,清晰而明确的标签可以帮助用户对数据有更准确的理解。Apache ECharts 5 提供了多种新的标签功能,让密集的标签能清晰显示、准确表意。</p>\n<p>Apache ECharts 5 可以通过一个配置项开启自动隐藏重叠的标签。对于超出显示区域的标签,可以选择自动截断或者换行。密集的饼图标签,现在有了更美观的自动排布。</p>\n<p>这些功能可以帮助避免文字过于密集影响可读性。并且,无需开发者编写额外的代码就能默认生效,大大简化了开发者的开发成本。</p>\n<p>我们也提供了多个配置项来让开发者主动控制标签的布局策略,例如标签拖动、整体显示在画布边缘,用引导线和图形元素连接,并且仍可联动高亮表达关联关系。</p>\n<p>新的标签功能可以让你在移动端这样局限的空间内也可以有很优雅的标签展示:</p>\n<p><img src=\"documents/asset/img/feature-v5/pie-label.png\" height=\"150px\" />\n<img src=\"documents/asset/img/feature-v5/pie-label-2.png\" height=\"150px\" /></p>\n<h4 id=\"-\">时间轴</h4>\n<p>Apache ECharts 5 带来了适于表达时间标签刻度的时间轴。时间轴的默认设计更突出重要的信息,并且提供了更灵活的定制化能力,让开发者根据不同的需求定制时间轴的标签内容。</p>\n<p>首先,时间轴不再如之前般绝对平均分割,而是选取年、月、日、整点这类更有意义的点来展示,并且能同时显示不同层级的刻度。标签的 <code class=\"codespan\">formatter</code> 支持了时间模版(例如 <code class=\"codespan\">{yyyy}-{MM}-{dd}</code>),并且可以为不同时间粒度的标签指定不同的 <code class=\"codespan\">formatter</code>,结合已有的富文本标签,可以定制出醒目而多样的时间效果。</p>\n<p>不同的 dataZoom 粒度下时间刻度的显示:</p>\n<p><img src=\"documents/asset/img/feature-v5/time-axis.png\" width=\"600px\" /></p>\n<p><img src=\"documents/asset/img/feature-v5/time-axis-2.png\" width=\"600px\" /></p>\n<h4 id=\"-\">提示框</h4>\n<p>提示框(Tooltip)是一种最常用的可视化组件,可以帮助用户交互式地了解数据的详细信息。在 Apache ECharts 5 中,我们对提示框的样式进行了优化,通过对字体样式,颜色的调整,指向图形的箭头,跟随图形颜色的边框色等功能,让提示框的默认展示优雅又清晰。并且改进了富文本的渲染逻辑,确保显示效果与 HTML 方式一致,让用户在不同场景下可以选择不同的技术方案实现同样的效果。</p>\n<p><img src=\"documents/asset/img/feature-v5/new-tooltip.png\" height=\"200px\" />\n<img src=\"documents/asset/img/feature-v5/new-tooltip-2.png\" height=\"200px\" /></p>\n<p>除此之外,我们这次也加上了提示框内的列表按照数值大小或者类目顺序排序的功能。</p>\n<h4 id=\"-\">仪表盘</h4>\n<p>我们看到社区用户创建了很多酷炫的仪表盘图表,但是他们的配置方式往往比较复杂而取巧。因此,我们对仪表盘的功能作了全面升级,支持了图片或者矢量路径绘制指针、也支持了锚点(anchor)配置项、进度条(progress)、圆角效果等等配置项。</p>\n<p>不同样式的仪表盘指针:</p>\n<p><img src=\"documents/asset/img/feature-v5/gauge-pointer.png\" width=\"600px\" /></p>\n<p>这些升级,不仅可以让开发者用更简单的配置项实现酷炫的效果,而且带来了更丰富的定制能力。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=gauge-clock&edit=1&reset=1\" width=\"600\" height=\"600\" ></iframe>\n\n\n<h4 id=\"-\">扇形圆角</h4>\n<p>圆角可以带来更美观而柔和的视觉,也能够赋予更多的创造力。Apache ECharts 5 支持了饼图、旭日图、矩形树图的扇形圆角。可不要小看了简单的圆角配置项,合理地搭配其他的效果,就可以形成更具个性的的可视化作品。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=sunburst-borderRadius&edit=1&reset=1\" width=\"400\" height=\"400\" ></iframe>\n\n\n\n\n<h2 id=\"-\">交互能力</h2>\n<p>可视化作品的交互能力帮助用户探索了解作品,加深对于图表主旨的理解。</p>\n<h4 id=\"-\">状态管理</h4>\n<p>在 ECharts 4 中有高亮(emphasis)和普通(normal)两个交互的状态,在鼠标移到图形上的时候会进入高亮状态以区分该数据,开发者可以分别设置这两个状态的颜色,阴影等样式。</p>\n<p>这次在 Apache ECharts 5 中,我们在原先的鼠标 hover 高亮的基础上,新增加了<strong>淡出</strong>其它非相关元素的效果,从而可以达到聚焦目标数据的目的。</p>\n<p>比如在这个<a href=\"https://echarts.apache.org/examples/zh/editor.html?c=bar-y-category-stack\" target=\"_blank\">柱状图</a>的例子中,鼠标移到一个系列上的时候,其它非相关的系列就会淡出,从而可以更清晰的突出聚焦系列中数据的对比。在关系图,树图,旭日图,桑基等更复杂数据结构的图上,也可以通过淡出非相关元素来观察数据之间的联系。而且颜色,阴影等在高亮(emphasis)中可以设置的样式,现在也可以在淡出(blur)状态中设置了。</p>\n<p>除此之外,我们为所有系列还添加了<strong>点击选中</strong>这个之前只有在饼图、地图等少数系列中才能开启的交互,开发者可以设置为单选或多选模式,并且通过监听 <code class=\"codespan\">selectchanged</code> 事件获取到选中的所有图形然后进行更进一步的处理。与高亮和淡出一样,选中的样式也可以在 <code class=\"codespan\">select</code> 中配置。</p>\n<h4 id=\"-\">性能提升</h4>\n<h5 id=\"-\">脏矩形渲染</h5>\n<p>Apache ECharts 5 新支持了脏矩形渲染,解决只有局部变化的场景下的性能瓶颈。在使用 Canvas 渲染器时,脏矩形渲染技术探测并只更新视图变化的部分,而不是任何变动都引起画布完全重绘。这能在一些特殊场景下帮助提高渲染帧率,例如在图形很多时候,鼠标频繁触发一些图形高亮的场景。以往这类场景,会使用额外的 Canvas 层以优化性能,但是这种方式不是所有场景都通用,而且对于复杂的样式的效果并不理想。脏矩形渲染很好地同时满足了性能和显示正确。</p>\n<p>脏矩形的可视化演示,红色框选部分为该帧重绘区域:</p>\n<p><img src=\"documents/asset/img/feature-v5/dirty-rect.gif\" width=\"500px\" /></p>\n<p>大家在新的示例页面选择开启脏矩形优化就可以看到该效果。</p>\n<h5 id=\"-\">实时时序数据的折线图性能优化</h5>\n<p>除此之外,海量数据下折线图的性能也有了大幅度的性能提升。我们经常碰到大量的实时时序数据的高性能绘制的需求,这些数据可能需要几百或者几十毫秒更新一次。</p>\n<p>Apache ECharts 5 对这些场景下的 CPU 消耗、内存占用、初始化时间都进行了深度的优化,使得百万量级的数据也能做到实时的更新(每次更新耗时少于 30ms),甚至对于千万级的数据,也可以在 1s 内渲染完,并且保持很小的内存占用以及流畅的提示框(tooltip)等交互。</p>\n<h2 id=\"-\">开发体验</h2>\n<p>我们希望如此强大的可视化工具可以被更多开发者以更简单的方式使用,因而开发者的开发体验也是我们非常关注的方面。</p>\n<h4 id=\"-\">数据集</h4>\n<p>ECharts 5 加强了数据集的数据转换能力,让开发者可以使用简单的方式实现常用的数据处理,如:数据过滤(filter)、排序(sort)、聚合(aggregate)、直方图(histogram)、简单聚类(clustering)、回归线计算(regression)等。开发者可以用统一的声明式方式来使用这些功能,可以方便地实现常用的数据操作。</p>\n<h4 id=\"-\">国际化</h4>\n<p>ECharts 原有的国际化方案,采用的是根据不同的语言参数打包出不同的部署文件的形式。​这种方式,使动态的语言和静态的代码包绑定在一起,使用的时候只能通过重新加载不同语言版本的 ECharts 代码来达到切换语言的目的。</p>\n<p>因此,从 Apache ECharts 5 开始,动态的语言包和静态的代码包分离开。切换语言的时候,只需要加载相应语言包​,通过类似挂载主题的方式,使用 <code class=\"codespan\">registerLocale</code> 函数挂载语言包对象​,重新初始化后就完成了语言的切换​。</p>\n<pre><code class=\"lang-js\">// import the lang object and set when init​\necharts.registerLocale(&#39;DE&#39;, lang);​\necharts.init(DomElement, null, {​\n   locale: &#39;DE&#39;​\n});\n</code></pre>\n<h4 id=\"typescript-\">TypeScript 重构</h4>\n<p>在近 8 年的时间里,Apache ECharts 已经发展成一个非常复杂的可视化库了,为了续可以更安全高效的进行重构和新功能的开发,我们在 Apache ECharts 5 的开发之初,使用 TypeScript 对代码进行了重写,TypeScript 所带来的强类型让我们更有信心地在 ECharts 5 开发的时候对代码进行大刀阔斧的重构以实现更多令人激动人心的特性。</p>\n<p>对于开发者,我们也可以从 TypeScript 代码直接生成更好更符合代码的<code class=\"codespan\">DTS</code>类型描述文件。在此之前,ECharts 的类型描述文件一直是由社区开发者帮我们维护并发布到<a href=\"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/echarts\" target=\"_blank\">DefinityTyped</a>,这个有着不小的工作量,非常感谢大家的贡献。</p>\n<p>除此之外,如果开发者的组件是按需引入的,我们还提供了一个 <code class=\"codespan\">ComposeOption</code> 类型方法,可以组合出一个只包含了引入组件的配置项类型,可以带来更严格的类型检查,帮助你提前检测到未引入的组件类型。</p>\n<h2 id=\"-\">可访问性</h2>\n<p>Apache ECharts 一直非常重视无障碍设计,我们希望让视觉障碍人士也能平等了解图表传递的信息。并且也希望图表的开发者能以极低的开发成本实现这一点,因而有利于让开发者更愿意为视觉障碍人士提供支持。</p>\n<p>在上一个大版本中,我们支持了根据不同的图表类型和数据自动一键智能生成图表描述的功能,帮助开发者非常方便地支持图表的 DOM 描述信息。在 ECharts 5 中,我们也做了更多提高可访问性的设计,帮助视觉障碍人士更好地理解图表内容。</p>\n<h4 id=\"-\">主题配色</h4>\n<p>我们在设计新版默认主题样式的时候,将无障碍设计作为一个重要的考量依据,对颜色的明度和色值都进行反复测试,帮助视觉辨识障碍用户清楚地识别图表数据。​</p>\n<p>并且,针对有更进一步无障碍需求的开发者,我们还提供了特殊的高对比度主题,以更高对比度颜色的主题将数据作进一步区分。</p>\n<h4 id=\"-\">贴花图案</h4>\n<p>ECharts 5 还新增提供了贴花的功能,用图案辅助颜色表达,进一步帮助用户区分数据。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/aria-decal-simple&edit=1&reset=1\" width=\"600\" height=\"350\" ></iframe>\n\n\n<p>此外,贴花图案还能在一些其他的场景下提供帮助,比如:在报纸、书籍之类只有单色或者非常少的颜色的印刷品中,帮助更好地区分数据;用图形元素方便用户对数据产生更直观的理解等。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/aria-decal-newspaper&edit=1&reset=1\" width=\"600\" height=\"350\" ></iframe>\n\n\n\n\n<h2 id=\"-\">小结</h2>\n<p>除了以上介绍的功能,Apache ECharts 还在非常多的细节中做了改进,帮助开发者更轻松地创建默认好用、配置灵活的图表,用图表讲述数据背后的故事。</p>\n<p>感谢所有使用过 ECharts,甚至参与过社区贡献的开发者,正是你们才使得 Apache ECharts 5 成为可能。我们会以更大的热情投入到未来的开发中,Apache ECharts 也会以更大的诚意和大家在 6 相见!</p>\n"
   },
   "ECharts 5 升级指南": {
     "desc": "<p>本指南面向那些希望将 echarts 4.x(以下简称 <code class=\"codespan\">v4</code>)升级到 echarts 5.x(以下简称 <code class=\"codespan\">v5</code>)的用户。大家可以在 <a href=\"tutorial.html#ECharts%205%20新特性\" target=\"_blank\">ECharts 5 新特性</a> 中了解这次<code class=\"codespan\">v5</code>带来了哪些值得升级的新特性。在绝大多数情况下,开发者用不着为这个升级做什么额外的事,因为 echarts 一直尽可能地保持 API 的稳定和向后兼容。但是,<code class=\"codespan\">v5</code> 仍然带来了一些非兼容改动,需要特别关注。此外,在一些情况下,<code class=\"codespan\">v5</code> 提供了更好的 API 用来取代之前的 API,这些被取代的 API 将不再被推荐使用(当然,我们尽量兼容了这些改动)。我们会在这篇文档里尽量详尽得解释这些改动。</p>\n<p>因为我们在 <code class=\"codespan\">v5.0.1</code> 增加了新的<a href=\"tutorial.html#%E5%9C%A8%E6%89%93%E5%8C%85%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8%20ECharts\" target=\"_blank\">按需引入接口</a>,所以本文档基于 <code class=\"codespan\">v5.0.1</code> 或者更高的版本。</p>\n<h2 id=\"-\">非兼容性改变</h2>\n<h4 id=\"-theme-\">默认主题(theme)</h4>\n<p>首先是默认主题的改动,<code class=\"codespan\">v5</code> 在配色等主题设计上做了很多的优化来达到更好的视觉效果。如果大家依旧想保留旧版本的颜色,可以手动声明颜色,如下:</p>\n<pre><code class=\"lang-js\">chart.setOption({\n    color: [\n        &#39;#c23531&#39;, &#39;#2f4554&#39;, &#39;#61a0a8&#39;, &#39;#d48265&#39;, &#39;#91c7ae&#39;, &#39;#749f83&#39;,\n        &#39;#ca8622&#39;, &#39;#bda29a&#39;, &#39;#6e7074&#39;, &#39;#546570&#39;, &#39;#c4ccd3&#39;\n    ],\n    // ...\n});\n</code></pre>\n<p>或者,做一个简单的 <code class=\"codespan\">v4</code> 主题:</p>\n<pre><code class=\"lang-js\">var themeEC4 = {\n    color: [\n        &#39;#c23531&#39;, &#39;#2f4554&#39;, &#39;#61a0a8&#39;, &#39;#d48265&#39;, &#39;#91c7ae&#39;, &#39;#749f83&#39;,\n        &#39;#ca8622&#39;, &#39;#bda29a&#39;, &#39;#6e7074&#39;, &#39;#546570&#39;, &#39;#c4ccd3&#39;\n    ]\n};\nvar chart = echarts.init(dom, themeEC4);\nchart.setOption(/* ... */);\n</code></pre>\n<h4 id=\"-echarts\">引用 ECharts</h4>\n<h5 id=\"-default-exports-\">去除 default exports 的支持</h5>\n<p>如果使用者在 <code class=\"codespan\">v4</code> 中这样引用了 echarts:</p>\n<pre><code class=\"lang-js\">import echarts from &#39;echarts&#39;;\n// 或者按需引入\nimport echarts from &#39;echarts/lib/echarts&#39;;\n</code></pre>\n<p>这两种方式,<code class=\"codespan\">v5</code> 中不再支持了。</p>\n<p>使用者需要如下更改代码解决这个问题:</p>\n<pre><code class=\"lang-js\">import * as echarts from &#39;echarts&#39;;\n// 按需引入\nimport * as echarts from &#39;echarts/lib/echarts&#39;;\n</code></pre>\n<h5 id=\"-\">按需引入</h5>\n<p>在 5.0.1 中,我们引入了新的<a href=\"tutorial.html#%E5%9C%A8%E6%89%93%E5%8C%85%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8%20ECharts\" target=\"_blank\">按需引入接口</a></p>\n<pre><code class=\"lang-js\">import * as echarts from &#39;echarts/core&#39;;\nimport { BarChart } from &#39;echarts/charts&#39;;\nimport { GridComponent } from &#39;echarts/components&#39;;\n// 注意,新的接口中默认不再包含 Canvas 渲染器,需要显示引入,如果需要使用 SVG 渲染模式则使用 SVGRenderer\nimport { CanvasRenderer } from &#39;echarts/renderers&#39;;\n\necharts.use([BarChart, GridComponent, CanvasRenderer]);\n</code></pre>\n<p>为了方便大家了解自己的配置项需要引入哪些模块,我们新的示例编辑页面添加了生成按需引入代码的功能,大家可以在示例编辑页的<code class=\"codespan\">完整代码</code>标签下选中按需引入后查看需要引入的模块以及相关代码。</p>\n<p>在大部分情况下,我们都推荐大家尽可能用这套新的按需引入接口,它可以最大程度的利用打包工具 tree-shaking 的能力,并且可以有效解决命名空间冲突的问题而且防止了内部结构的暴露。如果你依旧在使用 CommonJS 的模块写法,之前的方式我们也依旧是支持的:</p>\n<pre><code class=\"lang-js\">const echarts = require(&#39;echarts/lib/echarts&#39;);\nrequire(&#39;echarts/lib/chart/bar&#39;);\nrequire(&#39;echarts/lib/component/grid&#39;);\n</code></pre>\n<p>其次,因为我们的源代码已使用 TypeScript 重写,<code class=\"codespan\">v5</code> 将不再支持从 <code class=\"codespan\">echarts/src</code> 引用文件,需要改为从<code class=\"codespan\">echarts/lib</code>引入。</p>\n<h5 id=\"-\">依赖调整</h5>\n<blockquote>\n<p>注意:该部分只针对为了保证较小的打包体积而是用按需引入接口的开发者,如果是全量引入的不需要关注</p>\n</blockquote>\n<p>为了保证 tree-shaking 后的体积足够小,我们去除了一些之前会默认被打包进来的依赖。比如前面提到的在使用新的按需引入接口的时候,<code class=\"codespan\">CanvasRenderer</code>将不再被默认引入,这样可以保证只需要使用 SVG 渲染模式的时候不会把不需要的 Canvas 渲染代码也一起打包进来,除此之外,还有下面这些依赖的改动:</p>\n<ul>\n<li>在使用折线图,柱状图中不再默认引入直角坐标系组件,因此之前使用下面的引入方式<pre><code class=\"lang-js\">const echarts = require(&#39;echarts/lib/echarts&#39;);\nrequire(&#39;echarts/lib/chart/bar&#39;);\nrequire(&#39;echarts/lib/chart/line&#39;);\n</code></pre>\n需要再单独引入<code class=\"codespan\">grid</code>组件<pre><code class=\"lang-js\">require(&#39;echarts/lib/component/grid&#39;);\n</code></pre>\n</li>\n</ul>\n<p>参考 issue:<a href=\"https://github.com/apache/echarts/issues/14080\" target=\"_blank\">#14080</a>, <a href=\"https://github.com/apache/echarts/issues/13764\" target=\"_blank\">#13764</a></p>\n<ul>\n<li>默认不再引入<code class=\"codespan\">aria</code>组件,如果需要的话可以手动引入。<pre><code class=\"lang-js\">import { AriaComponent } from &#39;echarts/components&#39;;\necharts.use(AriaComponent);\n</code></pre>\n或者:<pre><code class=\"lang-js\">require(&#39;echarts/lib/component/aria&#39;);\n</code></pre>\n</li>\n</ul>\n<h4 id=\"-geojson\">去除内置的 geoJSON</h4>\n<p><code class=\"codespan\">v5</code> 移除了内置的 geoJSON(原先在 <code class=\"codespan\">echarts/map</code> 文件夹下)。这些 geoJSON 文件本就一直来源于第三方。如果使用者仍然需要他们,可以去从老版本中得到,或者自己寻找更合适的数据然后通过 registerMap 接口注册到 ECharts 中。</p>\n<h4 id=\"-\">浏览器兼容性</h4>\n<p><code class=\"codespan\">v5</code> 不再支持 IE8 浏览器。我们不再继续维护和升级之前的 <a href=\"https://github.com/ecomfe/zrender/tree/4.3.2/src/vml\" target=\"_blank\">VML 渲染器</a> 来着实现 IE8 的兼容。如果使用者确实有很强的需求,那么欢迎提 pull request 来升级 VML 渲染器,或者单独维护一个第三方 VML 渲染器,我们从 <code class=\"codespan\">v5.0.1</code> 开始支持注册独立的渲染器了。</p>\n<h4 id=\"echarts-\">ECharts 配置项调整</h4>\n<h5 id=\"-\">视觉样式设置的优先级改变</h5>\n<p><code class=\"codespan\">v5</code> 对调了 <a href=\"option.html#visualMap\" target=\"_blank\">visualMap 组件</a> 和 <a href=\"option.html#series-scatter.itemStyle\" target=\"_blank\">itemStyle</a> | <a href=\"option.html#series-scatter.lineStyle\" target=\"_blank\">lineStyle</a> | <a href=\"option.html#series-scatter.areaStyle\" target=\"_blank\">areaStyle</a> 的视觉样式优先级。</p>\n<p>具体来说,<code class=\"codespan\">v4</code> 中,<a href=\"option.html#visualMap\" target=\"_blank\">visualMap 组件</a> 中生成的视觉样式(如,颜色、图形类型、图形尺寸等)的优先级,比开发者在 <a href=\"option.html#series-scatter.itemStyle\" target=\"_blank\">itemStyle</a> | <a href=\"option.html#series-scatter.lineStyle\" target=\"_blank\">lineStyle</a> | <a href=\"option.html#series-scatter.areaStyle\" target=\"_blank\">areaStyle</a> 中设置的样式的优先级高,也就是说如果他们同时设置的话,前者会生效而后者不会生效。这带来了些麻烦:假如使用者在使用 <a href=\"option.html#visualMap\" target=\"_blank\">visualMap 组件</a> 时,又想针对某个数据项对应的图形,设置 <a href=\"option.html#series-scatter.itemStyle\" target=\"_blank\">itemStyle</a> 样式,则做不到。<code class=\"codespan\">v5</code> 中于是提高了 <a href=\"option.html#series-scatter.itemStyle\" target=\"_blank\">itemStyle</a> | <a href=\"option.html#series-scatter.lineStyle\" target=\"_blank\">lineStyle</a> | <a href=\"option.html#series-scatter.areaStyle\" target=\"_blank\">areaStyle</a> 的优先级,使他们能生效。</p>\n<p>在绝大多处情况下,这个变化并不会带来什么影响。但是为保险起见,使用者在升级 <code class=\"codespan\">v4</code> 到 <code class=\"codespan\">v5</code> 时,还是可以检查下,是否有同时使用 <a href=\"option.html#visualMap\" target=\"_blank\">visualMap</a> 和 <a href=\"option.html#series-scatter.itemStyle\" target=\"_blank\">itemStyle</a> | <a href=\"option.html#series-scatter.lineStyle\" target=\"_blank\">lineStyle</a> | <a href=\"option.html#series-scatter.areaStyle\" target=\"_blank\">areaStyle</a> 的情况。</p>\n<h5 id=\"-padding\">富文本的 <code class=\"codespan\">padding</code></h5>\n<p><code class=\"codespan\">v5</code> 调整了 <a href=\"option.html#series-scatter.label.rich.&lt;style_name&gt;.padding\" target=\"_blank\">rich.?.padding</a> 的格式使其更符合 CSS 的规范。<code class=\"codespan\">v4</code> 里,例如 <code class=\"codespan\">rich.?.padding: [11, 22, 33, 44]</code> 表示 <code class=\"codespan\">padding-top</code> 是 <code class=\"codespan\">33</code> 且 <code class=\"codespan\">padding-bottom</code> 是 <code class=\"codespan\">11</code>。在 <code class=\"codespan\">v5</code> 中调整了上下的位置,<code class=\"codespan\">rich.?.padding: [11, 22, 33, 44]</code> 表示  <code class=\"codespan\">padding-top</code> 是 <code class=\"codespan\">11</code> 且 <code class=\"codespan\">padding-bottom</code> 是 <code class=\"codespan\">33</code>。</p>\n<p>如果使用者有在使用 <a href=\"option.html#series-scatter.label.rich.&lt;style_name&gt;.padding\" target=\"_blank\">rich.?.padding</a>,需要注意调整下这个顺序。</p>\n<h2 id=\"echarts-\">ECharts 的相关扩展</h2>\n<p>如果想要升级到 <code class=\"codespan\">v5</code> ,下面这些扩展需要升级到最新的版本实现兼容。</p>\n<ul>\n<li><a href=\"https://github.com/ecomfe/echarts-gl\" target=\"_blank\">echarts-gl</a></li>\n<li><a href=\"https://github.com/ecomfe/echarts-wordcloud\" target=\"_blank\">echarts-wordcloud</a></li>\n<li><a href=\"https://github.com/ecomfe/echarts-liquidfill\" target=\"_blank\">echarts-liquidfill</a></li>\n</ul>\n<h2 id=\"-api\">不再推荐使用的 API</h2>\n<p>一些 API(包括接口调用,事件监听和配置项)在 <code class=\"codespan\">v5</code> 中不再推荐使用。当然,使用者仍然可以用他们,只是会在 dev 模式下,在 console 中打印一些 warning,并不会影响功能。但是从长远维护考虑,我们还是推荐升级成新的 API。</p>\n<p>下面是不再推荐使用的 API 以及推荐的新 API:</p>\n<ul>\n<li>图形元素 transform 相关的属性被改变了:<ul>\n<li>变更点:<ul>\n<li><code class=\"codespan\">position: [number, number]</code> 改为 <code class=\"codespan\">x: number</code> / <code class=\"codespan\">y: number</code>。</li>\n<li><code class=\"codespan\">scale: [number, number]</code> 改为 <code class=\"codespan\">scaleX: number</code> / <code class=\"codespan\">scaleY: number</code>。</li>\n<li><code class=\"codespan\">origin: [number, number]</code> 改为 <code class=\"codespan\">originX: number</code> / <code class=\"codespan\">originY: number</code>。</li>\n</ul>\n</li>\n<li><code class=\"codespan\">position</code>、<code class=\"codespan\">scale</code> 和 <code class=\"codespan\">origin</code> 仍然支持,但已不推荐使用。</li>\n<li>它影响到这些地方:<ul>\n<li>在<code class=\"codespan\">graphic</code>组件中:每个元素的声明。</li>\n<li>在 <code class=\"codespan\">custom series</code> 中:<code class=\"codespan\">renderItem</code> 返回的每个元素的声明。</li>\n<li>直接使用 zrender 图形元素时。</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>Text 相关的属性被改变:<ul>\n<li>变更点:<ul>\n<li>图形元素附带的文本的声明方式被改变:<ul>\n<li>除了 <code class=\"codespan\">Text</code> 元素之外,其他元素中的属性 <code class=\"codespan\">style.text</code> 都不推荐使用了。取而代之的是新属性 <code class=\"codespan\">textContent</code> 和 <code class=\"codespan\">textConfig</code>,他们能带来更丰富的功能。</li>\n<li>其中,下面左边部分的这些属性已不推荐使用或废弃。请使用下面的右边部分的属性:<ul>\n<li>textPosition =&gt; textConfig.position</li>\n<li>textOffset =&gt; textConfig.offset</li>\n<li>textRotation =&gt; textConfig.rotation</li>\n<li>textDistance =&gt; textConfig.distance</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>下面左边部分的属性在 <code class=\"codespan\">style</code> 和 <code class=\"codespan\">style.rich.?</code> 中已不推荐使用或废弃。请使用下面右边的属性:<ul>\n<li>textFill =&gt; fill</li>\n<li>textStroke =&gt; stroke</li>\n<li>textFont =&gt; font</li>\n<li>textStrokeWidth =&gt; lineWidth</li>\n<li>textAlign =&gt; align</li>\n<li>textVerticalAlign =&gt; verticalAlign</li>\n<li>textLineHeight =&gt;</li>\n<li>textWidth =&gt; width</li>\n<li>textHeight =&gt; hight</li>\n<li>textBackgroundColor =&gt; backgroundColor</li>\n<li>textPadding =&gt; padding</li>\n<li>textBorderColor =&gt; borderColor</li>\n<li>textBorderWidth =&gt; borderWidth</li>\n<li>textBorderRadius =&gt; borderRadius</li>\n<li>textBoxShadowColor =&gt; shadowColor</li>\n<li>textBoxShadowBlur =&gt; shadowBlur</li>\n<li>textBoxShadowOffsetX =&gt; shadowOffsetX</li>\n<li>textBoxShadowOffsetY =&gt; shadowOffsetY</li>\n</ul>\n</li>\n<li>注:这些属性并没有变化:<ul>\n<li>textShadowColor</li>\n<li>textShadowBlur</li>\n<li>textShadowOffsetX</li>\n<li>textShadowOffsetY</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>它影响到这些地方:<ul>\n<li>在 <code class=\"codespan\">graphic</code> 组件中:每个元素的声明。(原来的写法仍兼容,但在一些很复杂的情况下,可能效果不完全一致。)</li>\n<li>在自定义系列(<code class=\"codespan\">custom series</code>)中:<code class=\"codespan\">renderItem</code> 返回中的每个元素的声明。(原来的写法仍兼容,但在一些很复杂的情况下,可能效果不完全一致。)</li>\n<li>直接使用 zrender API 创建图形元素。(不再兼容,原写法被废弃。)</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>图表实例上的 API:<ul>\n<li><code class=\"codespan\">chart.one(...)</code> 已不推荐使用。</li>\n</ul>\n</li>\n<li><code class=\"codespan\">label</code>。<ul>\n<li>属性 <code class=\"codespan\">color</code>、<code class=\"codespan\">textBorderColor</code>、<code class=\"codespan\">backgroundColor</code>、<code class=\"codespan\">borderColor</code> 中,值 <code class=\"codespan\">auto</code> 已不推荐使用,而推荐使用 <code class=\"codespan\">&#39;inherit&#39;</code> 代替。</li>\n</ul>\n</li>\n<li><code class=\"codespan\">hoverAnimation</code>:<ul>\n<li>选项 <code class=\"codespan\">series.hoverAnimation</code> 已不推荐使用,使用 <code class=\"codespan\">series.emphasis.scale</code> 代替之。</li>\n</ul>\n</li>\n<li>折线图(<code class=\"codespan\">line series</code>):<ul>\n<li>选项 <code class=\"codespan\">series.clipOverflow</code> 已不推荐使用,使用 <code class=\"codespan\">series.clip</code> 代替之。</li>\n</ul>\n</li>\n<li>自定义系列(<code class=\"codespan\">custom series</code>)。<ul>\n<li>在 <code class=\"codespan\">renderItem</code> 中,<code class=\"codespan\">api.style(...)</code> 和 <code class=\"codespan\">api.styleEmphasis(...)</code> 已不推荐使用。因为这两个接口其实并不真正必要,也很难保证向后兼容。用户可以通过 <code class=\"codespan\">api.visual(...)</code> 获取系统自动分配的视觉信息。</li>\n</ul>\n</li>\n<li>旭日图(<code class=\"codespan\">sunburst</code>):<ul>\n<li>动作类型 <code class=\"codespan\">highlight</code> 已被弃用,请使用 <code class=\"codespan\">sunburstHighlight</code> 代替。</li>\n<li>动作类型 <code class=\"codespan\">downplay</code> 已被弃用,请使用 <code class=\"codespan\">sunburstUnhighlight</code> 代替。</li>\n<li>选项 <code class=\"codespan\">series.downplay</code> 已被弃用,请使用 <code class=\"codespan\">series.blur</code> 代替。</li>\n<li>选项 <code class=\"codespan\">series.highlightPolicy</code> 已不适用,请使用 <code class=\"codespan\">series.emphasis.focus</code> 代替。</li>\n</ul>\n</li>\n<li>饼图(<code class=\"codespan\">pie</code>):<ul>\n<li>下面左边部分的 action 名已经不推荐使用。请使用右边的 action 名。<ul>\n<li><code class=\"codespan\">pieToggleSelect</code> =&gt; <code class=\"codespan\">toggleSelect</code>。</li>\n<li><code class=\"codespan\">pieSelect</code> =&gt; <code class=\"codespan\">select</code>。</li>\n<li><code class=\"codespan\">pieUnSelect</code> =&gt; <code class=\"codespan\">unselect</code>。</li>\n</ul>\n</li>\n<li>下面左边部分的事件名已经不推荐使用。请使用右边的事件名。<ul>\n<li><code class=\"codespan\">pieselectchanged</code> =&gt; <code class=\"codespan\">selectchanged</code>。</li>\n<li><code class=\"codespan\">pieselected</code> =&gt; <code class=\"codespan\">selected</code>。</li>\n<li><code class=\"codespan\">pieunselected</code> =&gt; <code class=\"codespan\">unselected</code>。</li>\n</ul>\n</li>\n<li>选项 <code class=\"codespan\">series.label.margin</code> 已经不推荐使用。使用 <code class=\"codespan\">series.label.edgeDistance</code> 代替。</li>\n<li>选项 <code class=\"codespan\">series.clockWise</code> 已经不推荐使用。使用 <code class=\"codespan\">series.clockwise</code> 代替。</li>\n<li>选项 <code class=\"codespan\">series.hoverOffset</code> 已经不推荐使用。使用 <code class=\"codespan\">series.emphasis.scaleSize</code> 代替。</li>\n</ul>\n</li>\n<li>地图(<code class=\"codespan\">map series</code>):<ul>\n<li>下文左边部分的 action 名已经不推荐使用。请使用右边的 action 名。<ul>\n<li><code class=\"codespan\">mapToggleSelect</code> =&gt; <code class=\"codespan\">toggleSelect</code>。</li>\n<li><code class=\"codespan\">mapSelect</code> =&gt; <code class=\"codespan\">select</code>。</li>\n<li><code class=\"codespan\">mapUnSelect</code> =&gt; <code class=\"codespan\">unselect</code>。</li>\n</ul>\n</li>\n<li>下面左边部分的事件名已经不推荐使用。请使用右边的事件名。<ul>\n<li><code class=\"codespan\">mapselectchanged</code> =&gt; <code class=\"codespan\">selectchanged</code>。</li>\n<li><code class=\"codespan\">mapselected</code> =&gt; <code class=\"codespan\">selected</code>。</li>\n<li><code class=\"codespan\">mapunselected</code> =&gt; <code class=\"codespan\">unselected</code>。</li>\n</ul>\n</li>\n<li>选项 <code class=\"codespan\">series.mapType</code> 已经不推荐使用。使用 <code class=\"codespan\">series.map</code> 代替。</li>\n<li>选项 <code class=\"codespan\">series.mapLocation</code> 已经不推荐使用。</li>\n</ul>\n</li>\n<li>关系图(<code class=\"codespan\">graph series</code>):<ul>\n<li>选项 <code class=\"codespan\">series.focusNodeAdjacency</code> 已经不推荐使用。使用 <code class=\"codespan\">series.emphasis: { focus: &#39;adjacency&#39;}</code> 代替。</li>\n</ul>\n</li>\n<li>仪表盘(<code class=\"codespan\">gauge series</code>):<ul>\n<li>选项 <code class=\"codespan\">series.clockWise</code> 已经不推荐使用。使用 <code class=\"codespan\">series.clockwise</code> 代替。</li>\n<li>选项 <code class=\"codespan\">series.hoverOffset</code> 已经不推荐使用。使用 <code class=\"codespan\">series.emphasis.scaleSize</code> 代替。</li>\n</ul>\n</li>\n<li><code class=\"codespan\">dataZoom</code> 组件:<ul>\n<li>选项 <code class=\"codespan\">dataZoom.handleIcon</code> 如果使用 <code class=\"codespan\">SVGPath</code>,需要前缀 <code class=\"codespan\">path://</code>。</li>\n</ul>\n</li>\n<li>雷达图(<code class=\"codespan\">radar</code>):<ul>\n<li>选项 <code class=\"codespan\">radar.name</code> 已经不推荐使用。使用 <code class=\"codespan\">radar.axisName</code> 代替。</li>\n<li>选项 <code class=\"codespan\">radar.nameGap</code> 已经不推荐使用。使用 <code class=\"codespan\">radar.axisNameGap</code> 代替。</li>\n</ul>\n</li>\n<li>Parse and format:<ul>\n<li><code class=\"codespan\">echarts.format.formatTime</code> 已经不推荐使用。使用 <code class=\"codespan\">echarts.time.format</code> 代替。</li>\n<li><code class=\"codespan\">echarts.number.parseDate</code> 已经不推荐使用。使用 <code class=\"codespan\">echarts.time.parse</code> 代替。</li>\n<li><code class=\"codespan\">echarts.format.getTextRect</code> 已经不推荐使用。</li>\n</ul>\n</li>\n</ul>\n"
diff --git a/zh/documents/tutorial-parts/tutorial.json b/zh/documents/tutorial-parts/tutorial.json
index 0d1b580..63083fb 100644
--- a/zh/documents/tutorial-parts/tutorial.json
+++ b/zh/documents/tutorial-parts/tutorial.json
@@ -3,7 +3,7 @@
     "desc": "<h2 id=\"-echarts\">获取 ECharts</h2>\n<p>你可以通过以下几种方式获取 Apache ECharts<sup>TM</sup>。</p>\n<ul>\n<li><p>从 <a href=\"https://echarts.apache.org/zh/download.html\" target=\"_blank\">Apache ECharts 官网下载界面</a> 获取官方源码包后构建。</p>\n</li>\n<li><p>在 ECharts 的 <a href=\"https://github.com/apache/echarts/releases\" target=\"_blank\">GitHub</a> 获取。</p>\n</li>\n<li><p>通过 npm 获取 echarts,<code class=\"codespan\">npm install echarts --save</code>,详见“<a href=\"tutorial.html#%E5%9C%A8%20webpack%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20ECharts\" target=\"_blank\">在 webpack 中使用 echarts</a>”</p>\n</li>\n<li><p>通过 <a href=\"https://www.jsdelivr.com/package/npm/echarts\" target=\"_blank\">jsDelivr</a> 等 CDN 引入</p>\n</li>\n</ul>\n<h2 id=\"-echarts\">引入 ECharts</h2>\n<p>通过标签方式直接引入构建好的 echarts 文件</p>\n<pre><code class=\"lang-html\">&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n    &lt;meta charset=&quot;utf-8&quot;&gt;\n    &lt;!-- 引入 ECharts 文件 --&gt;\n    &lt;script src=&quot;echarts.min.js&quot;&gt;&lt;/script&gt;\n&lt;/head&gt;\n&lt;/html&gt;\n</code></pre>\n<h2 id=\"-\">绘制一个简单的图表</h2>\n<p>在绘图前我们需要为 ECharts 准备一个具备高宽的 DOM 容器。</p>\n<pre><code>&lt;body&gt;\n    &lt;!-- 为 ECharts 准备一个具备大小(宽高)的 DOM --&gt;\n    &lt;div id=&quot;main&quot; style=&quot;width: 600px;height:400px;&quot;&gt;&lt;/div&gt;\n&lt;/body&gt;\n</code></pre><p>然后就可以通过 <a href=\"api.html#echarts.init\" target=\"_blank\">echarts.init</a> 方法初始化一个 echarts 实例并通过 <a href=\"api.html#echartsInstance.setOption\" target=\"_blank\">setOption</a> 方法生成一个简单的柱状图,下面是完整代码。</p>\n<pre><code class=\"lang-html\">&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n    &lt;meta charset=&quot;utf-8&quot;&gt;\n    &lt;title&gt;ECharts&lt;/title&gt;\n    &lt;!-- 引入 echarts.js --&gt;\n    &lt;script src=&quot;echarts.min.js&quot;&gt;&lt;/script&gt;\n&lt;/head&gt;\n&lt;body&gt;\n    &lt;!-- 为ECharts准备一个具备大小(宽高)的Dom --&gt;\n    &lt;div id=&quot;main&quot; style=&quot;width: 600px;height:400px;&quot;&gt;&lt;/div&gt;\n    &lt;script type=&quot;text/javascript&quot;&gt;\n        // 基于准备好的dom,初始化echarts实例\n        var myChart = echarts.init(document.getElementById(&#39;main&#39;));\n\n        // 指定图表的配置项和数据\n        var option = {\n            title: {\n                text: &#39;ECharts 入门示例&#39;\n            },\n            tooltip: {},\n            legend: {\n                data:[&#39;销量&#39;]\n            },\n            xAxis: {\n                data: [&quot;衬衫&quot;,&quot;羊毛衫&quot;,&quot;雪纺衫&quot;,&quot;裤子&quot;,&quot;高跟鞋&quot;,&quot;袜子&quot;]\n            },\n            yAxis: {},\n            series: [{\n                name: &#39;销量&#39;,\n                type: &#39;bar&#39;,\n                data: [5, 20, 36, 10, 10, 20]\n            }]\n        };\n\n        // 使用刚指定的配置项和数据显示图表。\n        myChart.setOption(option);\n    &lt;/script&gt;\n&lt;/body&gt;\n&lt;/html&gt;\n</code></pre>\n<p>这样你的第一个图表就诞生了!</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/getting-started&reset=1&edit=1\" width=\"600\" height=\"300\" ></iframe>\n\n\n<p>你也可以直接进入 <a href=\"https://echarts.apache.org/examples/zh/editor.html?c=doc-example/getting-started\" target=\"_blank\">ECharts Gallery</a> 中查看编辑示例</p>\n"
   },
   "ECharts 5 新特性": {
-    "desc": "<p><a href=\"https://echarts-5-live.bj.bcebos.com/echarts-5-event.html?ref=ec-tutorial\" target=\"_blank\">\n   <picture>\n      <source type=\"image/webp\" srcset=\"https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/event/20200128-apache-echarts-5.webp\" />\n      <source type=\"image/png\" srcset=\"https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/event/20200128-apache-echarts-5.png\" />\n      <img width=\"700px\" src=\"https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/event/20200128-apache-echarts-5.png\" />\n   </picture>\n</a></p>\n<p>数据可视化在过去的几年中得到了长足的发展。开发者对于可视化产品的期待不再是简单的图表创建工具,而在交互、性能、数据处理等方面有了更高级的需求。</p>\n<p>Apache ECharts 始终致力于让开发者以更方便的方式创造灵活丰富的可视化作品。在最新推出的 Apache ECharts 5,我们着力加强了图表的叙事能力,让开发者可以以更简单的方式,讲述数据背后的故事。</p>\n<p><img src=\"documents/asset/img/feature-v5/echarts-5.png\" width=\"800px\" /></p>\n<p>“表·达”是 Apache ECharts 5 的核心,通过五大模块、十五项特性的全面升级,围绕可视化作品的叙事表达能力,让图“表”更能传“达”数据背后的故事,帮助开发者更轻松地创造满足各种场景需求的可视化作品。</p>\n<h2 id=\"-\">动态叙事</h2>\n<p>动画对于人类认知的重要性不言而喻。在之前的作品中,我们会通过初始化动画和过渡动画帮助用户理解数据变换之间的联系,让图表的出现和变换显得不那么生硬。这次,我们更是大幅度增强了我们的动画叙事能力,。希望能够进一步发挥动画对于用户认知的帮助作用,借助图表的动态叙事功能,帮助用户更容易理解图表背后表达的故事。</p>\n<h4 id=\"-\">动态排序图</h4>\n<p>Apache ECharts 5 新增支持动态排序柱状图(bar-racing)以及动态排序折线图(line-racing),帮助开发者方便地创建带有时序性的图表,展现数据随着时间维度上的变化,讲述数据的演变过程。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=bar-race-country&edit=1&reset=1\" width=\"700\" height=\"400\" ></iframe>\n\n\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=line-race&edit=1&reset=1\" width=\"700\" height=\"400\" ></iframe>\n\n\n<p>动态排序图展现了不同的类目随着时间在排名上的衍变。而开发者只需要通过几行简单的配置项就可以在 ECharts 中开启这样的效果。</p>\n<h4 id=\"-\">自定义系列动画</h4>\n<p>除了动态排序图,Apache ECharts 5 在自定义系列中提供了更加丰富强大的动画效果,支持标签数值文本的插值动画,图形的形变(morph)、分裂(separate)、合并(combine)等效果的过渡动画。</p>\n<p>想象一下,用这些动态效果,你可以创造出多么令人称奇的可视化作品!</p>\n<h2 id=\"-\">视觉设计</h2>\n<p>视觉设计的作用并不仅仅是为了让图表更好看,更重要的是,符合可视化原理的设计可以帮用户更快速地理解图表想表达的内容,并且尽可能消除不良设计带来的误解。</p>\n<h4 id=\"-\">默认设计</h4>\n<p>我们发现,有很大一部分开发者使用了 ECharts 默认的主题样式,因而设计优雅、符合可视化原理的默认主题设计是非常重要的。在 Apache ECharts 5 中,我们重新设计了默认的主题样式,针对不同的系列和组件分别做了优化调整。以主题色为例,我们考量了颜色之间的区分度、与背景色的对比度、相邻颜色的和谐度等因素,并且确保色觉辨识障碍人士也能清楚地区分数据。</p>\n<p><img src=\"documents/asset/img/feature-v5/theme-color.png\" width=\"400px\" /></p>\n<p>我们以最常用的柱状图为例,来看看新版本浅色主题和深色主题的样式:</p>\n<p><img src=\"documents/asset/img/feature-v5/new-theme-light.png\" width=\"500px\" />\n<img src=\"documents/asset/img/feature-v5/new-theme-dark.png\" width=\"500px\" /></p>\n<p>对于数据区域缩放,时间轴等交互组件,我们也设计了全新的样式并且提供了更好的交互体验:</p>\n<p><img src=\"documents/asset/img/feature-v5/dataZoom.png\" width=\"500px\" /></p>\n<p><img src=\"documents/asset/img/feature-v5/timeline.png\" width=\"500px\" /></p>\n<h4 id=\"-\">标签</h4>\n<p>标签是图表中的核心元素之一,清晰而明确的标签可以帮助用户对数据有更准确的理解。Apache ECharts 5 提供了多种新的标签功能,让密集的标签能清晰显示、准确表意。</p>\n<p>Apache ECharts 5 可以通过一个配置项开启自动隐藏重叠的标签。对于超出显示区域的标签,可以选择自动截断或者换行。密集的饼图标签,现在有了更美观的自动排布。</p>\n<p>这些功能可以帮助避免文字过于密集影响可读性。并且,无需开发者编写额外的代码就能默认生效,大大简化了开发者的开发成本。</p>\n<p>我们也提供了多个配置项来让开发者主动控制标签的布局策略,例如标签拖动、整体显示在画布边缘,用引导线和图形元素连接,并且仍可联动高亮表达关联关系。</p>\n<p>新的标签功能可以让你在移动端这样局限的空间内也可以有很优雅的标签展示:</p>\n<p><img src=\"documents/asset/img/feature-v5/pie-label.png\" height=\"150px\" />\n<img src=\"documents/asset/img/feature-v5/pie-label-2.png\" height=\"150px\" /></p>\n<h4 id=\"-\">时间轴</h4>\n<p>Apache ECharts 5 带来了适于表达时间标签刻度的时间轴。时间轴的默认设计更突出重要的信息,并且提供了更灵活的定制化能力,让开发者根据不同的需求定制时间轴的标签内容。</p>\n<p>首先,时间轴不再如之前般绝对平均分割,而是选取年、月、日、整点这类更有意义的点来展示,并且能同时显示不同层级的刻度。标签的 <code class=\"codespan\">formatter</code> 支持了时间模版(例如 <code class=\"codespan\">{yyyy}-{MM}-{dd}</code>),并且可以为不同时间粒度的标签指定不同的 <code class=\"codespan\">formatter</code>,结合已有的富文本标签,可以定制出醒目而多样的时间效果。</p>\n<p>不同的 dataZoom 粒度下时间刻度的显示:</p>\n<p><img src=\"documents/asset/img/feature-v5/time-axis.png\" width=\"600px\" /></p>\n<p><img src=\"documents/asset/img/feature-v5/time-axis-2.png\" width=\"600px\" /></p>\n<h4 id=\"-\">提示框</h4>\n<p>提示框(Tooltip)是一种最常用的可视化组件,可以帮助用户交互式地了解数据的详细信息。在 Apache ECharts 5 中,我们对提示框的样式进行了优化,通过对字体样式,颜色的调整,指向图形的箭头,跟随图形颜色的边框色等功能,让提示框的默认展示优雅又清晰。并且改进了富文本的渲染逻辑,确保显示效果与 HTML 方式一致,让用户在不同场景下可以选择不同的技术方案实现同样的效果。</p>\n<p><img src=\"documents/asset/img/feature-v5/new-tooltip.png\" height=\"200px\" />\n<img src=\"documents/asset/img/feature-v5/new-tooltip-2.png\" height=\"200px\" /></p>\n<p>除此之外,我们这次也加上了提示框内的列表按照数值大小或者类目顺序排序的功能。</p>\n<h4 id=\"-\">仪表盘</h4>\n<p>我们看到社区用户创建了很多酷炫的仪表盘图表,但是他们的配置方式往往比较复杂而取巧。因此,我们对仪表盘的功能作了全面升级,支持了图片或者矢量路径绘制指针、也支持了锚点(anchor)配置项、进度条(progress)、圆角效果等等配置项。</p>\n<p>不同样式的仪表盘指针:</p>\n<p><img src=\"documents/asset/img/feature-v5/gauge-pointer.png\" width=\"600px\" /></p>\n<p>这些升级,不仅可以让开发者用更简单的配置项实现酷炫的效果,而且带来了更丰富的定制能力。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=gauge-clock&edit=1&reset=1\" width=\"600\" height=\"600\" ></iframe>\n\n\n<h4 id=\"-\">扇形圆角</h4>\n<p>圆角可以带来更美观而柔和的视觉,也能够赋予更多的创造力。Apache ECharts 5 支持了饼图、旭日图、矩形树图的扇形圆角。可不要小看了简单的圆角配置项,合理地搭配其他的效果,就可以形成更具个性的的可视化作品。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=sunburst-borderRadius&edit=1&reset=1\" width=\"400\" height=\"400\" ></iframe>\n\n\n\n\n<h2 id=\"-\">交互能力</h2>\n<p>可视化作品的交互能力帮助用户探索了解作品,加深对于图表主旨的理解。</p>\n<h4 id=\"-\">状态管理</h4>\n<p>在 ECharts 4 中有高亮(emphasis)和普通(normal)两个交互的状态,在鼠标移到图形上的时候会进入高亮状态以区分该数据,开发者可以分别设置这两个状态的颜色,阴影等样式。</p>\n<p>这次在 Apache ECharts 5 中,我们在原先的鼠标 hover 高亮的基础上,新增加了<strong>淡出</strong>其它非相关元素的效果,从而可以达到聚焦目标数据的目的。</p>\n<p>比如在这个<a href=\"https://echarts.apache.org/examples/zh/editor.html?c=bar-y-category-stack\" target=\"_blank\">柱状图</a>的例子中,鼠标移到一个系列上的时候,其它非相关的系列就会淡出,从而可以更清晰的突出聚焦系列中数据的对比。在关系图,树图,旭日图,桑基等更复杂数据结构的图上,也可以通过淡出非相关元素来观察数据之间的联系。而且颜色,阴影等在高亮(emphasis)中可以设置的样式,现在也可以在淡出(blur)状态中设置了。</p>\n<p>除此之外,我们为所有系列还添加了<strong>点击选中</strong>这个之前只有在饼图、地图等少数系列中才能开启的交互,开发者可以设置为单选或多选模式,并且通过监听 <code class=\"codespan\">selectchanged</code> 事件获取到选中的所有图形然后进行更进一步的处理。与高亮和淡出一样,选中的样式也可以在 <code class=\"codespan\">select</code> 中配置。</p>\n<h4 id=\"-\">性能提升</h4>\n<h5 id=\"-\">脏矩形渲染</h5>\n<p>Apache ECharts 5 新支持了脏矩形渲染,解决只有局部变化的场景下的性能瓶颈。在使用 Canvas 渲染器时,脏矩形渲染技术探测并只更新视图变化的部分,而不是任何变动都引起画布完全重绘。这能在一些特殊场景下帮助提高渲染帧率,例如在图形很多时候,鼠标频繁触发一些图形高亮的场景。以往这类场景,会使用额外的 Canvas 层以优化性能,但是这种方式不是所有场景都通用,而且对于复杂的样式的效果并不理想。脏矩形渲染很好地同时满足了性能和显示正确。</p>\n<p>脏矩形的可视化演示,红色框选部分为该帧重绘区域:</p>\n<p><img src=\"documents/asset/img/feature-v5/dirty-rect.gif\" width=\"500px\" /></p>\n<p>大家在新的示例页面选择开启脏矩形优化就可以看到该效果。</p>\n<h5 id=\"-\">实时时序数据的折线图性能优化</h5>\n<p>除此之外,海量数据下折线图的性能也有了大幅度的性能提升。我们经常碰到大量的实时时序数据的高性能绘制的需求,这些数据可能需要几百或者几十毫秒更新一次。</p>\n<p>Apache ECharts 5 对这些场景下的 CPU 消耗、内存占用、初始化时间都进行了深度的优化,使得百万量级的数据也能做到实时的更新(每次更新耗时少于 30ms),甚至对于千万级的数据,也可以在 1s 内渲染完,并且保持很小的内存占用以及流畅的提示框(tooltip)等交互。</p>\n<h2 id=\"-\">开发体验</h2>\n<p>我们希望如此强大的可视化工具可以被更多开发者以更简单的方式使用,因而开发者的开发体验也是我们非常关注的方面。</p>\n<h4 id=\"-\">数据集</h4>\n<p>ECharts 5 加强了数据集的数据转换能力,让开发者可以使用简单的方式实现常用的数据处理,如:数据过滤(filter)、排序(sort)、聚合(aggregate)、直方图(histogram)、简单聚类(clustering)、回归线计算(regression)等。开发者可以用统一的声明式方式来使用这些功能,可以方便地实现常用的数据操作。</p>\n<h4 id=\"-\">国际化</h4>\n<p>ECharts 原有的国际化方案,采用的是根据不同的语言参数打包出不同的部署文件的形式。​这种方式,使动态的语言和静态的代码包绑定在一起,使用的时候只能通过重新加载不同语言版本的 ECharts 代码来达到切换语言的目的。</p>\n<p>因此,从 Apache ECharts 5 开始,动态的语言包和静态的代码包分离开。切换语言的时候,只需要加载相应语言包​,通过类似挂载主题的方式,使用 <code class=\"codespan\">registerLocale</code> 函数挂载语言包对象​,重新初始化后就完成了语言的切换​。</p>\n<pre><code class=\"lang-js\">// import the lang object and set when init​\necharts.registerLocale(&#39;DE&#39;, lang);​\necharts.init(DomElement, null, {​\n   locale: &#39;DE&#39;​\n});\n</code></pre>\n<h4 id=\"typescript-\">TypeScript 重构</h4>\n<p>在近 8 年的时间里,Apache ECharts 已经发展成一个非常复杂的可视化库了,为了续可以更安全高效的进行重构和新功能的开发,我们在 Apache ECharts 5 的开发之初,使用 TypeScript 对代码进行了重写,TypeScript 所带来的强类型让我们更有信心地在 ECharts 5 开发的时候对代码进行大刀阔斧的重构以实现更多令人激动人心的特性。</p>\n<p>对于开发者,我们也可以从 TypeScript 代码直接生成更好更符合代码的<code class=\"codespan\">DTS</code>类型描述文件。在此之前,ECharts 的类型描述文件一直是由社区开发者帮我们维护并发布到<a href=\"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/echarts\" target=\"_blank\">DefinityTyped</a>,这个有着不小的工作量,非常感谢大家的贡献。</p>\n<p>除此之外,如果开发者的组件是按需引入的,我们还提供了一个 <code class=\"codespan\">ComposeOption</code> 类型方法,可以组合出一个只包含了引入组件的配置项类型,可以带来更严格的类型检查,帮助你提前检测到未引入的组件类型。</p>\n<h2 id=\"-\">可访问性</h2>\n<p>Apache ECharts 一直非常重视无障碍设计,我们希望让视觉障碍人士也能平等了解图表传递的信息。并且也希望图表的开发者能以极低的开发成本实现这一点,因而有利于让开发者更愿意为视觉障碍人士提供支持。</p>\n<p>在上一个大版本中,我们支持了根据不同的图表类型和数据自动一键智能生成图表描述的功能,帮助开发者非常方便地支持图表的 DOM 描述信息。在 ECharts 5 中,我们也做了更多提高可访问性的设计,帮助视觉障碍人士更好地理解图表内容。</p>\n<h4 id=\"-\">主题配色</h4>\n<p>我们在设计新版默认主题样式的时候,将无障碍设计作为一个重要的考量依据,对颜色的明度和色值都进行反复测试,帮助视觉辨识障碍用户清楚地识别图表数据。​</p>\n<p>并且,针对有更进一步无障碍需求的开发者,我们还提供了特殊的高对比度主题,以更高对比度颜色的主题将数据作进一步区分。</p>\n<h4 id=\"-\">贴花图案</h4>\n<p>ECharts 5 还新增提供了贴花的功能,用图案辅助颜色表达,进一步帮助用户区分数据。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/aria-decal-simple&edit=1&reset=1\" width=\"600\" height=\"350\" ></iframe>\n\n\n<p>此外,贴花图案还能在一些其他的场景下提供帮助,比如:在报纸、书籍之类只有单色或者非常少的颜色的印刷品中,帮助更好地区分数据;用图形元素方便用户对数据产生更直观的理解等。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/aria-decal-newspaper&edit=1&reset=1\" width=\"600\" height=\"350\" ></iframe>\n\n\n\n\n<h2 id=\"-\">小结</h2>\n<p>除了以上介绍的功能,Apache ECharts 还在非常多的细节中做了改进,帮助开发者更轻松地创建默认好用、配置灵活的图表,用图表讲述数据背后的故事。</p>\n<p>感谢所有使用过 ECharts,甚至参与过社区贡献的开发者,正是你们才使得 Apache ECharts 5 成为可能。我们会以更大的热情投入到未来的开发中,Apache ECharts 也会以更大的诚意和大家在 6 相见!</p>\n"
+    "desc": "<p>数据可视化在过去的几年中得到了长足的发展。开发者对于可视化产品的期待不再是简单的图表创建工具,而在交互、性能、数据处理等方面有了更高级的需求。</p>\n<p>Apache ECharts 始终致力于让开发者以更方便的方式创造灵活丰富的可视化作品。在最新推出的 Apache ECharts 5,我们着力加强了图表的叙事能力,让开发者可以以更简单的方式,讲述数据背后的故事。</p>\n<p><img src=\"documents/asset/img/feature-v5/echarts-5.png\" width=\"800px\" /></p>\n<p>“表·达”是 Apache ECharts 5 的核心,通过五大模块、十五项特性的全面升级,围绕可视化作品的叙事表达能力,让图“表”更能传“达”数据背后的故事,帮助开发者更轻松地创造满足各种场景需求的可视化作品。</p>\n<h2 id=\"-\">动态叙事</h2>\n<p>动画对于人类认知的重要性不言而喻。在之前的作品中,我们会通过初始化动画和过渡动画帮助用户理解数据变换之间的联系,让图表的出现和变换显得不那么生硬。这次,我们更是大幅度增强了我们的动画叙事能力,。希望能够进一步发挥动画对于用户认知的帮助作用,借助图表的动态叙事功能,帮助用户更容易理解图表背后表达的故事。</p>\n<h4 id=\"-\">动态排序图</h4>\n<p>Apache ECharts 5 新增支持动态排序柱状图(bar-racing)以及动态排序折线图(line-racing),帮助开发者方便地创建带有时序性的图表,展现数据随着时间维度上的变化,讲述数据的演变过程。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=bar-race-country&edit=1&reset=1\" width=\"700\" height=\"400\" ></iframe>\n\n\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=line-race&edit=1&reset=1\" width=\"700\" height=\"400\" ></iframe>\n\n\n<p>动态排序图展现了不同的类目随着时间在排名上的衍变。而开发者只需要通过几行简单的配置项就可以在 ECharts 中开启这样的效果。</p>\n<h4 id=\"-\">自定义系列动画</h4>\n<p>除了动态排序图,Apache ECharts 5 在自定义系列中提供了更加丰富强大的动画效果,支持标签数值文本的插值动画,图形的形变(morph)、分裂(separate)、合并(combine)等效果的过渡动画。</p>\n<p>想象一下,用这些动态效果,你可以创造出多么令人称奇的可视化作品!</p>\n<h2 id=\"-\">视觉设计</h2>\n<p>视觉设计的作用并不仅仅是为了让图表更好看,更重要的是,符合可视化原理的设计可以帮用户更快速地理解图表想表达的内容,并且尽可能消除不良设计带来的误解。</p>\n<h4 id=\"-\">默认设计</h4>\n<p>我们发现,有很大一部分开发者使用了 ECharts 默认的主题样式,因而设计优雅、符合可视化原理的默认主题设计是非常重要的。在 Apache ECharts 5 中,我们重新设计了默认的主题样式,针对不同的系列和组件分别做了优化调整。以主题色为例,我们考量了颜色之间的区分度、与背景色的对比度、相邻颜色的和谐度等因素,并且确保色觉辨识障碍人士也能清楚地区分数据。</p>\n<p><img src=\"documents/asset/img/feature-v5/theme-color.png\" width=\"400px\" /></p>\n<p>我们以最常用的柱状图为例,来看看新版本浅色主题和深色主题的样式:</p>\n<p><img src=\"documents/asset/img/feature-v5/new-theme-light.png\" width=\"500px\" />\n<img src=\"documents/asset/img/feature-v5/new-theme-dark.png\" width=\"500px\" /></p>\n<p>对于数据区域缩放,时间轴等交互组件,我们也设计了全新的样式并且提供了更好的交互体验:</p>\n<p><img src=\"documents/asset/img/feature-v5/dataZoom.png\" width=\"500px\" /></p>\n<p><img src=\"documents/asset/img/feature-v5/timeline.png\" width=\"500px\" /></p>\n<h4 id=\"-\">标签</h4>\n<p>标签是图表中的核心元素之一,清晰而明确的标签可以帮助用户对数据有更准确的理解。Apache ECharts 5 提供了多种新的标签功能,让密集的标签能清晰显示、准确表意。</p>\n<p>Apache ECharts 5 可以通过一个配置项开启自动隐藏重叠的标签。对于超出显示区域的标签,可以选择自动截断或者换行。密集的饼图标签,现在有了更美观的自动排布。</p>\n<p>这些功能可以帮助避免文字过于密集影响可读性。并且,无需开发者编写额外的代码就能默认生效,大大简化了开发者的开发成本。</p>\n<p>我们也提供了多个配置项来让开发者主动控制标签的布局策略,例如标签拖动、整体显示在画布边缘,用引导线和图形元素连接,并且仍可联动高亮表达关联关系。</p>\n<p>新的标签功能可以让你在移动端这样局限的空间内也可以有很优雅的标签展示:</p>\n<p><img src=\"documents/asset/img/feature-v5/pie-label.png\" height=\"150px\" />\n<img src=\"documents/asset/img/feature-v5/pie-label-2.png\" height=\"150px\" /></p>\n<h4 id=\"-\">时间轴</h4>\n<p>Apache ECharts 5 带来了适于表达时间标签刻度的时间轴。时间轴的默认设计更突出重要的信息,并且提供了更灵活的定制化能力,让开发者根据不同的需求定制时间轴的标签内容。</p>\n<p>首先,时间轴不再如之前般绝对平均分割,而是选取年、月、日、整点这类更有意义的点来展示,并且能同时显示不同层级的刻度。标签的 <code class=\"codespan\">formatter</code> 支持了时间模版(例如 <code class=\"codespan\">{yyyy}-{MM}-{dd}</code>),并且可以为不同时间粒度的标签指定不同的 <code class=\"codespan\">formatter</code>,结合已有的富文本标签,可以定制出醒目而多样的时间效果。</p>\n<p>不同的 dataZoom 粒度下时间刻度的显示:</p>\n<p><img src=\"documents/asset/img/feature-v5/time-axis.png\" width=\"600px\" /></p>\n<p><img src=\"documents/asset/img/feature-v5/time-axis-2.png\" width=\"600px\" /></p>\n<h4 id=\"-\">提示框</h4>\n<p>提示框(Tooltip)是一种最常用的可视化组件,可以帮助用户交互式地了解数据的详细信息。在 Apache ECharts 5 中,我们对提示框的样式进行了优化,通过对字体样式,颜色的调整,指向图形的箭头,跟随图形颜色的边框色等功能,让提示框的默认展示优雅又清晰。并且改进了富文本的渲染逻辑,确保显示效果与 HTML 方式一致,让用户在不同场景下可以选择不同的技术方案实现同样的效果。</p>\n<p><img src=\"documents/asset/img/feature-v5/new-tooltip.png\" height=\"200px\" />\n<img src=\"documents/asset/img/feature-v5/new-tooltip-2.png\" height=\"200px\" /></p>\n<p>除此之外,我们这次也加上了提示框内的列表按照数值大小或者类目顺序排序的功能。</p>\n<h4 id=\"-\">仪表盘</h4>\n<p>我们看到社区用户创建了很多酷炫的仪表盘图表,但是他们的配置方式往往比较复杂而取巧。因此,我们对仪表盘的功能作了全面升级,支持了图片或者矢量路径绘制指针、也支持了锚点(anchor)配置项、进度条(progress)、圆角效果等等配置项。</p>\n<p>不同样式的仪表盘指针:</p>\n<p><img src=\"documents/asset/img/feature-v5/gauge-pointer.png\" width=\"600px\" /></p>\n<p>这些升级,不仅可以让开发者用更简单的配置项实现酷炫的效果,而且带来了更丰富的定制能力。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=gauge-clock&edit=1&reset=1\" width=\"600\" height=\"600\" ></iframe>\n\n\n<h4 id=\"-\">扇形圆角</h4>\n<p>圆角可以带来更美观而柔和的视觉,也能够赋予更多的创造力。Apache ECharts 5 支持了饼图、旭日图、矩形树图的扇形圆角。可不要小看了简单的圆角配置项,合理地搭配其他的效果,就可以形成更具个性的的可视化作品。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=sunburst-borderRadius&edit=1&reset=1\" width=\"400\" height=\"400\" ></iframe>\n\n\n\n\n<h2 id=\"-\">交互能力</h2>\n<p>可视化作品的交互能力帮助用户探索了解作品,加深对于图表主旨的理解。</p>\n<h4 id=\"-\">状态管理</h4>\n<p>在 ECharts 4 中有高亮(emphasis)和普通(normal)两个交互的状态,在鼠标移到图形上的时候会进入高亮状态以区分该数据,开发者可以分别设置这两个状态的颜色,阴影等样式。</p>\n<p>这次在 Apache ECharts 5 中,我们在原先的鼠标 hover 高亮的基础上,新增加了<strong>淡出</strong>其它非相关元素的效果,从而可以达到聚焦目标数据的目的。</p>\n<p>比如在这个<a href=\"https://echarts.apache.org/examples/zh/editor.html?c=bar-y-category-stack\" target=\"_blank\">柱状图</a>的例子中,鼠标移到一个系列上的时候,其它非相关的系列就会淡出,从而可以更清晰的突出聚焦系列中数据的对比。在关系图,树图,旭日图,桑基等更复杂数据结构的图上,也可以通过淡出非相关元素来观察数据之间的联系。而且颜色,阴影等在高亮(emphasis)中可以设置的样式,现在也可以在淡出(blur)状态中设置了。</p>\n<p>除此之外,我们为所有系列还添加了<strong>点击选中</strong>这个之前只有在饼图、地图等少数系列中才能开启的交互,开发者可以设置为单选或多选模式,并且通过监听 <code class=\"codespan\">selectchanged</code> 事件获取到选中的所有图形然后进行更进一步的处理。与高亮和淡出一样,选中的样式也可以在 <code class=\"codespan\">select</code> 中配置。</p>\n<h4 id=\"-\">性能提升</h4>\n<h5 id=\"-\">脏矩形渲染</h5>\n<p>Apache ECharts 5 新支持了脏矩形渲染,解决只有局部变化的场景下的性能瓶颈。在使用 Canvas 渲染器时,脏矩形渲染技术探测并只更新视图变化的部分,而不是任何变动都引起画布完全重绘。这能在一些特殊场景下帮助提高渲染帧率,例如在图形很多时候,鼠标频繁触发一些图形高亮的场景。以往这类场景,会使用额外的 Canvas 层以优化性能,但是这种方式不是所有场景都通用,而且对于复杂的样式的效果并不理想。脏矩形渲染很好地同时满足了性能和显示正确。</p>\n<p>脏矩形的可视化演示,红色框选部分为该帧重绘区域:</p>\n<p><img src=\"documents/asset/img/feature-v5/dirty-rect.gif\" width=\"500px\" /></p>\n<p>大家在新的示例页面选择开启脏矩形优化就可以看到该效果。</p>\n<h5 id=\"-\">实时时序数据的折线图性能优化</h5>\n<p>除此之外,海量数据下折线图的性能也有了大幅度的性能提升。我们经常碰到大量的实时时序数据的高性能绘制的需求,这些数据可能需要几百或者几十毫秒更新一次。</p>\n<p>Apache ECharts 5 对这些场景下的 CPU 消耗、内存占用、初始化时间都进行了深度的优化,使得百万量级的数据也能做到实时的更新(每次更新耗时少于 30ms),甚至对于千万级的数据,也可以在 1s 内渲染完,并且保持很小的内存占用以及流畅的提示框(tooltip)等交互。</p>\n<h2 id=\"-\">开发体验</h2>\n<p>我们希望如此强大的可视化工具可以被更多开发者以更简单的方式使用,因而开发者的开发体验也是我们非常关注的方面。</p>\n<h4 id=\"-\">数据集</h4>\n<p>ECharts 5 加强了数据集的数据转换能力,让开发者可以使用简单的方式实现常用的数据处理,如:数据过滤(filter)、排序(sort)、聚合(aggregate)、直方图(histogram)、简单聚类(clustering)、回归线计算(regression)等。开发者可以用统一的声明式方式来使用这些功能,可以方便地实现常用的数据操作。</p>\n<h4 id=\"-\">国际化</h4>\n<p>ECharts 原有的国际化方案,采用的是根据不同的语言参数打包出不同的部署文件的形式。​这种方式,使动态的语言和静态的代码包绑定在一起,使用的时候只能通过重新加载不同语言版本的 ECharts 代码来达到切换语言的目的。</p>\n<p>因此,从 Apache ECharts 5 开始,动态的语言包和静态的代码包分离开。切换语言的时候,只需要加载相应语言包​,通过类似挂载主题的方式,使用 <code class=\"codespan\">registerLocale</code> 函数挂载语言包对象​,重新初始化后就完成了语言的切换​。</p>\n<pre><code class=\"lang-js\">// import the lang object and set when init​\necharts.registerLocale(&#39;DE&#39;, lang);​\necharts.init(DomElement, null, {​\n   locale: &#39;DE&#39;​\n});\n</code></pre>\n<h4 id=\"typescript-\">TypeScript 重构</h4>\n<p>在近 8 年的时间里,Apache ECharts 已经发展成一个非常复杂的可视化库了,为了续可以更安全高效的进行重构和新功能的开发,我们在 Apache ECharts 5 的开发之初,使用 TypeScript 对代码进行了重写,TypeScript 所带来的强类型让我们更有信心地在 ECharts 5 开发的时候对代码进行大刀阔斧的重构以实现更多令人激动人心的特性。</p>\n<p>对于开发者,我们也可以从 TypeScript 代码直接生成更好更符合代码的<code class=\"codespan\">DTS</code>类型描述文件。在此之前,ECharts 的类型描述文件一直是由社区开发者帮我们维护并发布到<a href=\"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/echarts\" target=\"_blank\">DefinityTyped</a>,这个有着不小的工作量,非常感谢大家的贡献。</p>\n<p>除此之外,如果开发者的组件是按需引入的,我们还提供了一个 <code class=\"codespan\">ComposeOption</code> 类型方法,可以组合出一个只包含了引入组件的配置项类型,可以带来更严格的类型检查,帮助你提前检测到未引入的组件类型。</p>\n<h2 id=\"-\">可访问性</h2>\n<p>Apache ECharts 一直非常重视无障碍设计,我们希望让视觉障碍人士也能平等了解图表传递的信息。并且也希望图表的开发者能以极低的开发成本实现这一点,因而有利于让开发者更愿意为视觉障碍人士提供支持。</p>\n<p>在上一个大版本中,我们支持了根据不同的图表类型和数据自动一键智能生成图表描述的功能,帮助开发者非常方便地支持图表的 DOM 描述信息。在 ECharts 5 中,我们也做了更多提高可访问性的设计,帮助视觉障碍人士更好地理解图表内容。</p>\n<h4 id=\"-\">主题配色</h4>\n<p>我们在设计新版默认主题样式的时候,将无障碍设计作为一个重要的考量依据,对颜色的明度和色值都进行反复测试,帮助视觉辨识障碍用户清楚地识别图表数据。​</p>\n<p>并且,针对有更进一步无障碍需求的开发者,我们还提供了特殊的高对比度主题,以更高对比度颜色的主题将数据作进一步区分。</p>\n<h4 id=\"-\">贴花图案</h4>\n<p>ECharts 5 还新增提供了贴花的功能,用图案辅助颜色表达,进一步帮助用户区分数据。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/aria-decal-simple&edit=1&reset=1\" width=\"600\" height=\"350\" ></iframe>\n\n\n<p>此外,贴花图案还能在一些其他的场景下提供帮助,比如:在报纸、书籍之类只有单色或者非常少的颜色的印刷品中,帮助更好地区分数据;用图形元素方便用户对数据产生更直观的理解等。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/aria-decal-newspaper&edit=1&reset=1\" width=\"600\" height=\"350\" ></iframe>\n\n\n\n\n<h2 id=\"-\">小结</h2>\n<p>除了以上介绍的功能,Apache ECharts 还在非常多的细节中做了改进,帮助开发者更轻松地创建默认好用、配置灵活的图表,用图表讲述数据背后的故事。</p>\n<p>感谢所有使用过 ECharts,甚至参与过社区贡献的开发者,正是你们才使得 Apache ECharts 5 成为可能。我们会以更大的热情投入到未来的开发中,Apache ECharts 也会以更大的诚意和大家在 6 相见!</p>\n"
   },
   "ECharts 5 升级指南": {
     "desc": "<p>本指南面向那些希望将 echarts 4.x(以下简称 <code class=\"codespan\">v4</code>)升级到 echarts 5.x(以下简称 <code class=\"codespan\">v5</code>)的用户。大家可以在 <a href=\"tutorial.html#ECharts%205%20新特性\" target=\"_blank\">ECharts 5 新特性</a> 中了解这次<code class=\"codespan\">v5</code>带来了哪些值得升级的新特性。在绝大多数情况下,开发者用不着为这个升级做什么额外的事,因为 echarts 一直尽可能地保持 API 的稳定和向后兼容。但是,<code class=\"codespan\">v5</code> 仍然带来了一些非兼容改动,需要特别关注。此外,在一些情况下,<code class=\"codespan\">v5</code> 提供了更好的 API 用来取代之前的 API,这些被取代的 API 将不再被推荐使用(当然,我们尽量兼容了这些改动)。我们会在这篇文档里尽量详尽得解释这些改动。</p>\n<p>因为我们在 <code class=\"codespan\">v5.0.1</code> 增加了新的<a href=\"tutorial.html#%E5%9C%A8%E6%89%93%E5%8C%85%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8%20ECharts\" target=\"_blank\">按需引入接口</a>,所以本文档基于 <code class=\"codespan\">v5.0.1</code> 或者更高的版本。</p>\n<h2 id=\"-\">非兼容性改变</h2>\n<h4 id=\"-theme-\">默认主题(theme)</h4>\n<p>首先是默认主题的改动,<code class=\"codespan\">v5</code> 在配色等主题设计上做了很多的优化来达到更好的视觉效果。如果大家依旧想保留旧版本的颜色,可以手动声明颜色,如下:</p>\n<pre><code class=\"lang-js\">chart.setOption({\n    color: [\n        &#39;#c23531&#39;, &#39;#2f4554&#39;, &#39;#61a0a8&#39;, &#39;#d48265&#39;, &#39;#91c7ae&#39;, &#39;#749f83&#39;,\n        &#39;#ca8622&#39;, &#39;#bda29a&#39;, &#39;#6e7074&#39;, &#39;#546570&#39;, &#39;#c4ccd3&#39;\n    ],\n    // ...\n});\n</code></pre>\n<p>或者,做一个简单的 <code class=\"codespan\">v4</code> 主题:</p>\n<pre><code class=\"lang-js\">var themeEC4 = {\n    color: [\n        &#39;#c23531&#39;, &#39;#2f4554&#39;, &#39;#61a0a8&#39;, &#39;#d48265&#39;, &#39;#91c7ae&#39;, &#39;#749f83&#39;,\n        &#39;#ca8622&#39;, &#39;#bda29a&#39;, &#39;#6e7074&#39;, &#39;#546570&#39;, &#39;#c4ccd3&#39;\n    ]\n};\nvar chart = echarts.init(dom, themeEC4);\nchart.setOption(/* ... */);\n</code></pre>\n<h4 id=\"-echarts\">引用 ECharts</h4>\n<h5 id=\"-default-exports-\">去除 default exports 的支持</h5>\n<p>如果使用者在 <code class=\"codespan\">v4</code> 中这样引用了 echarts:</p>\n<pre><code class=\"lang-js\">import echarts from &#39;echarts&#39;;\n// 或者按需引入\nimport echarts from &#39;echarts/lib/echarts&#39;;\n</code></pre>\n<p>这两种方式,<code class=\"codespan\">v5</code> 中不再支持了。</p>\n<p>使用者需要如下更改代码解决这个问题:</p>\n<pre><code class=\"lang-js\">import * as echarts from &#39;echarts&#39;;\n// 按需引入\nimport * as echarts from &#39;echarts/lib/echarts&#39;;\n</code></pre>\n<h5 id=\"-\">按需引入</h5>\n<p>在 5.0.1 中,我们引入了新的<a href=\"tutorial.html#%E5%9C%A8%E6%89%93%E5%8C%85%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8%20ECharts\" target=\"_blank\">按需引入接口</a></p>\n<pre><code class=\"lang-js\">import * as echarts from &#39;echarts/core&#39;;\nimport { BarChart } from &#39;echarts/charts&#39;;\nimport { GridComponent } from &#39;echarts/components&#39;;\n// 注意,新的接口中默认不再包含 Canvas 渲染器,需要显示引入,如果需要使用 SVG 渲染模式则使用 SVGRenderer\nimport { CanvasRenderer } from &#39;echarts/renderers&#39;;\n\necharts.use([BarChart, GridComponent, CanvasRenderer]);\n</code></pre>\n<p>为了方便大家了解自己的配置项需要引入哪些模块,我们新的示例编辑页面添加了生成按需引入代码的功能,大家可以在示例编辑页的<code class=\"codespan\">完整代码</code>标签下选中按需引入后查看需要引入的模块以及相关代码。</p>\n<p>在大部分情况下,我们都推荐大家尽可能用这套新的按需引入接口,它可以最大程度的利用打包工具 tree-shaking 的能力,并且可以有效解决命名空间冲突的问题而且防止了内部结构的暴露。如果你依旧在使用 CommonJS 的模块写法,之前的方式我们也依旧是支持的:</p>\n<pre><code class=\"lang-js\">const echarts = require(&#39;echarts/lib/echarts&#39;);\nrequire(&#39;echarts/lib/chart/bar&#39;);\nrequire(&#39;echarts/lib/component/grid&#39;);\n</code></pre>\n<p>其次,因为我们的源代码已使用 TypeScript 重写,<code class=\"codespan\">v5</code> 将不再支持从 <code class=\"codespan\">echarts/src</code> 引用文件,需要改为从<code class=\"codespan\">echarts/lib</code>引入。</p>\n<h5 id=\"-\">依赖调整</h5>\n<blockquote>\n<p>注意:该部分只针对为了保证较小的打包体积而是用按需引入接口的开发者,如果是全量引入的不需要关注</p>\n</blockquote>\n<p>为了保证 tree-shaking 后的体积足够小,我们去除了一些之前会默认被打包进来的依赖。比如前面提到的在使用新的按需引入接口的时候,<code class=\"codespan\">CanvasRenderer</code>将不再被默认引入,这样可以保证只需要使用 SVG 渲染模式的时候不会把不需要的 Canvas 渲染代码也一起打包进来,除此之外,还有下面这些依赖的改动:</p>\n<ul>\n<li>在使用折线图,柱状图中不再默认引入直角坐标系组件,因此之前使用下面的引入方式<pre><code class=\"lang-js\">const echarts = require(&#39;echarts/lib/echarts&#39;);\nrequire(&#39;echarts/lib/chart/bar&#39;);\nrequire(&#39;echarts/lib/chart/line&#39;);\n</code></pre>\n需要再单独引入<code class=\"codespan\">grid</code>组件<pre><code class=\"lang-js\">require(&#39;echarts/lib/component/grid&#39;);\n</code></pre>\n</li>\n</ul>\n<p>参考 issue:<a href=\"https://github.com/apache/echarts/issues/14080\" target=\"_blank\">#14080</a>, <a href=\"https://github.com/apache/echarts/issues/13764\" target=\"_blank\">#13764</a></p>\n<ul>\n<li>默认不再引入<code class=\"codespan\">aria</code>组件,如果需要的话可以手动引入。<pre><code class=\"lang-js\">import { AriaComponent } from &#39;echarts/components&#39;;\necharts.use(AriaComponent);\n</code></pre>\n或者:<pre><code class=\"lang-js\">require(&#39;echarts/lib/component/aria&#39;);\n</code></pre>\n</li>\n</ul>\n<h4 id=\"-geojson\">去除内置的 geoJSON</h4>\n<p><code class=\"codespan\">v5</code> 移除了内置的 geoJSON(原先在 <code class=\"codespan\">echarts/map</code> 文件夹下)。这些 geoJSON 文件本就一直来源于第三方。如果使用者仍然需要他们,可以去从老版本中得到,或者自己寻找更合适的数据然后通过 registerMap 接口注册到 ECharts 中。</p>\n<h4 id=\"-\">浏览器兼容性</h4>\n<p><code class=\"codespan\">v5</code> 不再支持 IE8 浏览器。我们不再继续维护和升级之前的 <a href=\"https://github.com/ecomfe/zrender/tree/4.3.2/src/vml\" target=\"_blank\">VML 渲染器</a> 来着实现 IE8 的兼容。如果使用者确实有很强的需求,那么欢迎提 pull request 来升级 VML 渲染器,或者单独维护一个第三方 VML 渲染器,我们从 <code class=\"codespan\">v5.0.1</code> 开始支持注册独立的渲染器了。</p>\n<h4 id=\"echarts-\">ECharts 配置项调整</h4>\n<h5 id=\"-\">视觉样式设置的优先级改变</h5>\n<p><code class=\"codespan\">v5</code> 对调了 <a href=\"option.html#visualMap\" target=\"_blank\">visualMap 组件</a> 和 <a href=\"option.html#series-scatter.itemStyle\" target=\"_blank\">itemStyle</a> | <a href=\"option.html#series-scatter.lineStyle\" target=\"_blank\">lineStyle</a> | <a href=\"option.html#series-scatter.areaStyle\" target=\"_blank\">areaStyle</a> 的视觉样式优先级。</p>\n<p>具体来说,<code class=\"codespan\">v4</code> 中,<a href=\"option.html#visualMap\" target=\"_blank\">visualMap 组件</a> 中生成的视觉样式(如,颜色、图形类型、图形尺寸等)的优先级,比开发者在 <a href=\"option.html#series-scatter.itemStyle\" target=\"_blank\">itemStyle</a> | <a href=\"option.html#series-scatter.lineStyle\" target=\"_blank\">lineStyle</a> | <a href=\"option.html#series-scatter.areaStyle\" target=\"_blank\">areaStyle</a> 中设置的样式的优先级高,也就是说如果他们同时设置的话,前者会生效而后者不会生效。这带来了些麻烦:假如使用者在使用 <a href=\"option.html#visualMap\" target=\"_blank\">visualMap 组件</a> 时,又想针对某个数据项对应的图形,设置 <a href=\"option.html#series-scatter.itemStyle\" target=\"_blank\">itemStyle</a> 样式,则做不到。<code class=\"codespan\">v5</code> 中于是提高了 <a href=\"option.html#series-scatter.itemStyle\" target=\"_blank\">itemStyle</a> | <a href=\"option.html#series-scatter.lineStyle\" target=\"_blank\">lineStyle</a> | <a href=\"option.html#series-scatter.areaStyle\" target=\"_blank\">areaStyle</a> 的优先级,使他们能生效。</p>\n<p>在绝大多处情况下,这个变化并不会带来什么影响。但是为保险起见,使用者在升级 <code class=\"codespan\">v4</code> 到 <code class=\"codespan\">v5</code> 时,还是可以检查下,是否有同时使用 <a href=\"option.html#visualMap\" target=\"_blank\">visualMap</a> 和 <a href=\"option.html#series-scatter.itemStyle\" target=\"_blank\">itemStyle</a> | <a href=\"option.html#series-scatter.lineStyle\" target=\"_blank\">lineStyle</a> | <a href=\"option.html#series-scatter.areaStyle\" target=\"_blank\">areaStyle</a> 的情况。</p>\n<h5 id=\"-padding\">富文本的 <code class=\"codespan\">padding</code></h5>\n<p><code class=\"codespan\">v5</code> 调整了 <a href=\"option.html#series-scatter.label.rich.&lt;style_name&gt;.padding\" target=\"_blank\">rich.?.padding</a> 的格式使其更符合 CSS 的规范。<code class=\"codespan\">v4</code> 里,例如 <code class=\"codespan\">rich.?.padding: [11, 22, 33, 44]</code> 表示 <code class=\"codespan\">padding-top</code> 是 <code class=\"codespan\">33</code> 且 <code class=\"codespan\">padding-bottom</code> 是 <code class=\"codespan\">11</code>。在 <code class=\"codespan\">v5</code> 中调整了上下的位置,<code class=\"codespan\">rich.?.padding: [11, 22, 33, 44]</code> 表示  <code class=\"codespan\">padding-top</code> 是 <code class=\"codespan\">11</code> 且 <code class=\"codespan\">padding-bottom</code> 是 <code class=\"codespan\">33</code>。</p>\n<p>如果使用者有在使用 <a href=\"option.html#series-scatter.label.rich.&lt;style_name&gt;.padding\" target=\"_blank\">rich.?.padding</a>,需要注意调整下这个顺序。</p>\n<h2 id=\"echarts-\">ECharts 的相关扩展</h2>\n<p>如果想要升级到 <code class=\"codespan\">v5</code> ,下面这些扩展需要升级到最新的版本实现兼容。</p>\n<ul>\n<li><a href=\"https://github.com/ecomfe/echarts-gl\" target=\"_blank\">echarts-gl</a></li>\n<li><a href=\"https://github.com/ecomfe/echarts-wordcloud\" target=\"_blank\">echarts-wordcloud</a></li>\n<li><a href=\"https://github.com/ecomfe/echarts-liquidfill\" target=\"_blank\">echarts-liquidfill</a></li>\n</ul>\n<h2 id=\"-api\">不再推荐使用的 API</h2>\n<p>一些 API(包括接口调用,事件监听和配置项)在 <code class=\"codespan\">v5</code> 中不再推荐使用。当然,使用者仍然可以用他们,只是会在 dev 模式下,在 console 中打印一些 warning,并不会影响功能。但是从长远维护考虑,我们还是推荐升级成新的 API。</p>\n<p>下面是不再推荐使用的 API 以及推荐的新 API:</p>\n<ul>\n<li>图形元素 transform 相关的属性被改变了:<ul>\n<li>变更点:<ul>\n<li><code class=\"codespan\">position: [number, number]</code> 改为 <code class=\"codespan\">x: number</code> / <code class=\"codespan\">y: number</code>。</li>\n<li><code class=\"codespan\">scale: [number, number]</code> 改为 <code class=\"codespan\">scaleX: number</code> / <code class=\"codespan\">scaleY: number</code>。</li>\n<li><code class=\"codespan\">origin: [number, number]</code> 改为 <code class=\"codespan\">originX: number</code> / <code class=\"codespan\">originY: number</code>。</li>\n</ul>\n</li>\n<li><code class=\"codespan\">position</code>、<code class=\"codespan\">scale</code> 和 <code class=\"codespan\">origin</code> 仍然支持,但已不推荐使用。</li>\n<li>它影响到这些地方:<ul>\n<li>在<code class=\"codespan\">graphic</code>组件中:每个元素的声明。</li>\n<li>在 <code class=\"codespan\">custom series</code> 中:<code class=\"codespan\">renderItem</code> 返回的每个元素的声明。</li>\n<li>直接使用 zrender 图形元素时。</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>Text 相关的属性被改变:<ul>\n<li>变更点:<ul>\n<li>图形元素附带的文本的声明方式被改变:<ul>\n<li>除了 <code class=\"codespan\">Text</code> 元素之外,其他元素中的属性 <code class=\"codespan\">style.text</code> 都不推荐使用了。取而代之的是新属性 <code class=\"codespan\">textContent</code> 和 <code class=\"codespan\">textConfig</code>,他们能带来更丰富的功能。</li>\n<li>其中,下面左边部分的这些属性已不推荐使用或废弃。请使用下面的右边部分的属性:<ul>\n<li>textPosition =&gt; textConfig.position</li>\n<li>textOffset =&gt; textConfig.offset</li>\n<li>textRotation =&gt; textConfig.rotation</li>\n<li>textDistance =&gt; textConfig.distance</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>下面左边部分的属性在 <code class=\"codespan\">style</code> 和 <code class=\"codespan\">style.rich.?</code> 中已不推荐使用或废弃。请使用下面右边的属性:<ul>\n<li>textFill =&gt; fill</li>\n<li>textStroke =&gt; stroke</li>\n<li>textFont =&gt; font</li>\n<li>textStrokeWidth =&gt; lineWidth</li>\n<li>textAlign =&gt; align</li>\n<li>textVerticalAlign =&gt; verticalAlign</li>\n<li>textLineHeight =&gt;</li>\n<li>textWidth =&gt; width</li>\n<li>textHeight =&gt; hight</li>\n<li>textBackgroundColor =&gt; backgroundColor</li>\n<li>textPadding =&gt; padding</li>\n<li>textBorderColor =&gt; borderColor</li>\n<li>textBorderWidth =&gt; borderWidth</li>\n<li>textBorderRadius =&gt; borderRadius</li>\n<li>textBoxShadowColor =&gt; shadowColor</li>\n<li>textBoxShadowBlur =&gt; shadowBlur</li>\n<li>textBoxShadowOffsetX =&gt; shadowOffsetX</li>\n<li>textBoxShadowOffsetY =&gt; shadowOffsetY</li>\n</ul>\n</li>\n<li>注:这些属性并没有变化:<ul>\n<li>textShadowColor</li>\n<li>textShadowBlur</li>\n<li>textShadowOffsetX</li>\n<li>textShadowOffsetY</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>它影响到这些地方:<ul>\n<li>在 <code class=\"codespan\">graphic</code> 组件中:每个元素的声明。(原来的写法仍兼容,但在一些很复杂的情况下,可能效果不完全一致。)</li>\n<li>在自定义系列(<code class=\"codespan\">custom series</code>)中:<code class=\"codespan\">renderItem</code> 返回中的每个元素的声明。(原来的写法仍兼容,但在一些很复杂的情况下,可能效果不完全一致。)</li>\n<li>直接使用 zrender API 创建图形元素。(不再兼容,原写法被废弃。)</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>图表实例上的 API:<ul>\n<li><code class=\"codespan\">chart.one(...)</code> 已不推荐使用。</li>\n</ul>\n</li>\n<li><code class=\"codespan\">label</code>。<ul>\n<li>属性 <code class=\"codespan\">color</code>、<code class=\"codespan\">textBorderColor</code>、<code class=\"codespan\">backgroundColor</code>、<code class=\"codespan\">borderColor</code> 中,值 <code class=\"codespan\">auto</code> 已不推荐使用,而推荐使用 <code class=\"codespan\">&#39;inherit&#39;</code> 代替。</li>\n</ul>\n</li>\n<li><code class=\"codespan\">hoverAnimation</code>:<ul>\n<li>选项 <code class=\"codespan\">series.hoverAnimation</code> 已不推荐使用,使用 <code class=\"codespan\">series.emphasis.scale</code> 代替之。</li>\n</ul>\n</li>\n<li>折线图(<code class=\"codespan\">line series</code>):<ul>\n<li>选项 <code class=\"codespan\">series.clipOverflow</code> 已不推荐使用,使用 <code class=\"codespan\">series.clip</code> 代替之。</li>\n</ul>\n</li>\n<li>自定义系列(<code class=\"codespan\">custom series</code>)。<ul>\n<li>在 <code class=\"codespan\">renderItem</code> 中,<code class=\"codespan\">api.style(...)</code> 和 <code class=\"codespan\">api.styleEmphasis(...)</code> 已不推荐使用。因为这两个接口其实并不真正必要,也很难保证向后兼容。用户可以通过 <code class=\"codespan\">api.visual(...)</code> 获取系统自动分配的视觉信息。</li>\n</ul>\n</li>\n<li>旭日图(<code class=\"codespan\">sunburst</code>):<ul>\n<li>动作类型 <code class=\"codespan\">highlight</code> 已被弃用,请使用 <code class=\"codespan\">sunburstHighlight</code> 代替。</li>\n<li>动作类型 <code class=\"codespan\">downplay</code> 已被弃用,请使用 <code class=\"codespan\">sunburstUnhighlight</code> 代替。</li>\n<li>选项 <code class=\"codespan\">series.downplay</code> 已被弃用,请使用 <code class=\"codespan\">series.blur</code> 代替。</li>\n<li>选项 <code class=\"codespan\">series.highlightPolicy</code> 已不适用,请使用 <code class=\"codespan\">series.emphasis.focus</code> 代替。</li>\n</ul>\n</li>\n<li>饼图(<code class=\"codespan\">pie</code>):<ul>\n<li>下面左边部分的 action 名已经不推荐使用。请使用右边的 action 名。<ul>\n<li><code class=\"codespan\">pieToggleSelect</code> =&gt; <code class=\"codespan\">toggleSelect</code>。</li>\n<li><code class=\"codespan\">pieSelect</code> =&gt; <code class=\"codespan\">select</code>。</li>\n<li><code class=\"codespan\">pieUnSelect</code> =&gt; <code class=\"codespan\">unselect</code>。</li>\n</ul>\n</li>\n<li>下面左边部分的事件名已经不推荐使用。请使用右边的事件名。<ul>\n<li><code class=\"codespan\">pieselectchanged</code> =&gt; <code class=\"codespan\">selectchanged</code>。</li>\n<li><code class=\"codespan\">pieselected</code> =&gt; <code class=\"codespan\">selected</code>。</li>\n<li><code class=\"codespan\">pieunselected</code> =&gt; <code class=\"codespan\">unselected</code>。</li>\n</ul>\n</li>\n<li>选项 <code class=\"codespan\">series.label.margin</code> 已经不推荐使用。使用 <code class=\"codespan\">series.label.edgeDistance</code> 代替。</li>\n<li>选项 <code class=\"codespan\">series.clockWise</code> 已经不推荐使用。使用 <code class=\"codespan\">series.clockwise</code> 代替。</li>\n<li>选项 <code class=\"codespan\">series.hoverOffset</code> 已经不推荐使用。使用 <code class=\"codespan\">series.emphasis.scaleSize</code> 代替。</li>\n</ul>\n</li>\n<li>地图(<code class=\"codespan\">map series</code>):<ul>\n<li>下文左边部分的 action 名已经不推荐使用。请使用右边的 action 名。<ul>\n<li><code class=\"codespan\">mapToggleSelect</code> =&gt; <code class=\"codespan\">toggleSelect</code>。</li>\n<li><code class=\"codespan\">mapSelect</code> =&gt; <code class=\"codespan\">select</code>。</li>\n<li><code class=\"codespan\">mapUnSelect</code> =&gt; <code class=\"codespan\">unselect</code>。</li>\n</ul>\n</li>\n<li>下面左边部分的事件名已经不推荐使用。请使用右边的事件名。<ul>\n<li><code class=\"codespan\">mapselectchanged</code> =&gt; <code class=\"codespan\">selectchanged</code>。</li>\n<li><code class=\"codespan\">mapselected</code> =&gt; <code class=\"codespan\">selected</code>。</li>\n<li><code class=\"codespan\">mapunselected</code> =&gt; <code class=\"codespan\">unselected</code>。</li>\n</ul>\n</li>\n<li>选项 <code class=\"codespan\">series.mapType</code> 已经不推荐使用。使用 <code class=\"codespan\">series.map</code> 代替。</li>\n<li>选项 <code class=\"codespan\">series.mapLocation</code> 已经不推荐使用。</li>\n</ul>\n</li>\n<li>关系图(<code class=\"codespan\">graph series</code>):<ul>\n<li>选项 <code class=\"codespan\">series.focusNodeAdjacency</code> 已经不推荐使用。使用 <code class=\"codespan\">series.emphasis: { focus: &#39;adjacency&#39;}</code> 代替。</li>\n</ul>\n</li>\n<li>仪表盘(<code class=\"codespan\">gauge series</code>):<ul>\n<li>选项 <code class=\"codespan\">series.clockWise</code> 已经不推荐使用。使用 <code class=\"codespan\">series.clockwise</code> 代替。</li>\n<li>选项 <code class=\"codespan\">series.hoverOffset</code> 已经不推荐使用。使用 <code class=\"codespan\">series.emphasis.scaleSize</code> 代替。</li>\n</ul>\n</li>\n<li><code class=\"codespan\">dataZoom</code> 组件:<ul>\n<li>选项 <code class=\"codespan\">dataZoom.handleIcon</code> 如果使用 <code class=\"codespan\">SVGPath</code>,需要前缀 <code class=\"codespan\">path://</code>。</li>\n</ul>\n</li>\n<li>雷达图(<code class=\"codespan\">radar</code>):<ul>\n<li>选项 <code class=\"codespan\">radar.name</code> 已经不推荐使用。使用 <code class=\"codespan\">radar.axisName</code> 代替。</li>\n<li>选项 <code class=\"codespan\">radar.nameGap</code> 已经不推荐使用。使用 <code class=\"codespan\">radar.axisNameGap</code> 代替。</li>\n</ul>\n</li>\n<li>Parse and format:<ul>\n<li><code class=\"codespan\">echarts.format.formatTime</code> 已经不推荐使用。使用 <code class=\"codespan\">echarts.time.format</code> 代替。</li>\n<li><code class=\"codespan\">echarts.number.parseDate</code> 已经不推荐使用。使用 <code class=\"codespan\">echarts.time.parse</code> 代替。</li>\n<li><code class=\"codespan\">echarts.format.getTextRect</code> 已经不推荐使用。</li>\n</ul>\n</li>\n</ul>\n"
diff --git a/zh/documents/tutorial.json b/zh/documents/tutorial.json
index 4be5d02..48c4e5d 100644
--- a/zh/documents/tutorial.json
+++ b/zh/documents/tutorial.json
@@ -1 +1 @@
-{"$schema":"https://echarts.apache.org/doc/json-schem","option":{"type":"Object","properties":{"5 分钟上手 ECharts":{"type":["*"],"description":"<h2 id=\"-echarts\">获取 ECharts</h2>\n<p>你可以通过以下几种方式获取 Apache ECharts<sup>TM</sup>。</p>\n<ul>\n<li><p>从 <a href=\"https://echarts.apache.org/zh/download.html\" target=\"_blank\">Apache ECharts 官网下载界面</a> 获取官方源码包后构建。</p>\n</li>\n<li><p>在 ECharts 的 <a href=\"https://github.com/apache/echarts/releases\" target=\"_blank\">GitHub</a> 获取。</p>\n</li>\n<li><p>通过 npm 获取 echarts,<code class=\"codespan\">npm install echarts --save</code>,详见“<a href=\"tutorial.html#%E5%9C%A8%20webpack%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20ECharts\" target=\"_blank\">在 webpack 中使用 echarts</a>”</p>\n</li>\n<li><p>通过 <a href=\"https://www.jsdelivr.com/package/npm/echarts\" target=\"_blank\">jsDelivr</a> 等 CDN 引入</p>\n</li>\n</ul>\n<h2 id=\"-echarts\">引入 ECharts</h2>\n<p>通过标签方式直接引入构建好的 echarts 文件</p>\n<pre><code class=\"lang-html\">&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n    &lt;meta charset=&quot;utf-8&quot;&gt;\n    &lt;!-- 引入 ECharts 文件 --&gt;\n    &lt;script src=&quot;echarts.min.js&quot;&gt;&lt;/script&gt;\n&lt;/head&gt;\n&lt;/html&gt;\n</code></pre>\n<h2 id=\"-\">绘制一个简单的图表</h2>\n<p>在绘图前我们需要为 ECharts 准备一个具备高宽的 DOM 容器。</p>\n<pre><code>&lt;body&gt;\n    &lt;!-- 为 ECharts 准备一个具备大小(宽高)的 DOM --&gt;\n    &lt;div id=&quot;main&quot; style=&quot;width: 600px;height:400px;&quot;&gt;&lt;/div&gt;\n&lt;/body&gt;\n</code></pre><p>然后就可以通过 <a href=\"api.html#echarts.init\" target=\"_blank\">echarts.init</a> 方法初始化一个 echarts 实例并通过 <a href=\"api.html#echartsInstance.setOption\" target=\"_blank\">setOption</a> 方法生成一个简单的柱状图,下面是完整代码。</p>\n<pre><code class=\"lang-html\">&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n    &lt;meta charset=&quot;utf-8&quot;&gt;\n    &lt;title&gt;ECharts&lt;/title&gt;\n    &lt;!-- 引入 echarts.js --&gt;\n    &lt;script src=&quot;echarts.min.js&quot;&gt;&lt;/script&gt;\n&lt;/head&gt;\n&lt;body&gt;\n    &lt;!-- 为ECharts准备一个具备大小(宽高)的Dom --&gt;\n    &lt;div id=&quot;main&quot; style=&quot;width: 600px;height:400px;&quot;&gt;&lt;/div&gt;\n    &lt;script type=&quot;text/javascript&quot;&gt;\n        // 基于准备好的dom,初始化echarts实例\n        var myChart = echarts.init(document.getElementById(&#39;main&#39;));\n\n        // 指定图表的配置项和数据\n        var option = {\n            title: {\n                text: &#39;ECharts 入门示例&#39;\n            },\n            tooltip: {},\n            legend: {\n                data:[&#39;销量&#39;]\n            },\n            xAxis: {\n                data: [&quot;衬衫&quot;,&quot;羊毛衫&quot;,&quot;雪纺衫&quot;,&quot;裤子&quot;,&quot;高跟鞋&quot;,&quot;袜子&quot;]\n            },\n            yAxis: {},\n            series: [{\n                name: &#39;销量&#39;,\n                type: &#39;bar&#39;,\n                data: [5, 20, 36, 10, 10, 20]\n            }]\n        };\n\n        // 使用刚指定的配置项和数据显示图表。\n        myChart.setOption(option);\n    &lt;/script&gt;\n&lt;/body&gt;\n&lt;/html&gt;\n</code></pre>\n<p>这样你的第一个图表就诞生了!</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/getting-started&reset=1&edit=1\" width=\"600\" height=\"300\" ></iframe>\n\n\n<p>你也可以直接进入 <a href=\"https://echarts.apache.org/examples/zh/editor.html?c=doc-example/getting-started\" target=\"_blank\">ECharts Gallery</a> 中查看编辑示例</p>\n"},"ECharts 5 新特性":{"type":["*"],"description":"<p><a href=\"https://echarts-5-live.bj.bcebos.com/echarts-5-event.html?ref=ec-tutorial\" target=\"_blank\">\n   <picture>\n      <source type=\"image/webp\" srcset=\"https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/event/20200128-apache-echarts-5.webp\" />\n      <source type=\"image/png\" srcset=\"https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/event/20200128-apache-echarts-5.png\" />\n      <img width=\"700px\" src=\"https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/event/20200128-apache-echarts-5.png\" />\n   </picture>\n</a></p>\n<p>数据可视化在过去的几年中得到了长足的发展。开发者对于可视化产品的期待不再是简单的图表创建工具,而在交互、性能、数据处理等方面有了更高级的需求。</p>\n<p>Apache ECharts 始终致力于让开发者以更方便的方式创造灵活丰富的可视化作品。在最新推出的 Apache ECharts 5,我们着力加强了图表的叙事能力,让开发者可以以更简单的方式,讲述数据背后的故事。</p>\n<p><img src=\"documents/asset/img/feature-v5/echarts-5.png\" width=\"800px\" /></p>\n<p>“表·达”是 Apache ECharts 5 的核心,通过五大模块、十五项特性的全面升级,围绕可视化作品的叙事表达能力,让图“表”更能传“达”数据背后的故事,帮助开发者更轻松地创造满足各种场景需求的可视化作品。</p>\n<h2 id=\"-\">动态叙事</h2>\n<p>动画对于人类认知的重要性不言而喻。在之前的作品中,我们会通过初始化动画和过渡动画帮助用户理解数据变换之间的联系,让图表的出现和变换显得不那么生硬。这次,我们更是大幅度增强了我们的动画叙事能力,。希望能够进一步发挥动画对于用户认知的帮助作用,借助图表的动态叙事功能,帮助用户更容易理解图表背后表达的故事。</p>\n<h4 id=\"-\">动态排序图</h4>\n<p>Apache ECharts 5 新增支持动态排序柱状图(bar-racing)以及动态排序折线图(line-racing),帮助开发者方便地创建带有时序性的图表,展现数据随着时间维度上的变化,讲述数据的演变过程。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=bar-race-country&edit=1&reset=1\" width=\"700\" height=\"400\" ></iframe>\n\n\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=line-race&edit=1&reset=1\" width=\"700\" height=\"400\" ></iframe>\n\n\n<p>动态排序图展现了不同的类目随着时间在排名上的衍变。而开发者只需要通过几行简单的配置项就可以在 ECharts 中开启这样的效果。</p>\n<h4 id=\"-\">自定义系列动画</h4>\n<p>除了动态排序图,Apache ECharts 5 在自定义系列中提供了更加丰富强大的动画效果,支持标签数值文本的插值动画,图形的形变(morph)、分裂(separate)、合并(combine)等效果的过渡动画。</p>\n<p>想象一下,用这些动态效果,你可以创造出多么令人称奇的可视化作品!</p>\n<h2 id=\"-\">视觉设计</h2>\n<p>视觉设计的作用并不仅仅是为了让图表更好看,更重要的是,符合可视化原理的设计可以帮用户更快速地理解图表想表达的内容,并且尽可能消除不良设计带来的误解。</p>\n<h4 id=\"-\">默认设计</h4>\n<p>我们发现,有很大一部分开发者使用了 ECharts 默认的主题样式,因而设计优雅、符合可视化原理的默认主题设计是非常重要的。在 Apache ECharts 5 中,我们重新设计了默认的主题样式,针对不同的系列和组件分别做了优化调整。以主题色为例,我们考量了颜色之间的区分度、与背景色的对比度、相邻颜色的和谐度等因素,并且确保色觉辨识障碍人士也能清楚地区分数据。</p>\n<p><img src=\"documents/asset/img/feature-v5/theme-color.png\" width=\"400px\" /></p>\n<p>我们以最常用的柱状图为例,来看看新版本浅色主题和深色主题的样式:</p>\n<p><img src=\"documents/asset/img/feature-v5/new-theme-light.png\" width=\"500px\" />\n<img src=\"documents/asset/img/feature-v5/new-theme-dark.png\" width=\"500px\" /></p>\n<p>对于数据区域缩放,时间轴等交互组件,我们也设计了全新的样式并且提供了更好的交互体验:</p>\n<p><img src=\"documents/asset/img/feature-v5/dataZoom.png\" width=\"500px\" /></p>\n<p><img src=\"documents/asset/img/feature-v5/timeline.png\" width=\"500px\" /></p>\n<h4 id=\"-\">标签</h4>\n<p>标签是图表中的核心元素之一,清晰而明确的标签可以帮助用户对数据有更准确的理解。Apache ECharts 5 提供了多种新的标签功能,让密集的标签能清晰显示、准确表意。</p>\n<p>Apache ECharts 5 可以通过一个配置项开启自动隐藏重叠的标签。对于超出显示区域的标签,可以选择自动截断或者换行。密集的饼图标签,现在有了更美观的自动排布。</p>\n<p>这些功能可以帮助避免文字过于密集影响可读性。并且,无需开发者编写额外的代码就能默认生效,大大简化了开发者的开发成本。</p>\n<p>我们也提供了多个配置项来让开发者主动控制标签的布局策略,例如标签拖动、整体显示在画布边缘,用引导线和图形元素连接,并且仍可联动高亮表达关联关系。</p>\n<p>新的标签功能可以让你在移动端这样局限的空间内也可以有很优雅的标签展示:</p>\n<p><img src=\"documents/asset/img/feature-v5/pie-label.png\" height=\"150px\" />\n<img src=\"documents/asset/img/feature-v5/pie-label-2.png\" height=\"150px\" /></p>\n<h4 id=\"-\">时间轴</h4>\n<p>Apache ECharts 5 带来了适于表达时间标签刻度的时间轴。时间轴的默认设计更突出重要的信息,并且提供了更灵活的定制化能力,让开发者根据不同的需求定制时间轴的标签内容。</p>\n<p>首先,时间轴不再如之前般绝对平均分割,而是选取年、月、日、整点这类更有意义的点来展示,并且能同时显示不同层级的刻度。标签的 <code class=\"codespan\">formatter</code> 支持了时间模版(例如 <code class=\"codespan\">{yyyy}-{MM}-{dd}</code>),并且可以为不同时间粒度的标签指定不同的 <code class=\"codespan\">formatter</code>,结合已有的富文本标签,可以定制出醒目而多样的时间效果。</p>\n<p>不同的 dataZoom 粒度下时间刻度的显示:</p>\n<p><img src=\"documents/asset/img/feature-v5/time-axis.png\" width=\"600px\" /></p>\n<p><img src=\"documents/asset/img/feature-v5/time-axis-2.png\" width=\"600px\" /></p>\n<h4 id=\"-\">提示框</h4>\n<p>提示框(Tooltip)是一种最常用的可视化组件,可以帮助用户交互式地了解数据的详细信息。在 Apache ECharts 5 中,我们对提示框的样式进行了优化,通过对字体样式,颜色的调整,指向图形的箭头,跟随图形颜色的边框色等功能,让提示框的默认展示优雅又清晰。并且改进了富文本的渲染逻辑,确保显示效果与 HTML 方式一致,让用户在不同场景下可以选择不同的技术方案实现同样的效果。</p>\n<p><img src=\"documents/asset/img/feature-v5/new-tooltip.png\" height=\"200px\" />\n<img src=\"documents/asset/img/feature-v5/new-tooltip-2.png\" height=\"200px\" /></p>\n<p>除此之外,我们这次也加上了提示框内的列表按照数值大小或者类目顺序排序的功能。</p>\n<h4 id=\"-\">仪表盘</h4>\n<p>我们看到社区用户创建了很多酷炫的仪表盘图表,但是他们的配置方式往往比较复杂而取巧。因此,我们对仪表盘的功能作了全面升级,支持了图片或者矢量路径绘制指针、也支持了锚点(anchor)配置项、进度条(progress)、圆角效果等等配置项。</p>\n<p>不同样式的仪表盘指针:</p>\n<p><img src=\"documents/asset/img/feature-v5/gauge-pointer.png\" width=\"600px\" /></p>\n<p>这些升级,不仅可以让开发者用更简单的配置项实现酷炫的效果,而且带来了更丰富的定制能力。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=gauge-clock&edit=1&reset=1\" width=\"600\" height=\"600\" ></iframe>\n\n\n<h4 id=\"-\">扇形圆角</h4>\n<p>圆角可以带来更美观而柔和的视觉,也能够赋予更多的创造力。Apache ECharts 5 支持了饼图、旭日图、矩形树图的扇形圆角。可不要小看了简单的圆角配置项,合理地搭配其他的效果,就可以形成更具个性的的可视化作品。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=sunburst-borderRadius&edit=1&reset=1\" width=\"400\" height=\"400\" ></iframe>\n\n\n\n\n<h2 id=\"-\">交互能力</h2>\n<p>可视化作品的交互能力帮助用户探索了解作品,加深对于图表主旨的理解。</p>\n<h4 id=\"-\">状态管理</h4>\n<p>在 ECharts 4 中有高亮(emphasis)和普通(normal)两个交互的状态,在鼠标移到图形上的时候会进入高亮状态以区分该数据,开发者可以分别设置这两个状态的颜色,阴影等样式。</p>\n<p>这次在 Apache ECharts 5 中,我们在原先的鼠标 hover 高亮的基础上,新增加了<strong>淡出</strong>其它非相关元素的效果,从而可以达到聚焦目标数据的目的。</p>\n<p>比如在这个<a href=\"https://echarts.apache.org/examples/zh/editor.html?c=bar-y-category-stack\" target=\"_blank\">柱状图</a>的例子中,鼠标移到一个系列上的时候,其它非相关的系列就会淡出,从而可以更清晰的突出聚焦系列中数据的对比。在关系图,树图,旭日图,桑基等更复杂数据结构的图上,也可以通过淡出非相关元素来观察数据之间的联系。而且颜色,阴影等在高亮(emphasis)中可以设置的样式,现在也可以在淡出(blur)状态中设置了。</p>\n<p>除此之外,我们为所有系列还添加了<strong>点击选中</strong>这个之前只有在饼图、地图等少数系列中才能开启的交互,开发者可以设置为单选或多选模式,并且通过监听 <code class=\"codespan\">selectchanged</code> 事件获取到选中的所有图形然后进行更进一步的处理。与高亮和淡出一样,选中的样式也可以在 <code class=\"codespan\">select</code> 中配置。</p>\n<h4 id=\"-\">性能提升</h4>\n<h5 id=\"-\">脏矩形渲染</h5>\n<p>Apache ECharts 5 新支持了脏矩形渲染,解决只有局部变化的场景下的性能瓶颈。在使用 Canvas 渲染器时,脏矩形渲染技术探测并只更新视图变化的部分,而不是任何变动都引起画布完全重绘。这能在一些特殊场景下帮助提高渲染帧率,例如在图形很多时候,鼠标频繁触发一些图形高亮的场景。以往这类场景,会使用额外的 Canvas 层以优化性能,但是这种方式不是所有场景都通用,而且对于复杂的样式的效果并不理想。脏矩形渲染很好地同时满足了性能和显示正确。</p>\n<p>脏矩形的可视化演示,红色框选部分为该帧重绘区域:</p>\n<p><img src=\"documents/asset/img/feature-v5/dirty-rect.gif\" width=\"500px\" /></p>\n<p>大家在新的示例页面选择开启脏矩形优化就可以看到该效果。</p>\n<h5 id=\"-\">实时时序数据的折线图性能优化</h5>\n<p>除此之外,海量数据下折线图的性能也有了大幅度的性能提升。我们经常碰到大量的实时时序数据的高性能绘制的需求,这些数据可能需要几百或者几十毫秒更新一次。</p>\n<p>Apache ECharts 5 对这些场景下的 CPU 消耗、内存占用、初始化时间都进行了深度的优化,使得百万量级的数据也能做到实时的更新(每次更新耗时少于 30ms),甚至对于千万级的数据,也可以在 1s 内渲染完,并且保持很小的内存占用以及流畅的提示框(tooltip)等交互。</p>\n<h2 id=\"-\">开发体验</h2>\n<p>我们希望如此强大的可视化工具可以被更多开发者以更简单的方式使用,因而开发者的开发体验也是我们非常关注的方面。</p>\n<h4 id=\"-\">数据集</h4>\n<p>ECharts 5 加强了数据集的数据转换能力,让开发者可以使用简单的方式实现常用的数据处理,如:数据过滤(filter)、排序(sort)、聚合(aggregate)、直方图(histogram)、简单聚类(clustering)、回归线计算(regression)等。开发者可以用统一的声明式方式来使用这些功能,可以方便地实现常用的数据操作。</p>\n<h4 id=\"-\">国际化</h4>\n<p>ECharts 原有的国际化方案,采用的是根据不同的语言参数打包出不同的部署文件的形式。​这种方式,使动态的语言和静态的代码包绑定在一起,使用的时候只能通过重新加载不同语言版本的 ECharts 代码来达到切换语言的目的。</p>\n<p>因此,从 Apache ECharts 5 开始,动态的语言包和静态的代码包分离开。切换语言的时候,只需要加载相应语言包​,通过类似挂载主题的方式,使用 <code class=\"codespan\">registerLocale</code> 函数挂载语言包对象​,重新初始化后就完成了语言的切换​。</p>\n<pre><code class=\"lang-js\">// import the lang object and set when init​\necharts.registerLocale(&#39;DE&#39;, lang);​\necharts.init(DomElement, null, {​\n   locale: &#39;DE&#39;​\n});\n</code></pre>\n<h4 id=\"typescript-\">TypeScript 重构</h4>\n<p>在近 8 年的时间里,Apache ECharts 已经发展成一个非常复杂的可视化库了,为了续可以更安全高效的进行重构和新功能的开发,我们在 Apache ECharts 5 的开发之初,使用 TypeScript 对代码进行了重写,TypeScript 所带来的强类型让我们更有信心地在 ECharts 5 开发的时候对代码进行大刀阔斧的重构以实现更多令人激动人心的特性。</p>\n<p>对于开发者,我们也可以从 TypeScript 代码直接生成更好更符合代码的<code class=\"codespan\">DTS</code>类型描述文件。在此之前,ECharts 的类型描述文件一直是由社区开发者帮我们维护并发布到<a href=\"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/echarts\" target=\"_blank\">DefinityTyped</a>,这个有着不小的工作量,非常感谢大家的贡献。</p>\n<p>除此之外,如果开发者的组件是按需引入的,我们还提供了一个 <code class=\"codespan\">ComposeOption</code> 类型方法,可以组合出一个只包含了引入组件的配置项类型,可以带来更严格的类型检查,帮助你提前检测到未引入的组件类型。</p>\n<h2 id=\"-\">可访问性</h2>\n<p>Apache ECharts 一直非常重视无障碍设计,我们希望让视觉障碍人士也能平等了解图表传递的信息。并且也希望图表的开发者能以极低的开发成本实现这一点,因而有利于让开发者更愿意为视觉障碍人士提供支持。</p>\n<p>在上一个大版本中,我们支持了根据不同的图表类型和数据自动一键智能生成图表描述的功能,帮助开发者非常方便地支持图表的 DOM 描述信息。在 ECharts 5 中,我们也做了更多提高可访问性的设计,帮助视觉障碍人士更好地理解图表内容。</p>\n<h4 id=\"-\">主题配色</h4>\n<p>我们在设计新版默认主题样式的时候,将无障碍设计作为一个重要的考量依据,对颜色的明度和色值都进行反复测试,帮助视觉辨识障碍用户清楚地识别图表数据。​</p>\n<p>并且,针对有更进一步无障碍需求的开发者,我们还提供了特殊的高对比度主题,以更高对比度颜色的主题将数据作进一步区分。</p>\n<h4 id=\"-\">贴花图案</h4>\n<p>ECharts 5 还新增提供了贴花的功能,用图案辅助颜色表达,进一步帮助用户区分数据。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/aria-decal-simple&edit=1&reset=1\" width=\"600\" height=\"350\" ></iframe>\n\n\n<p>此外,贴花图案还能在一些其他的场景下提供帮助,比如:在报纸、书籍之类只有单色或者非常少的颜色的印刷品中,帮助更好地区分数据;用图形元素方便用户对数据产生更直观的理解等。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/aria-decal-newspaper&edit=1&reset=1\" width=\"600\" height=\"350\" ></iframe>\n\n\n\n\n<h2 id=\"-\">小结</h2>\n<p>除了以上介绍的功能,Apache ECharts 还在非常多的细节中做了改进,帮助开发者更轻松地创建默认好用、配置灵活的图表,用图表讲述数据背后的故事。</p>\n<p>感谢所有使用过 ECharts,甚至参与过社区贡献的开发者,正是你们才使得 Apache ECharts 5 成为可能。我们会以更大的热情投入到未来的开发中,Apache ECharts 也会以更大的诚意和大家在 6 相见!</p>\n"},"ECharts 5 升级指南":{"type":["*"],"description":"<p>本指南面向那些希望将 echarts 4.x(以下简称 <code class=\"codespan\">v4</code>)升级到 echarts 5.x(以下简称 <code class=\"codespan\">v5</code>)的用户。大家可以在 <a href=\"tutorial.html#ECharts%205%20新特性\" target=\"_blank\">ECharts 5 新特性</a> 中了解这次<code class=\"codespan\">v5</code>带来了哪些值得升级的新特性。在绝大多数情况下,开发者用不着为这个升级做什么额外的事,因为 echarts 一直尽可能地保持 API 的稳定和向后兼容。但是,<code class=\"codespan\">v5</code> 仍然带来了一些非兼容改动,需要特别关注。此外,在一些情况下,<code class=\"codespan\">v5</code> 提供了更好的 API 用来取代之前的 API,这些被取代的 API 将不再被推荐使用(当然,我们尽量兼容了这些改动)。我们会在这篇文档里尽量详尽得解释这些改动。</p>\n<p>因为我们在 <code class=\"codespan\">v5.0.1</code> 增加了新的<a href=\"tutorial.html#%E5%9C%A8%E6%89%93%E5%8C%85%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8%20ECharts\" target=\"_blank\">按需引入接口</a>,所以本文档基于 <code class=\"codespan\">v5.0.1</code> 或者更高的版本。</p>\n<h2 id=\"-\">非兼容性改变</h2>\n<h4 id=\"-theme-\">默认主题(theme)</h4>\n<p>首先是默认主题的改动,<code class=\"codespan\">v5</code> 在配色等主题设计上做了很多的优化来达到更好的视觉效果。如果大家依旧想保留旧版本的颜色,可以手动声明颜色,如下:</p>\n<pre><code class=\"lang-js\">chart.setOption({\n    color: [\n        &#39;#c23531&#39;, &#39;#2f4554&#39;, &#39;#61a0a8&#39;, &#39;#d48265&#39;, &#39;#91c7ae&#39;, &#39;#749f83&#39;,\n        &#39;#ca8622&#39;, &#39;#bda29a&#39;, &#39;#6e7074&#39;, &#39;#546570&#39;, &#39;#c4ccd3&#39;\n    ],\n    // ...\n});\n</code></pre>\n<p>或者,做一个简单的 <code class=\"codespan\">v4</code> 主题:</p>\n<pre><code class=\"lang-js\">var themeEC4 = {\n    color: [\n        &#39;#c23531&#39;, &#39;#2f4554&#39;, &#39;#61a0a8&#39;, &#39;#d48265&#39;, &#39;#91c7ae&#39;, &#39;#749f83&#39;,\n        &#39;#ca8622&#39;, &#39;#bda29a&#39;, &#39;#6e7074&#39;, &#39;#546570&#39;, &#39;#c4ccd3&#39;\n    ]\n};\nvar chart = echarts.init(dom, themeEC4);\nchart.setOption(/* ... */);\n</code></pre>\n<h4 id=\"-echarts\">引用 ECharts</h4>\n<h5 id=\"-default-exports-\">去除 default exports 的支持</h5>\n<p>如果使用者在 <code class=\"codespan\">v4</code> 中这样引用了 echarts:</p>\n<pre><code class=\"lang-js\">import echarts from &#39;echarts&#39;;\n// 或者按需引入\nimport echarts from &#39;echarts/lib/echarts&#39;;\n</code></pre>\n<p>这两种方式,<code class=\"codespan\">v5</code> 中不再支持了。</p>\n<p>使用者需要如下更改代码解决这个问题:</p>\n<pre><code class=\"lang-js\">import * as echarts from &#39;echarts&#39;;\n// 按需引入\nimport * as echarts from &#39;echarts/lib/echarts&#39;;\n</code></pre>\n<h5 id=\"-\">按需引入</h5>\n<p>在 5.0.1 中,我们引入了新的<a href=\"tutorial.html#%E5%9C%A8%E6%89%93%E5%8C%85%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8%20ECharts\" target=\"_blank\">按需引入接口</a></p>\n<pre><code class=\"lang-js\">import * as echarts from &#39;echarts/core&#39;;\nimport { BarChart } from &#39;echarts/charts&#39;;\nimport { GridComponent } from &#39;echarts/components&#39;;\n// 注意,新的接口中默认不再包含 Canvas 渲染器,需要显示引入,如果需要使用 SVG 渲染模式则使用 SVGRenderer\nimport { CanvasRenderer } from &#39;echarts/renderers&#39;;\n\necharts.use([BarChart, GridComponent, CanvasRenderer]);\n</code></pre>\n<p>为了方便大家了解自己的配置项需要引入哪些模块,我们新的示例编辑页面添加了生成按需引入代码的功能,大家可以在示例编辑页的<code class=\"codespan\">完整代码</code>标签下选中按需引入后查看需要引入的模块以及相关代码。</p>\n<p>在大部分情况下,我们都推荐大家尽可能用这套新的按需引入接口,它可以最大程度的利用打包工具 tree-shaking 的能力,并且可以有效解决命名空间冲突的问题而且防止了内部结构的暴露。如果你依旧在使用 CommonJS 的模块写法,之前的方式我们也依旧是支持的:</p>\n<pre><code class=\"lang-js\">const echarts = require(&#39;echarts/lib/echarts&#39;);\nrequire(&#39;echarts/lib/chart/bar&#39;);\nrequire(&#39;echarts/lib/component/grid&#39;);\n</code></pre>\n<p>其次,因为我们的源代码已使用 TypeScript 重写,<code class=\"codespan\">v5</code> 将不再支持从 <code class=\"codespan\">echarts/src</code> 引用文件,需要改为从<code class=\"codespan\">echarts/lib</code>引入。</p>\n<h5 id=\"-\">依赖调整</h5>\n<blockquote>\n<p>注意:该部分只针对为了保证较小的打包体积而是用按需引入接口的开发者,如果是全量引入的不需要关注</p>\n</blockquote>\n<p>为了保证 tree-shaking 后的体积足够小,我们去除了一些之前会默认被打包进来的依赖。比如前面提到的在使用新的按需引入接口的时候,<code class=\"codespan\">CanvasRenderer</code>将不再被默认引入,这样可以保证只需要使用 SVG 渲染模式的时候不会把不需要的 Canvas 渲染代码也一起打包进来,除此之外,还有下面这些依赖的改动:</p>\n<ul>\n<li>在使用折线图,柱状图中不再默认引入直角坐标系组件,因此之前使用下面的引入方式<pre><code class=\"lang-js\">const echarts = require(&#39;echarts/lib/echarts&#39;);\nrequire(&#39;echarts/lib/chart/bar&#39;);\nrequire(&#39;echarts/lib/chart/line&#39;);\n</code></pre>\n需要再单独引入<code class=\"codespan\">grid</code>组件<pre><code class=\"lang-js\">require(&#39;echarts/lib/component/grid&#39;);\n</code></pre>\n</li>\n</ul>\n<p>参考 issue:<a href=\"https://github.com/apache/echarts/issues/14080\" target=\"_blank\">#14080</a>, <a href=\"https://github.com/apache/echarts/issues/13764\" target=\"_blank\">#13764</a></p>\n<ul>\n<li>默认不再引入<code class=\"codespan\">aria</code>组件,如果需要的话可以手动引入。<pre><code class=\"lang-js\">import { AriaComponent } from &#39;echarts/components&#39;;\necharts.use(AriaComponent);\n</code></pre>\n或者:<pre><code class=\"lang-js\">require(&#39;echarts/lib/component/aria&#39;);\n</code></pre>\n</li>\n</ul>\n<h4 id=\"-geojson\">去除内置的 geoJSON</h4>\n<p><code class=\"codespan\">v5</code> 移除了内置的 geoJSON(原先在 <code class=\"codespan\">echarts/map</code> 文件夹下)。这些 geoJSON 文件本就一直来源于第三方。如果使用者仍然需要他们,可以去从老版本中得到,或者自己寻找更合适的数据然后通过 registerMap 接口注册到 ECharts 中。</p>\n<h4 id=\"-\">浏览器兼容性</h4>\n<p><code class=\"codespan\">v5</code> 不再支持 IE8 浏览器。我们不再继续维护和升级之前的 <a href=\"https://github.com/ecomfe/zrender/tree/4.3.2/src/vml\" target=\"_blank\">VML 渲染器</a> 来着实现 IE8 的兼容。如果使用者确实有很强的需求,那么欢迎提 pull request 来升级 VML 渲染器,或者单独维护一个第三方 VML 渲染器,我们从 <code class=\"codespan\">v5.0.1</code> 开始支持注册独立的渲染器了。</p>\n<h4 id=\"echarts-\">ECharts 配置项调整</h4>\n<h5 id=\"-\">视觉样式设置的优先级改变</h5>\n<p><code class=\"codespan\">v5</code> 对调了 <a href=\"option.html#visualMap\" target=\"_blank\">visualMap 组件</a> 和 <a href=\"option.html#series-scatter.itemStyle\" target=\"_blank\">itemStyle</a> | <a href=\"option.html#series-scatter.lineStyle\" target=\"_blank\">lineStyle</a> | <a href=\"option.html#series-scatter.areaStyle\" target=\"_blank\">areaStyle</a> 的视觉样式优先级。</p>\n<p>具体来说,<code class=\"codespan\">v4</code> 中,<a href=\"option.html#visualMap\" target=\"_blank\">visualMap 组件</a> 中生成的视觉样式(如,颜色、图形类型、图形尺寸等)的优先级,比开发者在 <a href=\"option.html#series-scatter.itemStyle\" target=\"_blank\">itemStyle</a> | <a href=\"option.html#series-scatter.lineStyle\" target=\"_blank\">lineStyle</a> | <a href=\"option.html#series-scatter.areaStyle\" target=\"_blank\">areaStyle</a> 中设置的样式的优先级高,也就是说如果他们同时设置的话,前者会生效而后者不会生效。这带来了些麻烦:假如使用者在使用 <a href=\"option.html#visualMap\" target=\"_blank\">visualMap 组件</a> 时,又想针对某个数据项对应的图形,设置 <a href=\"option.html#series-scatter.itemStyle\" target=\"_blank\">itemStyle</a> 样式,则做不到。<code class=\"codespan\">v5</code> 中于是提高了 <a href=\"option.html#series-scatter.itemStyle\" target=\"_blank\">itemStyle</a> | <a href=\"option.html#series-scatter.lineStyle\" target=\"_blank\">lineStyle</a> | <a href=\"option.html#series-scatter.areaStyle\" target=\"_blank\">areaStyle</a> 的优先级,使他们能生效。</p>\n<p>在绝大多处情况下,这个变化并不会带来什么影响。但是为保险起见,使用者在升级 <code class=\"codespan\">v4</code> 到 <code class=\"codespan\">v5</code> 时,还是可以检查下,是否有同时使用 <a href=\"option.html#visualMap\" target=\"_blank\">visualMap</a> 和 <a href=\"option.html#series-scatter.itemStyle\" target=\"_blank\">itemStyle</a> | <a href=\"option.html#series-scatter.lineStyle\" target=\"_blank\">lineStyle</a> | <a href=\"option.html#series-scatter.areaStyle\" target=\"_blank\">areaStyle</a> 的情况。</p>\n<h5 id=\"-padding\">富文本的 <code class=\"codespan\">padding</code></h5>\n<p><code class=\"codespan\">v5</code> 调整了 <a href=\"option.html#series-scatter.label.rich.&lt;style_name&gt;.padding\" target=\"_blank\">rich.?.padding</a> 的格式使其更符合 CSS 的规范。<code class=\"codespan\">v4</code> 里,例如 <code class=\"codespan\">rich.?.padding: [11, 22, 33, 44]</code> 表示 <code class=\"codespan\">padding-top</code> 是 <code class=\"codespan\">33</code> 且 <code class=\"codespan\">padding-bottom</code> 是 <code class=\"codespan\">11</code>。在 <code class=\"codespan\">v5</code> 中调整了上下的位置,<code class=\"codespan\">rich.?.padding: [11, 22, 33, 44]</code> 表示  <code class=\"codespan\">padding-top</code> 是 <code class=\"codespan\">11</code> 且 <code class=\"codespan\">padding-bottom</code> 是 <code class=\"codespan\">33</code>。</p>\n<p>如果使用者有在使用 <a href=\"option.html#series-scatter.label.rich.&lt;style_name&gt;.padding\" target=\"_blank\">rich.?.padding</a>,需要注意调整下这个顺序。</p>\n<h2 id=\"echarts-\">ECharts 的相关扩展</h2>\n<p>如果想要升级到 <code class=\"codespan\">v5</code> ,下面这些扩展需要升级到最新的版本实现兼容。</p>\n<ul>\n<li><a href=\"https://github.com/ecomfe/echarts-gl\" target=\"_blank\">echarts-gl</a></li>\n<li><a href=\"https://github.com/ecomfe/echarts-wordcloud\" target=\"_blank\">echarts-wordcloud</a></li>\n<li><a href=\"https://github.com/ecomfe/echarts-liquidfill\" target=\"_blank\">echarts-liquidfill</a></li>\n</ul>\n<h2 id=\"-api\">不再推荐使用的 API</h2>\n<p>一些 API(包括接口调用,事件监听和配置项)在 <code class=\"codespan\">v5</code> 中不再推荐使用。当然,使用者仍然可以用他们,只是会在 dev 模式下,在 console 中打印一些 warning,并不会影响功能。但是从长远维护考虑,我们还是推荐升级成新的 API。</p>\n<p>下面是不再推荐使用的 API 以及推荐的新 API:</p>\n<ul>\n<li>图形元素 transform 相关的属性被改变了:<ul>\n<li>变更点:<ul>\n<li><code class=\"codespan\">position: [number, number]</code> 改为 <code class=\"codespan\">x: number</code> / <code class=\"codespan\">y: number</code>。</li>\n<li><code class=\"codespan\">scale: [number, number]</code> 改为 <code class=\"codespan\">scaleX: number</code> / <code class=\"codespan\">scaleY: number</code>。</li>\n<li><code class=\"codespan\">origin: [number, number]</code> 改为 <code class=\"codespan\">originX: number</code> / <code class=\"codespan\">originY: number</code>。</li>\n</ul>\n</li>\n<li><code class=\"codespan\">position</code>、<code class=\"codespan\">scale</code> 和 <code class=\"codespan\">origin</code> 仍然支持,但已不推荐使用。</li>\n<li>它影响到这些地方:<ul>\n<li>在<code class=\"codespan\">graphic</code>组件中:每个元素的声明。</li>\n<li>在 <code class=\"codespan\">custom series</code> 中:<code class=\"codespan\">renderItem</code> 返回的每个元素的声明。</li>\n<li>直接使用 zrender 图形元素时。</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>Text 相关的属性被改变:<ul>\n<li>变更点:<ul>\n<li>图形元素附带的文本的声明方式被改变:<ul>\n<li>除了 <code class=\"codespan\">Text</code> 元素之外,其他元素中的属性 <code class=\"codespan\">style.text</code> 都不推荐使用了。取而代之的是新属性 <code class=\"codespan\">textContent</code> 和 <code class=\"codespan\">textConfig</code>,他们能带来更丰富的功能。</li>\n<li>其中,下面左边部分的这些属性已不推荐使用或废弃。请使用下面的右边部分的属性:<ul>\n<li>textPosition =&gt; textConfig.position</li>\n<li>textOffset =&gt; textConfig.offset</li>\n<li>textRotation =&gt; textConfig.rotation</li>\n<li>textDistance =&gt; textConfig.distance</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>下面左边部分的属性在 <code class=\"codespan\">style</code> 和 <code class=\"codespan\">style.rich.?</code> 中已不推荐使用或废弃。请使用下面右边的属性:<ul>\n<li>textFill =&gt; fill</li>\n<li>textStroke =&gt; stroke</li>\n<li>textFont =&gt; font</li>\n<li>textStrokeWidth =&gt; lineWidth</li>\n<li>textAlign =&gt; align</li>\n<li>textVerticalAlign =&gt; verticalAlign</li>\n<li>textLineHeight =&gt;</li>\n<li>textWidth =&gt; width</li>\n<li>textHeight =&gt; hight</li>\n<li>textBackgroundColor =&gt; backgroundColor</li>\n<li>textPadding =&gt; padding</li>\n<li>textBorderColor =&gt; borderColor</li>\n<li>textBorderWidth =&gt; borderWidth</li>\n<li>textBorderRadius =&gt; borderRadius</li>\n<li>textBoxShadowColor =&gt; shadowColor</li>\n<li>textBoxShadowBlur =&gt; shadowBlur</li>\n<li>textBoxShadowOffsetX =&gt; shadowOffsetX</li>\n<li>textBoxShadowOffsetY =&gt; shadowOffsetY</li>\n</ul>\n</li>\n<li>注:这些属性并没有变化:<ul>\n<li>textShadowColor</li>\n<li>textShadowBlur</li>\n<li>textShadowOffsetX</li>\n<li>textShadowOffsetY</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>它影响到这些地方:<ul>\n<li>在 <code class=\"codespan\">graphic</code> 组件中:每个元素的声明。(原来的写法仍兼容,但在一些很复杂的情况下,可能效果不完全一致。)</li>\n<li>在自定义系列(<code class=\"codespan\">custom series</code>)中:<code class=\"codespan\">renderItem</code> 返回中的每个元素的声明。(原来的写法仍兼容,但在一些很复杂的情况下,可能效果不完全一致。)</li>\n<li>直接使用 zrender API 创建图形元素。(不再兼容,原写法被废弃。)</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>图表实例上的 API:<ul>\n<li><code class=\"codespan\">chart.one(...)</code> 已不推荐使用。</li>\n</ul>\n</li>\n<li><code class=\"codespan\">label</code>。<ul>\n<li>属性 <code class=\"codespan\">color</code>、<code class=\"codespan\">textBorderColor</code>、<code class=\"codespan\">backgroundColor</code>、<code class=\"codespan\">borderColor</code> 中,值 <code class=\"codespan\">auto</code> 已不推荐使用,而推荐使用 <code class=\"codespan\">&#39;inherit&#39;</code> 代替。</li>\n</ul>\n</li>\n<li><code class=\"codespan\">hoverAnimation</code>:<ul>\n<li>选项 <code class=\"codespan\">series.hoverAnimation</code> 已不推荐使用,使用 <code class=\"codespan\">series.emphasis.scale</code> 代替之。</li>\n</ul>\n</li>\n<li>折线图(<code class=\"codespan\">line series</code>):<ul>\n<li>选项 <code class=\"codespan\">series.clipOverflow</code> 已不推荐使用,使用 <code class=\"codespan\">series.clip</code> 代替之。</li>\n</ul>\n</li>\n<li>自定义系列(<code class=\"codespan\">custom series</code>)。<ul>\n<li>在 <code class=\"codespan\">renderItem</code> 中,<code class=\"codespan\">api.style(...)</code> 和 <code class=\"codespan\">api.styleEmphasis(...)</code> 已不推荐使用。因为这两个接口其实并不真正必要,也很难保证向后兼容。用户可以通过 <code class=\"codespan\">api.visual(...)</code> 获取系统自动分配的视觉信息。</li>\n</ul>\n</li>\n<li>旭日图(<code class=\"codespan\">sunburst</code>):<ul>\n<li>动作类型 <code class=\"codespan\">highlight</code> 已被弃用,请使用 <code class=\"codespan\">sunburstHighlight</code> 代替。</li>\n<li>动作类型 <code class=\"codespan\">downplay</code> 已被弃用,请使用 <code class=\"codespan\">sunburstUnhighlight</code> 代替。</li>\n<li>选项 <code class=\"codespan\">series.downplay</code> 已被弃用,请使用 <code class=\"codespan\">series.blur</code> 代替。</li>\n<li>选项 <code class=\"codespan\">series.highlightPolicy</code> 已不适用,请使用 <code class=\"codespan\">series.emphasis.focus</code> 代替。</li>\n</ul>\n</li>\n<li>饼图(<code class=\"codespan\">pie</code>):<ul>\n<li>下面左边部分的 action 名已经不推荐使用。请使用右边的 action 名。<ul>\n<li><code class=\"codespan\">pieToggleSelect</code> =&gt; <code class=\"codespan\">toggleSelect</code>。</li>\n<li><code class=\"codespan\">pieSelect</code> =&gt; <code class=\"codespan\">select</code>。</li>\n<li><code class=\"codespan\">pieUnSelect</code> =&gt; <code class=\"codespan\">unselect</code>。</li>\n</ul>\n</li>\n<li>下面左边部分的事件名已经不推荐使用。请使用右边的事件名。<ul>\n<li><code class=\"codespan\">pieselectchanged</code> =&gt; <code class=\"codespan\">selectchanged</code>。</li>\n<li><code class=\"codespan\">pieselected</code> =&gt; <code class=\"codespan\">selected</code>。</li>\n<li><code class=\"codespan\">pieunselected</code> =&gt; <code class=\"codespan\">unselected</code>。</li>\n</ul>\n</li>\n<li>选项 <code class=\"codespan\">series.label.margin</code> 已经不推荐使用。使用 <code class=\"codespan\">series.label.edgeDistance</code> 代替。</li>\n<li>选项 <code class=\"codespan\">series.clockWise</code> 已经不推荐使用。使用 <code class=\"codespan\">series.clockwise</code> 代替。</li>\n<li>选项 <code class=\"codespan\">series.hoverOffset</code> 已经不推荐使用。使用 <code class=\"codespan\">series.emphasis.scaleSize</code> 代替。</li>\n</ul>\n</li>\n<li>地图(<code class=\"codespan\">map series</code>):<ul>\n<li>下文左边部分的 action 名已经不推荐使用。请使用右边的 action 名。<ul>\n<li><code class=\"codespan\">mapToggleSelect</code> =&gt; <code class=\"codespan\">toggleSelect</code>。</li>\n<li><code class=\"codespan\">mapSelect</code> =&gt; <code class=\"codespan\">select</code>。</li>\n<li><code class=\"codespan\">mapUnSelect</code> =&gt; <code class=\"codespan\">unselect</code>。</li>\n</ul>\n</li>\n<li>下面左边部分的事件名已经不推荐使用。请使用右边的事件名。<ul>\n<li><code class=\"codespan\">mapselectchanged</code> =&gt; <code class=\"codespan\">selectchanged</code>。</li>\n<li><code class=\"codespan\">mapselected</code> =&gt; <code class=\"codespan\">selected</code>。</li>\n<li><code class=\"codespan\">mapunselected</code> =&gt; <code class=\"codespan\">unselected</code>。</li>\n</ul>\n</li>\n<li>选项 <code class=\"codespan\">series.mapType</code> 已经不推荐使用。使用 <code class=\"codespan\">series.map</code> 代替。</li>\n<li>选项 <code class=\"codespan\">series.mapLocation</code> 已经不推荐使用。</li>\n</ul>\n</li>\n<li>关系图(<code class=\"codespan\">graph series</code>):<ul>\n<li>选项 <code class=\"codespan\">series.focusNodeAdjacency</code> 已经不推荐使用。使用 <code class=\"codespan\">series.emphasis: { focus: &#39;adjacency&#39;}</code> 代替。</li>\n</ul>\n</li>\n<li>仪表盘(<code class=\"codespan\">gauge series</code>):<ul>\n<li>选项 <code class=\"codespan\">series.clockWise</code> 已经不推荐使用。使用 <code class=\"codespan\">series.clockwise</code> 代替。</li>\n<li>选项 <code class=\"codespan\">series.hoverOffset</code> 已经不推荐使用。使用 <code class=\"codespan\">series.emphasis.scaleSize</code> 代替。</li>\n</ul>\n</li>\n<li><code class=\"codespan\">dataZoom</code> 组件:<ul>\n<li>选项 <code class=\"codespan\">dataZoom.handleIcon</code> 如果使用 <code class=\"codespan\">SVGPath</code>,需要前缀 <code class=\"codespan\">path://</code>。</li>\n</ul>\n</li>\n<li>雷达图(<code class=\"codespan\">radar</code>):<ul>\n<li>选项 <code class=\"codespan\">radar.name</code> 已经不推荐使用。使用 <code class=\"codespan\">radar.axisName</code> 代替。</li>\n<li>选项 <code class=\"codespan\">radar.nameGap</code> 已经不推荐使用。使用 <code class=\"codespan\">radar.axisNameGap</code> 代替。</li>\n</ul>\n</li>\n<li>Parse and format:<ul>\n<li><code class=\"codespan\">echarts.format.formatTime</code> 已经不推荐使用。使用 <code class=\"codespan\">echarts.time.format</code> 代替。</li>\n<li><code class=\"codespan\">echarts.number.parseDate</code> 已经不推荐使用。使用 <code class=\"codespan\">echarts.time.parse</code> 代替。</li>\n<li><code class=\"codespan\">echarts.format.getTextRect</code> 已经不推荐使用。</li>\n</ul>\n</li>\n</ul>\n"},"在打包环境中使用 ECharts":{"type":["*"],"description":"<p>假如你的开发环境使用了<code class=\"codespan\">npm</code>或者<code class=\"codespan\">yarn</code>等包管理工具,并且使用 Webpack 等打包工具进行构建,本文将会介绍如何引入 Apache ECharts<sup>TM</sup> 并通过 treeshaking 只打包需要的模块。</p>\n<h2 id=\"npm-echarts\">NPM 安装 ECharts</h2>\n<p>你可以使用如下命令通过 npm 安装 ECharts</p>\n<pre><code class=\"lang-shell\">npm install echarts --save\n</code></pre>\n<h2 id=\"-echarts\">引入 ECharts</h2>\n<pre><code class=\"lang-js\">import * as echarts from &#39;echarts&#39;;\n\n// 基于准备好的dom,初始化echarts实例\nvar myChart = echarts.init(document.getElementById(&#39;main&#39;));\n// 绘制图表\nmyChart.setOption({\n    title: {\n        text: &#39;ECharts 入门示例&#39;\n    },\n    tooltip: {},\n    xAxis: {\n        data: [&#39;衬衫&#39;, &#39;羊毛衫&#39;, &#39;雪纺衫&#39;, &#39;裤子&#39;, &#39;高跟鞋&#39;, &#39;袜子&#39;]\n    },\n    yAxis: {},\n    series: [{\n        name: &#39;销量&#39;,\n        type: &#39;bar&#39;,\n        data: [5, 20, 36, 10, 10, 20]\n    }]\n});\n</code></pre>\n<h2 id=\"-echarts-\">按需引入 ECharts 图表和组件</h2>\n<p>上面的代码会引入所有 ECharts 中所有的图表和组件,但是假如你不想引入所有组件,也可以使用 ECharts 提供的按需引入的接口来打包必须的组件。</p>\n<pre><code class=\"lang-js\">// 引入 echarts 核心模块,核心模块提供了 echarts 使用必须要的接口。\nimport * as echarts from &#39;echarts/core&#39;;\n// 引入柱状图图表,图表后缀都为 Chart\nimport {\n    BarChart\n} from &#39;echarts/charts&#39;;\n// 引入提示框,标题,直角坐标系组件,组件后缀都为 Component\nimport {\n    TitleComponent,\n    TooltipComponent,\n    GridComponent\n} from &#39;echarts/components&#39;;\n// 引入 Canvas 渲染器,注意引入 CanvasRenderer 或者 SVGRenderer 是必须的一步\nimport {\n    CanvasRenderer\n} from &#39;echarts/renderers&#39;;\n\n// 注册必须的组件\necharts.use(\n    [TitleComponent, TooltipComponent, GridComponent, BarChart, CanvasRenderer]\n);\n\n// 接下来的使用就跟之前一样,初始化图表,设置配置项\nvar myChart = echarts.init(document.getElementById(&#39;main&#39;));\nmyChart.setOption({\n    ...\n});\n</code></pre>\n<blockquote>\n<p>需要注意的是注意为了保证打包的体积是最小的,ECharts 按需引入的时候不再提供任何渲染器,所以需要选择引入<code class=\"codespan\">CanvasRenderer</code>或者<code class=\"codespan\">SVGRenderer</code>作为渲染器。这样的好处是假如你只需要使用 svg 渲染模式,打包的结果中就不会再包含无需使用的<code class=\"codespan\">CanvasRenderer</code>模块。</p>\n</blockquote>\n<p>我们在示例编辑页的“完整代码”标签提供了非常方便的生成按需引入代码的功能。这个功能会根据当前的配置项动态生成最小的按需引入的代码。你可以直接在你的项目中使用。</p>\n<h2 id=\"-typescript-\">在 TypeScript 中按需引入</h2>\n<p>对于使用了 TypeScript 来开发 ECharts 的开发者,我们提供了类型接口来组合出最小的<code class=\"codespan\">EChartsOption</code>类型。这个更严格的类型可以有效帮助你检查出是否少加载了组件或者图表。</p>\n<pre><code class=\"lang-ts\">import * as echarts from &#39;echarts/core&#39;;\nimport {\n    BarChart,\n    // 系列类型的定义后缀都为 SeriesOption\n    BarSeriesOption,\n    LineChart,\n    LineSeriesOption\n} from &#39;echarts/charts&#39;;\nimport {\n    TitleComponent,\n    // 组件类型的定义后缀都为 ComponentOption\n    TitleComponentOption,\n    GridComponent,\n    GridComponentOption\n} from &#39;echarts/components&#39;;\nimport {\n    CanvasRenderer\n} from &#39;echarts/renderers&#39;;\n\n// 通过 ComposeOption 来组合出一个只有必须组件和图表的 Option 类型\ntype ECOption = echarts.ComposeOption&lt;\n  BarSeriesOption | LineSeriesOption | TitleComponentOption | GridComponentOption\n&gt;;\n\nvar option: ECOption = {\n    ...\n}\n</code></pre>\n"},"ECharts 基础概念概览":{"type":["*"],"description":"<p>本文介绍 Apache ECharts<sup>TM</sup> 最基本的名词和概念。</p>\n<h2 id=\"echarts-\">echarts 实例</h2>\n<p>一个网页中可以创建多个 <code class=\"codespan\">echarts 实例</code>。每个 <code class=\"codespan\">echarts 实例</code> 中可以创建多个图表和坐标系等等(用 <code class=\"codespan\">option</code> 来描述)。准备一个 DOM 节点(作为 echarts 的渲染容器),就可以在上面创建一个 echarts 实例。每个 echarts 实例独占一个 DOM 节点。</p>\n<p><br></p>\n<p><img width=\"500\" height=\"auto\" src=\"documents/asset/img/basic-concepts-overview/multiple-ec-instance.jpg\"></p>\n<h2 id=\"-series-\">系列(series)</h2>\n<p><code class=\"codespan\">系列</code>(<a href=\"option.html#series\" target=\"_blank\">series</a>)是很常见的名词。在 echarts 里,<code class=\"codespan\">系列</code>(<a href=\"option.html#series\" target=\"_blank\">series</a>)是指:一组数值以及他们映射成的图。“系列”这个词原本可能来源于“一系列的数据”,而在 echarts 中取其扩展的概念,不仅表示数据,也表示数据映射成为的图。所以,一个 <code class=\"codespan\">系列</code> 包含的要素至少有:一组数值、图表类型(<code class=\"codespan\">series.type</code>)、以及其他的关于这些数据如何映射成图的参数。</p>\n<p>echarts 里系列类型(<code class=\"codespan\">series.type</code>)就是图表类型。系列类型(<code class=\"codespan\">series.type</code>)至少有:<a href=\"option.html#series-line\" target=\"_blank\">line</a>(折线图)、<a href=\"option.html#series-bar\" target=\"_blank\">bar</a>(柱状图)、<a href=\"option.html#series-pie\" target=\"_blank\">pie</a>(饼图)、<a href=\"option.html#series-scatter\" target=\"_blank\">scatter</a>(散点图)、<a href=\"option.html#series-graph\" target=\"_blank\">graph</a>(关系图)、<a href=\"option.html#series-tree\" target=\"_blank\">tree</a>(树图)、...</p>\n<p>如下图,右侧的 <code class=\"codespan\">option</code> 中声明了三个 <code class=\"codespan\">系列</code>(<a href=\"option.html#series\" target=\"_blank\">series</a>):<a href=\"option.html#series-pie\" target=\"_blank\">pie</a>(饼图系列)、<a href=\"option.html#series-line\" target=\"_blank\">line</a>(折线图系列)、<a href=\"option.html#series-bar\" target=\"_blank\">bar</a>(柱状图系列),每个系列中有他所需要的数据(<a href=\"option.html#series.data\" target=\"_blank\">series.data</a>)。</p>\n<p><br></p>\n<p><img width=\"700\" height=\"auto\" src=\"documents/asset/img/basic-concepts-overview/series-all-a.jpg\"></p>\n<p><br></p>\n<p>类同地,下图中是另一种配置方式,系列的数据从 <a href=\"option.html#dataset\" target=\"_blank\">dataset</a> 中取:</p>\n<p><br></p>\n<p><img width=\"600\" height=\"auto\" src=\"documents/asset/img/basic-concepts-overview/series-all-b.jpg\"></p>\n<h2 id=\"-component-\">组件(component)</h2>\n<p>在系列之上,echarts 中各种内容,被抽象为“组件”。例如,echarts 中至少有这些组件:<a href=\"option.html#xAxis\" target=\"_blank\">xAxis</a>(直角坐标系 X 轴)、<a href=\"option.html#yAxis\" target=\"_blank\">yAxis</a>(直角坐标系 Y 轴)、<a href=\"option.html#grid\" target=\"_blank\">grid</a>(直角坐标系底板)、<a href=\"option.html#angleAxis\" target=\"_blank\">angleAxis</a>(极坐标系角度轴)、<a href=\"option.html#radiusAxis\" target=\"_blank\">radiusAxis</a>(极坐标系半径轴)、<a href=\"option.html#polar\" target=\"_blank\">polar</a>(极坐标系底板)、<a href=\"option.html#geo\" target=\"_blank\">geo</a>(地理坐标系)、<a href=\"option.html#dataZoom\" target=\"_blank\">dataZoom</a>(数据区缩放组件)、<a href=\"option.html#visualMap\" target=\"_blank\">visualMap</a>(视觉映射组件)、<a href=\"option.html#tooltip\" target=\"_blank\">tooltip</a>(提示框组件)、<a href=\"option.html#toolbox\" target=\"_blank\">toolbox</a>(工具栏组件)、<a href=\"option.html#series\" target=\"_blank\">series</a>(系列)、...</p>\n<p>我们注意到,其实系列(<a href=\"option.html#series\" target=\"_blank\">series</a>)也是一种组件,可以理解为:系列是专门绘制“图”的组件。</p>\n<p>如下图,右侧的 <code class=\"codespan\">option</code> 中声明了各个组件(包括系列),各个组件就出现在图中。</p>\n<p><br></p>\n<p><img width=\"800\" height=\"auto\" src=\"documents/asset/img/basic-concepts-overview/components.jpg\"></p>\n<p><br></p>\n<p>注:因为系列是一种特殊的组件,所以有时候也会出现 “组件和系列” 这样的描述,这种语境下的 “组件” 是指:除了 “系列” 以外的其他组件。</p>\n<h2 id=\"-option-\">用 option 描述图表</h2>\n<p>上面已经出现了 <code class=\"codespan\">option</code> 这个概念。echarts 的使用者,使用 <code class=\"codespan\">option</code> 来描述其对图表的各种需求,包括:有什么数据、要画什么图表、图表长什么样子、含有什么组件、组件能操作什么事情等等。简而言之,<code class=\"codespan\">option</code> 表述了:<code class=\"codespan\">数据</code>、<code class=\"codespan\">数据如何映射成图形</code>、<code class=\"codespan\">交互行为</code>。</p>\n<pre><code class=\"lang-js\">// 创建 echarts 实例。\nvar dom = document.getElementById(&#39;dom-id&#39;);\nvar chart = echarts.init(dom);\n\n// 用 option 描述 `数据`、`数据如何映射成图形`、`交互行为` 等。\n// option 是个大的 JavaScript 对象。\nvar option = {\n    // option 每个属性是一类组件。\n    legend: {...},\n    grid: {...},\n    tooltip: {...},\n    toolbox: {...},\n    dataZoom: {...},\n    visualMap: {...},\n    // 如果有多个同类组件,那么就是个数组。例如这里有三个 X 轴。\n    xAxis: [\n        // 数组每项表示一个组件实例,用 type 描述“子类型”。\n        {type: &#39;category&#39;, ...},\n        {type: &#39;category&#39;, ...},\n        {type: &#39;value&#39;, ...}\n    ],\n    yAxis: [{...}, {...}],\n    // 这里有多个系列,也是构成一个数组。\n    series: [\n        // 每个系列,也有 type 描述“子类型”,即“图表类型”。\n        {type: &#39;line&#39;, data: [[&#39;AA&#39;, 332], [&#39;CC&#39;, 124], [&#39;FF&#39;, 412], ... ]},\n        {type: &#39;line&#39;, data: [2231, 1234, 552, ... ]},\n        {type: &#39;line&#39;, data: [[4, 51], [8, 12], ... ]}\n    }]\n};\n\n// 调用 setOption 将 option 输入 echarts,然后 echarts 渲染图表。\nchart.setOption(option);\n</code></pre>\n<p>系列里的 <a href=\"option.html#series.data\" target=\"_blank\">series.data</a> 是本系列的数据。而另一种描述方式,系列数据从 <a href=\"option.html#dataset\" target=\"_blank\">dataset</a> 中取:</p>\n<pre><code class=\"lang-js\">var option = {\n    dataset: {\n        source: [\n            [121, &#39;XX&#39;, 442, 43.11],\n            [663, &#39;ZZ&#39;, 311, 91.14],\n            [913, &#39;ZZ&#39;, 312, 92.12],\n            ...\n        ]\n    },\n    xAxis: {},\n    yAxis: {},\n    series: [\n        // 数据从 dataset 中取,encode 中的数值是 dataset.source 的维度 index (即第几列)\n        {type: &#39;bar&#39;, encode: {x: 1, y: 0}},\n        {type: &#39;bar&#39;, encode: {x: 1, y: 2}},\n        {type: &#39;scatter&#39;, encode: {x: 1, y: 3}},\n        ...\n    ]\n};\n</code></pre>\n<h2 id=\"-\">组件的定位</h2>\n<p>不同的组件、系列,常有不同的定位方式。</p>\n<p><br></p>\n<p><strong>[类 CSS 的绝对定位]</strong></p>\n<p><br></p>\n<p>多数组件和系列,都能够基于 <code class=\"codespan\">top</code> / <code class=\"codespan\">right</code> / <code class=\"codespan\">down</code> / <code class=\"codespan\">left</code> / <code class=\"codespan\">width</code> / <code class=\"codespan\">height</code> 绝对定位。\n这种绝对定位的方式,类似于 <code class=\"codespan\">CSS</code> 的绝对定位(<code class=\"codespan\">position: absolute</code>)。绝对定位基于的是 echarts 容器 DOM 节点。</p>\n<p>其中,他们每个值都可以是:</p>\n<ul>\n<li>绝对数值(例如 <code class=\"codespan\">bottom: 54</code> 表示:距离 echarts 容器底边界 <code class=\"codespan\">54</code> 像素)。</li>\n<li>或者基于 echarts 容器高宽的百分比(例如 <code class=\"codespan\">right: &#39;20%&#39;</code> 表示:距离 echarts 容器右边界的距离是 echarts 容器宽度的 <code class=\"codespan\">20%</code>)。</li>\n</ul>\n<p>如下图的例子,对 <a href=\"option.html#grid\" target=\"_blank\">grid</a> 组件(也就是直角坐标系的底板)设置 <code class=\"codespan\">left</code>、<code class=\"codespan\">right</code>、<code class=\"codespan\">height</code>、<code class=\"codespan\">bottom</code> 达到的效果。</p>\n<p><br></p>\n<p><img width=\"800\" height=\"auto\" src=\"documents/asset/img/basic-concepts-overview/locate.jpg\"></p>\n<p><br></p>\n<p>我们可以注意到,<code class=\"codespan\">left</code> <code class=\"codespan\">right</code> <code class=\"codespan\">width</code> 是一组(横向)、<code class=\"codespan\">top</code> <code class=\"codespan\">bottom</code> <code class=\"codespan\">height</code> 是另一组(纵向)。这两组没有什么关联。每组中,至多设置两项就可以了,第三项会被自动算出。例如,设置了 <code class=\"codespan\">left</code> 和 <code class=\"codespan\">right</code> 就可以了,<code class=\"codespan\">width</code> 会被自动算出。</p>\n<p><br></p>\n<p><strong>[中心半径定位]</strong></p>\n<p><br></p>\n<p>少数圆形的组件或系列,可以使用“中心半径定位”,例如,<a href=\"option.html#series-pie\" target=\"_blank\">pie</a>(饼图)、<a href=\"option.html#series-sunburst\" target=\"_blank\">sunburst</a>(旭日图)、<a href=\"option.html#polar\" target=\"_blank\">polar</a>(极坐标系)。</p>\n<p>中心半径定位,往往依据 <a href=\"option.html#series-pie.center\" target=\"_blank\">center</a>(中心)、<a href=\"option.html#series-pie.radius\" target=\"_blank\">radius</a>(半径)来决定位置。</p>\n<p><br></p>\n<p><strong>[其他定位]</strong></p>\n<p><br></p>\n<p>少数组件和系列可能有自己的特殊的定位方式。在他们的文档中会有说明。</p>\n<h2 id=\"-\">坐标系</h2>\n<p>很多系列,例如 <a href=\"option.html#series-line\" target=\"_blank\">line</a>(折线图)、<a href=\"option.html#series-bar\" target=\"_blank\">bar</a>(柱状图)、<a href=\"option.html#series-scatter\" target=\"_blank\">scatter</a>(散点图)、<a href=\"option.html#series-heatmap\" target=\"_blank\">heatmap</a>(热力图)等等,需要运行在 “坐标系” 上。坐标系用于布局这些图,以及显示数据的刻度等等。例如 echarts 中至少支持这些坐标系:<a href=\"option.html#grid\" target=\"_blank\">直角坐标系</a>、<a href=\"option.html#polar\" target=\"_blank\">极坐标系</a>、<a href=\"option.html#geo\" target=\"_blank\">地理坐标系(GEO)</a>、<a href=\"option.html#singleAxis\" target=\"_blank\">单轴坐标系</a>、<a href=\"option.html#calendar\" target=\"_blank\">日历坐标系</a> 等。其他一些系列,例如 <a href=\"option.html#series-pie\" target=\"_blank\">pie</a>(饼图)、<a href=\"option.html#series-tree\" target=\"_blank\">tree</a>(树图)等等,并不依赖坐标系,能独立存在。还有一些图,例如 <a href=\"option.html#series-graph\" target=\"_blank\">graph</a>(关系图)等,既能独立存在,也能布局在坐标系中,依据用户的设定而来。</p>\n<p>一个坐标系,可能由多个组件协作而成。我们以最常见的直角坐标系来举例。直角坐标系中,包括有 <a href=\"option.html#xAxis\" target=\"_blank\">xAxis</a>(直角坐标系 X 轴)、<a href=\"option.html#yAxis\" target=\"_blank\">yAxis</a>(直角坐标系 Y 轴)、<a href=\"option.html#grid\" target=\"_blank\">grid</a>(直角坐标系底板)三种组件。<code class=\"codespan\">xAxis</code>、<code class=\"codespan\">yAxis</code> 被 <code class=\"codespan\">grid</code> 自动引用并组织起来,共同工作。</p>\n<p>我们来看下图,这是最简单的使用直角坐标系的方式:只声明了 <code class=\"codespan\">xAxis</code>、<code class=\"codespan\">yAxis</code> 和一个 <code class=\"codespan\">scatter</code>(散点图系列),echarts 暗自为他们创建了 <code class=\"codespan\">grid</code> 并关联起他们:</p>\n<p><br></p>\n<p><img width=\"450\" height=\"auto\" src=\"documents/asset/img/basic-concepts-overview/coord-sys-0.jpg\"></p>\n<p><br></p>\n<p>再来看下图,两个 <code class=\"codespan\">yAxis</code>,共享了一个 <code class=\"codespan\">xAxis</code>。两个 <code class=\"codespan\">series</code>,也共享了这个 <code class=\"codespan\">xAxis</code>,但是分别使用不同的 <code class=\"codespan\">yAxis</code>,使用 <a href=\"option.html#series-line.yAxisIndex\" target=\"_blank\">yAxisIndex</a> 来指定它自己使用的是哪个 <code class=\"codespan\">yAxis</code>:</p>\n<p><br></p>\n<p><img width=\"600\" height=\"auto\" src=\"documents/asset/img/basic-concepts-overview/coord-sys-1.jpg\"></p>\n<p><br></p>\n<p>再来看下图,一个 echarts 实例中,有多个 <code class=\"codespan\">grid</code>,每个 <code class=\"codespan\">grid</code> 分别有 <code class=\"codespan\">xAxis</code>、<code class=\"codespan\">yAxis</code>,他们使用 <code class=\"codespan\">xAxisIndex</code>、<code class=\"codespan\">yAxisIndex</code>、<code class=\"codespan\">gridIndex</code> 来指定引用关系:</p>\n<p><br></p>\n<p><img width=\"600\" height=\"auto\" src=\"documents/asset/img/basic-concepts-overview/coord-sys-2.jpg\"></p>\n<p><br></p>\n<p>另外,一个系列,往往能运行在不同的坐标系中。例如,一个 <a href=\"option.html#series-scatter\" target=\"_blank\">scatter</a>(散点图)能运行在 <a href=\"option.html#grid\" target=\"_blank\">直角坐标系</a>、<a href=\"option.html#polar\" target=\"_blank\">极坐标系</a> 、<a href=\"option.html#geo\" target=\"_blank\">地理坐标系(GEO)</a> 等各种坐标系中。同样,一个坐标系,也能承载不同的系列,如上面出现的各种例子,<a href=\"option.html#grid\" target=\"_blank\">直角坐标系</a> 里承载了 <a href=\"option.html#series-line\" target=\"_blank\">line</a>(折线图)、<a href=\"option.html#series-bar\" target=\"_blank\">bar</a>(柱状图)等等。</p>\n"},"个性化图表的样式":{"type":["*"],"description":"<p>Apache ECharts<sup>TM</sup> 提供了丰富的自定义配置选项,并且能够从全局、系列、数据三个层级去设置数据图形的样式。下面我们来看如何使用 ECharts 实现下面这个南丁格尔图:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/tutorial-styling-step5&edit=1&reset=1\" width=\"500\" height=\"400\" ></iframe>\n\n\n<h2 id=\"-\">绘制南丁格尔图</h2>\n<p><a href=\"#5%20%E5%88%86%E9%92%9F%E4%B8%8A%E6%89%8B%20ECharts\">5分钟上手ECharts</a> 中讲了如何绘制一个简单的柱状图,这次要画的是饼图,饼图主要是通过扇形的弧度表现不同类目的数据在总和中的占比,它的数据格式比柱状图更简单,只有一维的数值,不需要给类目。因为不在直角坐标系上,所以也不需要<code class=\"codespan\">xAxis</code>,<code class=\"codespan\">yAxis</code>。</p>\n<pre><code class=\"lang-js\">myChart.setOption({\n    series : [\n        {\n            name: &#39;访问来源&#39;,\n            type: &#39;pie&#39;,\n            radius: &#39;55%&#39;,\n            data:[\n                {value:235, name:&#39;视频广告&#39;},\n                {value:274, name:&#39;联盟广告&#39;},\n                {value:310, name:&#39;邮件营销&#39;},\n                {value:335, name:&#39;直接访问&#39;},\n                {value:400, name:&#39;搜索引擎&#39;}\n            ]\n        }\n    ]\n})\n</code></pre>\n<p>上面代码就能画出一个简单的饼图:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/tutorial-styling-step0&edit=1&reset=1\" width=\"400\" height=\"300\" ></iframe>\n\n\n<p>这里<code class=\"codespan\">data</code>属性值不像入门教程里那样每一项都是单个数值,而是一个包含 <code class=\"codespan\">name</code> 和 <code class=\"codespan\">value</code> 属性的对象,ECharts 中的数据项都是既可以只设成数值,也可以设成一个包含有名称、该数据图形的样式配置、标签配置的对象,具体见 <a href=\"option.html#series-pie.data\" target=\"_blank\">data</a> 文档。</p>\n<p>ECharts 中的<a href=\"option.html#series-pie\" target=\"_blank\">饼图</a>也支持通过设置 <a href=\"option.html#series-pie.roseType\" target=\"_blank\">roseType</a> 显示成南丁格尔图。</p>\n<pre><code class=\"lang-js\">roseType: &#39;angle&#39;\n</code></pre>\n<p>南丁格尔图会通过半径表示数据的大小。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/tutorial-styling-step1&edit=1&reset=1\" width=\"400\" height=\"300\" ></iframe>\n\n\n<h2 id=\"-\">阴影的配置</h2>\n<p>ECharts 中有一些通用的样式,诸如阴影、透明度、颜色、边框颜色、边框宽度等,这些样式一般都会在系列的 <a href=\"#series-pie.itemStyle\">itemStyle</a> 里设置。例如阴影的样式可以通过下面几个配置项设置:</p>\n<pre><code class=\"lang-js\">itemStyle: {\n    // 阴影的大小\n    shadowBlur: 200,\n    // 阴影水平方向上的偏移\n    shadowOffsetX: 0,\n    // 阴影垂直方向上的偏移\n    shadowOffsetY: 0,\n    // 阴影颜色\n    shadowColor: &#39;rgba(0, 0, 0, 0.5)&#39;\n}\n</code></pre>\n<p>加上阴影后的效果:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/tutorial-styling-step2&edit=1&reset=1\" width=\"400\" height=\"300\" ></iframe>\n\n\n<p><code class=\"codespan\">itemStyle</code>的<code class=\"codespan\">emphasis</code>是鼠标 hover 时候的高亮样式。这个示例里是正常的样式下加阴影,但是可能更多的时候是 hover 的时候通过阴影突出。</p>\n<pre><code class=\"lang-js\">itemStyle: {\n    emphasis: {\n        shadowBlur: 200,\n        shadowColor: &#39;rgba(0, 0, 0, 0.5)&#39;\n    }\n}\n</code></pre>\n<h2 id=\"-\">深色背景和浅色标签</h2>\n<p>现在我们需要把整个主题改成开始的示例中那样的深色主题,这就需要改背景色和文本颜色。</p>\n<p>背景色是全局的,所以直接在 option 下设置 <a href=\"option.html#backgroundColor\" target=\"_blank\">backgroundColor</a></p>\n<pre><code class=\"lang-js\">setOption({\n    backgroundColor: &#39;#2c343c&#39;\n})\n</code></pre>\n<p>文本的样式可以设置全局的 <a href=\"option.html#textStyle\" target=\"_blank\">textStyle</a>。</p>\n<pre><code class=\"lang-js\">setOption({\n    textStyle: {\n        color: &#39;rgba(255, 255, 255, 0.3)&#39;\n    }\n})\n</code></pre>\n<p>也可以每个系列分别设置,每个系列的文本设置在 <a href=\"option.html#series-pie.label.textStyle\" target=\"_blank\">label.textStyle</a>。</p>\n<pre><code class=\"lang-js\">label: {\n    textStyle: {\n        color: &#39;rgba(255, 255, 255, 0.3)&#39;\n    }\n}\n</code></pre>\n<p>饼图的话还要将标签的视觉引导线的颜色设为浅色。</p>\n<pre><code class=\"lang-js\">labelLine: {\n    lineStyle: {\n        color: &#39;rgba(255, 255, 255, 0.3)&#39;\n    }\n}\n</code></pre>\n<p>如下:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/tutorial-styling-step3&edit=1&reset=1\" width=\"400\" height=\"300\" ></iframe>\n\n\n<p>跟<code class=\"codespan\">itemStyle</code>一样,<code class=\"codespan\">label</code>和<code class=\"codespan\">labelLine</code>的样式也有<code class=\"codespan\">emphasis</code>状态。</p>\n<h2 id=\"-\">设置扇形的颜色</h2>\n<p>扇形的颜色也是在 itemStyle 中设置:</p>\n<pre><code class=\"lang-js\">itemStyle: {\n    // 设置扇形的颜色\n    color: &#39;#c23531&#39;,\n    shadowBlur: 200,\n    shadowColor: &#39;rgba(0, 0, 0, 0.5)&#39;\n}\n</code></pre>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/tutorial-styling-step4&edit=1&reset=1\" width=\"400\" height=\"300\" ></iframe>\n\n\n<p>跟我们要实现的效果已经挺像了,除了每个扇形的颜色,效果中阴影下面的扇形颜色更深,有种光线被遮住的感觉,从而会出现层次感和空间感。</p>\n<p>ECharts 中每个扇形颜色的可以通过分别设置 data 下的数据项实现。</p>\n<pre><code class=\"lang-js\">data: [{\n    value:400,\n    name:&#39;搜索引擎&#39;,\n    itemStyle: {\n        color: &#39;#c23531&#39;\n    }\n}, ...]\n</code></pre>\n<p>但是这次因为只有明暗度的变化,所以有一种更快捷的方式是通过 <a href=\"option.html#visualMap\" target=\"_blank\">visualMap</a> 组件将数值的大小映射到明暗度。</p>\n<pre><code class=\"lang-js\">visualMap: {\n    // 不显示 visualMap 组件,只用于明暗度的映射\n    show: false,\n    // 映射的最小值为 80\n    min: 80,\n    // 映射的最大值为 600\n    max: 600,\n    inRange: {\n        // 明暗度的范围是 0 到 1\n        colorLightness: [0, 1]\n    }\n}\n</code></pre>\n<p>最终效果:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/tutorial-styling-step5&edit=1&reset=1\" width=\"500\" height=\"400\" ></iframe>\n\n\n\n\n\n"},"ECharts 中的样式简介":{"type":["*"],"description":"<p>本文主要是大略概述,用哪些方法,可以在 Apache ECharts<sup>TM</sup> 中设置样式,改变图形元素或者文字的颜色、明暗、大小等。</p>\n<blockquote>\n<p>之所以用“样式”这种可能不很符合数据可视化思维的词,是因为,比较通俗易懂。</p>\n</blockquote>\n<p>本文介绍这几种方式,他们的功能范畴可能会有交叉(即同一种细节的效果可能可以用不同的方式实现),但是他们各有各的场景偏好。</p>\n<ul>\n<li>颜色主题(Theme)</li>\n<li>调色盘</li>\n<li>直接样式设置(itemStyle、lineStyle、areaStyle、label、...)</li>\n<li>视觉映射(visualMap)</li>\n</ul>\n<p>其他关于样式的文章,参见:<a href=\"#%E4%B8%AA%E6%80%A7%E5%8C%96%E5%9B%BE%E8%A1%A8%E7%9A%84%E6%A0%B7%E5%BC%8F\">个性化图表的样式</a>,<a href=\"#%E6%95%B0%E6%8D%AE%E7%9A%84%E8%A7%86%E8%A7%89%E6%98%A0%E5%B0%84\">数据的视觉映射</a>。</p>\n<h2 id=\"-theme-\">颜色主题(Theme)</h2>\n<p>最简单的更改全局样式的方式,是直接采用颜色主题(theme)。例如,在 <a href=\"https://echarts.apache.org/examples/zh/index.html\" target=\"_blank\">示例集合</a> 中,可以选择 “Theme”,直接看到采用主题的效果。</p>\n<p>ECharts4 开始,除了一贯的默认主题外,新内置了两套主题,分别为 <code class=\"codespan\">&#39;light&#39;</code> 和 <code class=\"codespan\">&#39;dark&#39;</code>。可以这么来使用它们:</p>\n<pre><code class=\"lang-js\">var chart = echarts.init(dom, &#39;light&#39;);\n</code></pre>\n<p>或者</p>\n<pre><code class=\"lang-js\">var chart = echarts.init(dom, &#39;dark&#39;);\n</code></pre>\n<p>其他的主题,没有内置在 ECharts 中,需要自己加载。这些主题可以在 <a href=\"https://echarts.apache.org/zh/theme-builder.html\" target=\"_blank\">主题编辑器</a> 里访问到。也可以使用这个主题编辑器,自己编辑主题。下载下来的主题可以这样使用:</p>\n<p>如果主题保存为 JSON 文件,那么可以自行加载和注册,例如:</p>\n<pre><code class=\"lang-js\">// 假设主题名称是 &quot;vintage&quot;\n$.getJSON(&#39;xxx/xxx/vintage.json&#39;, function (themeJSON) {\n    echarts.registerTheme(&#39;vintage&#39;, JSON.parse(themeJSON))\n    var chart = echarts.init(dom, &#39;vintage&#39;);\n});\n</code></pre>\n<p>如果保存为 UMD 格式的 JS 文件,那么支持了自注册,直接引入 JS 文件即可:</p>\n<pre><code class=\"lang-js\">// HTML 引入 vintage.js 文件后(假设主题名称是 &quot;vintage&quot;)\nvar chart = echarts.init(dom, &#39;vintage&#39;);\n// ...\n</code></pre>\n<h2 id=\"-\">调色盘</h2>\n<p>调色盘,可以在 option 中设置。它给定了一组颜色,图形、系列会自动从其中选择颜色。\n可以设置全局的调色盘,也可以设置系列自己专属的调色盘。</p>\n<pre><code class=\"lang-js\">option = {\n    // 全局调色盘。\n    color: [&#39;#c23531&#39;,&#39;#2f4554&#39;, &#39;#61a0a8&#39;, &#39;#d48265&#39;, &#39;#91c7ae&#39;,&#39;#749f83&#39;,  &#39;#ca8622&#39;, &#39;#bda29a&#39;,&#39;#6e7074&#39;, &#39;#546570&#39;, &#39;#c4ccd3&#39;],\n\n    series: [{\n        type: &#39;bar&#39;,\n        // 此系列自己的调色盘。\n        color: [&#39;#dd6b66&#39;,&#39;#759aa0&#39;,&#39;#e69d87&#39;,&#39;#8dc1a9&#39;,&#39;#ea7e53&#39;,&#39;#eedd78&#39;,&#39;#73a373&#39;,&#39;#73b9bc&#39;,&#39;#7289ab&#39;, &#39;#91ca8c&#39;,&#39;#f49f42&#39;],\n        ...\n    }, {\n        type: &#39;pie&#39;,\n        // 此系列自己的调色盘。\n        color: [&#39;#37A2DA&#39;, &#39;#32C5E9&#39;, &#39;#67E0E3&#39;, &#39;#9FE6B8&#39;, &#39;#FFDB5C&#39;,&#39;#ff9f7f&#39;, &#39;#fb7293&#39;, &#39;#E062AE&#39;, &#39;#E690D1&#39;, &#39;#e7bcf3&#39;, &#39;#9d96f5&#39;, &#39;#8378EA&#39;, &#39;#96BFFF&#39;],\n        ...\n    }]\n}\n</code></pre>\n<h2 id=\"-itemstyle-linestyle-areastyle-label-\">直接的样式设置 itemStyle, lineStyle, areaStyle, label, ...</h2>\n<p>直接的样式设置是比较常用设置方式。纵观 ECharts 的 <a href=\"option.html\" target=\"_blank\">option</a> 中,很多地方可以设置 <a href=\"option.html#series.itemStyle\" target=\"_blank\">itemStyle</a>、<a href=\"option.html#series-line.lineStyle\" target=\"_blank\">lineStyle</a>、<a href=\"option.html#series-line.areaStyle\" target=\"_blank\">areaStyle</a>、<a href=\"option.html#series.label\" target=\"_blank\">label</a> 等等。这些的地方可以直接设置图形元素的颜色、线宽、点的大小、标签的文字、标签的样式等等。</p>\n<p>一般来说,ECharts 的各个系列和组件,都遵从这些命名习惯,虽然不同图表和组件中,<code class=\"codespan\">itemStyle</code>、<code class=\"codespan\">label</code> 等可能出现在不同的地方。</p>\n<p>直接样式设置的另一篇介绍,参见 <a href=\"#%E4%B8%AA%E6%80%A7%E5%8C%96%E5%9B%BE%E8%A1%A8%E7%9A%84%E6%A0%B7%E5%BC%8F\">个性化图表的样式</a>。</p>\n<h2 id=\"-emphasis\">高亮的样式:emphasis</h2>\n<p>在鼠标悬浮到图形元素上时,一般会出现高亮的样式。默认情况下,高亮的样式是根据普通样式自动生成的。但是高亮的样式也可以自己定义,主要是通过 <a href=\"option.html#series-scatter.emphasis\" target=\"_blank\">emphasis</a> 属性来定制。<a href=\"option.html#series-scatter.emphasis\" target=\"_blank\">emphsis</a> 中的结构,和普通样式的结构相同,例如:</p>\n<pre><code class=\"lang-js\">option = {\n    series: {\n        type: &#39;scatter&#39;,\n\n        // 普通样式。\n        itemStyle: {\n            // 点的颜色。\n            color: &#39;red&#39;\n        },\n        label: {\n            show: true,\n            // 标签的文字。\n            formatter: &#39;This is a normal label.&#39;\n        },\n\n        // 高亮样式。\n        emphasis: {\n            itemStyle: {\n                // 高亮时点的颜色。\n                color: &#39;blue&#39;\n            },\n            label: {\n                show: true,\n                // 高亮时标签的文字。\n                formatter: &#39;This is a emphasis label.&#39;\n            }\n        }\n    }\n}\n</code></pre>\n<p>注意:在 ECharts4 以前,高亮和普通样式的写法,是这样的:</p>\n<pre><code class=\"lang-js\">option = {\n    series: {\n        type: &#39;scatter&#39;,\n\n        itemStyle: {\n            // 普通样式。\n            normal: {\n                // 点的颜色。\n                color: &#39;red&#39;\n            },\n            // 高亮样式。\n            emphasis: {\n                // 高亮时点的颜色。\n                color: &#39;blue&#39;\n            }\n        },\n\n        label: {\n            // 普通样式。\n            normal: {\n                show: true,\n                // 标签的文字。\n                formatter: &#39;This is a normal label.&#39;\n            },\n            // 高亮样式。\n            emphasis: {\n                show: true,\n                // 高亮时标签的文字。\n                formatter: &#39;This is a emphasis label.&#39;\n            }\n        }\n    }\n}\n</code></pre>\n<p>这种写法 <strong>仍然被兼容</strong>,但是,不再推荐。事实上,多数情况下,使用者只会配置普通状态下的样式,而使用默认的高亮样式。所以在 ECharts4 中,支持不写 <code class=\"codespan\">normal</code> 的配置方法(即本文开头的那种写法),使得配置项更扁平简单。</p>\n<h2 id=\"-visualmap-\">通过 visualMap 组件设定样式</h2>\n<p><a href=\"option.html#visualMap\" target=\"_blank\">visualMap 组件</a> 能指定数据到颜色、图形尺寸的映射规则,详见 <a href=\"#%E6%95%B0%E6%8D%AE%E7%9A%84%E8%A7%86%E8%A7%89%E6%98%A0%E5%B0%84\">数据的视觉映射</a>。</p>\n"},"异步数据加载和更新":{"type":["*"],"description":"<h2 id=\"-\">异步加载</h2>\n<p><a href=\"#getting-started\">入门示例</a>中的数据是在初始化后 <code class=\"codespan\">setOption</code> 中直接填入的,但是很多时候可能数据需要异步加载后再填入。Apache ECharts<sup>TM</sup> 中实现异步数据的更新非常简单,在图表初始化后不管任何时候只要通过 jQuery 等工具异步获取数据后通过 <code class=\"codespan\">setOption</code> 填入数据和配置项就行。</p>\n<pre><code class=\"lang-js\">var myChart = echarts.init(document.getElementById(&#39;main&#39;));\n\n$.get(&#39;data.json&#39;).done(function (data) {\n    myChart.setOption({\n        title: {\n            text: &#39;异步数据加载示例&#39;\n        },\n        tooltip: {},\n        legend: {\n            data:[&#39;销量&#39;]\n        },\n        xAxis: {\n            data: data.categories\n        },\n        yAxis: {},\n        series: [{\n            name: &#39;销量&#39;,\n            type: &#39;bar&#39;,\n            data: data.data\n        }]\n    });\n});\n</code></pre>\n<p>或者先设置完其它的样式,显示一个空的直角坐标轴,然后获取数据后填入数据。</p>\n<pre><code class=\"lang-js\">var myChart = echarts.init(document.getElementById(&#39;main&#39;));\n// 显示标题,图例和空的坐标轴\nmyChart.setOption({\n    title: {\n        text: &#39;异步数据加载示例&#39;\n    },\n    tooltip: {},\n    legend: {\n        data:[&#39;销量&#39;]\n    },\n    xAxis: {\n        data: []\n    },\n    yAxis: {},\n    series: [{\n        name: &#39;销量&#39;,\n        type: &#39;bar&#39;,\n        data: []\n    }]\n});\n\n// 异步加载数据\n$.get(&#39;data.json&#39;).done(function (data) {\n    // 填入数据\n    myChart.setOption({\n        xAxis: {\n            data: data.categories\n        },\n        series: [{\n            // 根据名字对应到相应的系列\n            name: &#39;销量&#39;,\n            data: data.data\n        }]\n    });\n});\n</code></pre>\n<p>如下:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/tutorial-async&edit=1&reset=1\" width=\"400\" height=\"300\" ></iframe>\n\n\n<p>ECharts 中在更新数据的时候需要通过<code class=\"codespan\">name</code>属性对应到相应的系列,上面示例中如果<code class=\"codespan\">name</code>不存在也可以根据系列的顺序正常更新,但是更多时候推荐更新数据的时候加上系列的<code class=\"codespan\">name</code>数据。</p>\n<h2 id=\"loading-\">loading 动画</h2>\n<p>如果数据加载时间较长,一个空的坐标轴放在画布上也会让用户觉得是不是产生 bug 了,因此需要一个 loading 的动画来提示用户数据正在加载。</p>\n<p>ECharts 默认有提供了一个简单的加载动画。只需要调用 <a href=\"api.html#echartsInstance.showLoading\" target=\"_blank\">showLoading</a> 方法显示。数据加载完成后再调用 <a href=\"api.html#echartsInstance.hideLoading\" target=\"_blank\">hideLoading</a> 方法隐藏加载动画。</p>\n<pre><code class=\"lang-js\">myChart.showLoading();\n$.get(&#39;data.json&#39;).done(function (data) {\n    myChart.hideLoading();\n    myChart.setOption(...);\n});\n</code></pre>\n<p>效果如下:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/tutorial-loading&edit=1&reset=1\" width=\"400\" height=\"300\" ></iframe>\n\n\n<h2 id=\"-\">数据的动态更新</h2>\n<p>ECharts 由数据驱动,数据的改变驱动图表展现的改变,因此动态数据的实现也变得异常简单。</p>\n<p>所有数据的更新都通过 <a href=\"#api.html#echartsInstance.setOption\">setOption</a>实现,你只需要定时获取数据,<a href=\"#api.html#echartsInstance.setOption\">setOption</a> 填入数据,而不用考虑数据到底产生了那些变化,ECharts 会找到两组数据之间的差异然后通过合适的动画去表现数据的变化。</p>\n<blockquote>\n<p>ECharts 3 中移除了 ECharts 2 中的 addData 方法。如果只需要加入单个数据,可以先 data.push(value) 后 setOption</p>\n</blockquote>\n<p>具体可以看下面示例:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/tutorial-dynamic-data&edit=1&reset=1\" width=\"400\" height=\"300\" ></iframe>\n\n\n\n"},"使用 dataset 管理数据":{"type":["*"],"description":"<p>Apache ECharts<sup>TM</sup> 4 开始支持了 <code class=\"codespan\">dataset</code> 组件用于单独的数据集声明,从而数据可以单独管理,被多个组件复用,并且可以基于数据指定数据到视觉的映射。这在不少场景下能带来使用上的方便。</p>\n<p>ECharts 4 以前,数据只能声明在各个“系列(series)”中,例如:</p>\n<pre><code class=\"lang-js\">option = {\n    xAxis: {\n        type: &#39;category&#39;,\n        data: [&#39;Matcha Latte&#39;, &#39;Milk Tea&#39;, &#39;Cheese Cocoa&#39;, &#39;Walnut Brownie&#39;]\n    },\n    yAxis: {},\n    series: [\n        {\n            type: &#39;bar&#39;,\n            name: &#39;2015&#39;,\n            data: [89.3, 92.1, 94.4, 85.4]\n        },\n        {\n            type: &#39;bar&#39;,\n            name: &#39;2016&#39;,\n            data: [95.8, 89.4, 91.2, 76.9]\n        },\n        {\n            type: &#39;bar&#39;,\n            name: &#39;2017&#39;,\n            data: [97.7, 83.1, 92.5, 78.1]\n        }\n    ]\n}\n</code></pre>\n<p>这种方式的优点是,直观易理解,以及适于对一些特殊图表类型进行一定的数据类型定制。但是缺点是,为匹配这种数据输入形式,常需要有数据处理的过程,把数据分割设置到各个系列(和类目轴)中。此外,不利于多个系列共享一份数据,也不利于基于原始数据进行图表类型、系列的映射安排。</p>\n<p>于是,ECharts 4 提供了 <code class=\"codespan\">数据集</code>(<code class=\"codespan\">dataset</code>)组件来单独声明数据,它带来了这些效果:</p>\n<ul>\n<li>能够贴近这样的数据可视化常见思维方式:(I) 提供数据,(II) 指定数据到视觉的映射,从而形成图表。</li>\n<li>数据和其他配置可以被分离开来。数据常变,其他配置常不变。分开易于分别管理。</li>\n<li>数据可以被多个系列或者组件复用,对于大数据量的场景,不必为每个系列创建一份数据。</li>\n<li>支持更多的数据的常用格式,例如二维数组、对象数组等,一定程度上避免使用者为了数据格式而进行转换。</li>\n</ul>\n<h2 id=\"-\">入门例子</h2>\n<p>下面是一个最简单的 <code class=\"codespan\">dataset</code> 的例子:</p>\n<pre><code class=\"lang-js\">option = {\n    legend: {},\n    tooltip: {},\n    dataset: {\n        // 提供一份数据。\n        source: [\n            [&#39;product&#39;, &#39;2015&#39;, &#39;2016&#39;, &#39;2017&#39;],\n            [&#39;Matcha Latte&#39;, 43.3, 85.8, 93.7],\n            [&#39;Milk Tea&#39;, 83.1, 73.4, 55.1],\n            [&#39;Cheese Cocoa&#39;, 86.4, 65.2, 82.5],\n            [&#39;Walnut Brownie&#39;, 72.4, 53.9, 39.1]\n        ]\n    },\n    // 声明一个 X 轴,类目轴(category)。默认情况下,类目轴对应到 dataset 第一列。\n    xAxis: {type: &#39;category&#39;},\n    // 声明一个 Y 轴,数值轴。\n    yAxis: {},\n    // 声明多个 bar 系列,默认情况下,每个系列会自动对应到 dataset 的每一列。\n    series: [\n        {type: &#39;bar&#39;},\n        {type: &#39;bar&#39;},\n        {type: &#39;bar&#39;}\n    ]\n}\n</code></pre>\n<p>效果如下:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=dataset-simple0&edit=1&reset=1\" width=\"500\" height=\"300\" ></iframe>\n\n\n<p>或者也可以使用常见的对象数组的格式:</p>\n<pre><code class=\"lang-js\">option = {\n    legend: {},\n    tooltip: {},\n    dataset: {\n        // 用 dimensions 指定了维度的顺序。直角坐标系中,\n        // 默认把第一个维度映射到 X 轴上,第二个维度映射到 Y 轴上。\n        // 如果不指定 dimensions,也可以通过指定 series.encode\n        // 完成映射,参见后文。\n        dimensions: [&#39;product&#39;, &#39;2015&#39;, &#39;2016&#39;, &#39;2017&#39;],\n        source: [\n            {product: &#39;Matcha Latte&#39;, &#39;2015&#39;: 43.3, &#39;2016&#39;: 85.8, &#39;2017&#39;: 93.7},\n            {product: &#39;Milk Tea&#39;, &#39;2015&#39;: 83.1, &#39;2016&#39;: 73.4, &#39;2017&#39;: 55.1},\n            {product: &#39;Cheese Cocoa&#39;, &#39;2015&#39;: 86.4, &#39;2016&#39;: 65.2, &#39;2017&#39;: 82.5},\n            {product: &#39;Walnut Brownie&#39;, &#39;2015&#39;: 72.4, &#39;2016&#39;: 53.9, &#39;2017&#39;: 39.1}\n        ]\n    },\n    xAxis: {type: &#39;category&#39;},\n    yAxis: {},\n    series: [\n        {type: &#39;bar&#39;},\n        {type: &#39;bar&#39;},\n        {type: &#39;bar&#39;}\n    ]\n};\n</code></pre>\n<h2 id=\"-\">数据到图形的映射</h2>\n<p>本篇里,我们制作数据可视化图表的逻辑是这样的:基于数据,在配置项中指定如何映射到图形。</p>\n<p>概略而言,可以进行这些映射:</p>\n<ul>\n<li>指定 dataset 的列(column)还是行(row)映射为图形系列(series)。这件事可以使用 <a href=\"option.html#series.seriesLayoutBy\" target=\"_blank\">series.seriesLayoutBy</a> 属性来配置。默认是按照列(column)来映射。</li>\n<li>指定维度映射的规则:如何从 dataset 的维度(一个“维度”的意思是一行/列)映射到坐标轴(如 X、Y 轴)、提示框(tooltip)、标签(label)、图形元素大小颜色等(visualMap)。这件事可以使用 <a href=\"option.html#series.encode\" target=\"_blank\">series.encode</a> 属性,以及 <a href=\"option.html#visualMap\" target=\"_blank\">visualMap</a> 组件(如果有需要映射颜色大小等视觉维度的话)来配置。上面的例子中,没有给出这种映射配置,那么 ECharts 就按最常见的理解进行默认映射:X 坐标轴声明为类目轴,默认情况下会自动对应到 dataset.source 中的第一列;三个柱图系列,一一对应到 dataset.source 中后面每一列。</li>\n</ul>\n<p>下面详细解释。</p>\n<h2 id=\"-dataset-series-\">把数据集( dataset )的行或列映射为系列(series)</h2>\n<p>有了数据表之后,使用者可以灵活得配置:数据如何对应到轴和图形系列。</p>\n<p>用户可以使用 <code class=\"codespan\">seriesLayoutBy</code> 配置项,改变图表对于行列的理解。<code class=\"codespan\">seriesLayoutBy</code> 可取值:</p>\n<ul>\n<li>&#39;column&#39;: 默认值。系列被安放到 <code class=\"codespan\">dataset</code> 的列上面。</li>\n<li>&#39;row&#39;: 系列被安放到 <code class=\"codespan\">dataset</code> 的行上面。</li>\n</ul>\n<p>看这个例子:</p>\n<pre><code class=\"lang-js\">option = {\n    legend: {},\n    tooltip: {},\n    dataset: {\n        source: [\n            [&#39;product&#39;, &#39;2012&#39;, &#39;2013&#39;, &#39;2014&#39;, &#39;2015&#39;],\n            [&#39;Matcha Latte&#39;, 41.1, 30.4, 65.1, 53.3],\n            [&#39;Milk Tea&#39;, 86.5, 92.1, 85.7, 83.1],\n            [&#39;Cheese Cocoa&#39;, 24.1, 67.2, 79.5, 86.4]\n        ]\n    },\n    xAxis: [\n        {type: &#39;category&#39;, gridIndex: 0},\n        {type: &#39;category&#39;, gridIndex: 1}\n    ],\n    yAxis: [\n        {gridIndex: 0},\n        {gridIndex: 1}\n    ],\n    grid: [\n        {bottom: &#39;55%&#39;},\n        {top: &#39;55%&#39;}\n    ],\n    series: [\n        // 这几个系列会在第一个直角坐标系中,每个系列对应到 dataset 的每一行。\n        {type: &#39;bar&#39;, seriesLayoutBy: &#39;row&#39;},\n        {type: &#39;bar&#39;, seriesLayoutBy: &#39;row&#39;},\n        {type: &#39;bar&#39;, seriesLayoutBy: &#39;row&#39;},\n        // 这几个系列会在第二个直角坐标系中,每个系列对应到 dataset 的每一列。\n        {type: &#39;bar&#39;, xAxisIndex: 1, yAxisIndex: 1},\n        {type: &#39;bar&#39;, xAxisIndex: 1, yAxisIndex: 1},\n        {type: &#39;bar&#39;, xAxisIndex: 1, yAxisIndex: 1},\n        {type: &#39;bar&#39;, xAxisIndex: 1, yAxisIndex: 1}\n    ]\n}\n</code></pre>\n<p>效果如下:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=dataset-series-layout-by&edit=1&reset=1\" width=\"800\" height=\"600\" ></iframe>\n\n\n\n<h2 id=\"-dimension-\">维度(dimension)</h2>\n<p>介绍 <code class=\"codespan\">encode</code> 之前,首先要介绍“维度(dimension)”的概念。</p>\n<p>常用图表所描述的数据大部分是“二维表”结构,上述的例子中,我们都使用二维数组来容纳二维表。现在,当我们把系列(series)对应到“列”的时候,那么每一列就称为一个“维度(dimension)”,而每一行称为数据项(item)。反之,如果我们把系列(series)对应到表行,那么每一行就是“维度(dimension)”,每一列就是数据项(item)。</p>\n<p>维度可以有单独的名字,便于在图表中显示。维度名(dimension name)可以在定义在 dataset 的第一行(或者第一列)。例如上面的例子中,<code class=\"codespan\">&#39;score&#39;</code>、<code class=\"codespan\">&#39;amount&#39;</code>、<code class=\"codespan\">&#39;product&#39;</code> 就是维度名。从第二行开始,才是正式的数据。<code class=\"codespan\">dataset.source</code> 中第一行(列)到底包含不包含维度名,ECharts 默认会自动探测。当然也可以设置 <code class=\"codespan\">dataset.sourceHeader: true</code> 显示声明第一行(列)就是维度,或者 <code class=\"codespan\">dataset.sourceHeader: false</code> 表明第一行(列)开始就直接是数据。</p>\n<p>维度的定义,也可以使用单独的 <code class=\"codespan\">dataset.dimensions</code> 或者 <code class=\"codespan\">series.dimensions</code> 来定义,这样可以同时指定维度名,和维度的类型(dimension type):</p>\n<pre><code class=\"lang-js\">var option1 = {\n    dataset: {\n        dimensions: [\n            {name: &#39;score&#39;},\n            // 可以简写为 string,表示维度名。\n            &#39;amount&#39;,\n            // 可以在 type 中指定维度类型。\n            {name: &#39;product&#39;, type: &#39;ordinal&#39;}\n        ],\n        source: [...]\n    },\n    ...\n};\n\nvar option2 = {\n    dataset: {\n        source: [...]\n    },\n    series: {\n        type: &#39;line&#39;,\n        // 在系列中设置的 dimensions 会更优先采纳。\n        dimensions: [\n            null, // 可以设置为 null 表示不想设置维度名\n            &#39;amount&#39;,\n            {name: &#39;product&#39;, type: &#39;ordinal&#39;}\n        ]\n    },\n    ...\n};\n</code></pre>\n<p>大多数情况下,我们并不需要去设置维度类型,因为会自动判断。但是如果因为数据为空之类原因导致判断不足够准确时,可以手动设置维度类型。</p>\n<p>维度类型(dimension type)可以取这些值:</p>\n<ul>\n<li><code class=\"codespan\">&#39;number&#39;</code>: 默认,表示普通数据。</li>\n<li><code class=\"codespan\">&#39;ordinal&#39;</code>: 对于类目、文本这些 string 类型的数据,如果需要能在数轴上使用,须是 &#39;ordinal&#39; 类型。ECharts 默认会自动判断这个类型。但是自动判断也是不可能很完备的,所以使用者也可以手动强制指定。</li>\n<li><code class=\"codespan\">&#39;time&#39;</code>: 表示时间数据。设置成 <code class=\"codespan\">&#39;time&#39;</code> 则能支持自动解析数据成时间戳(timestamp),比如该维度的数据是 &#39;2017-05-10&#39;,会自动被解析。如果这个维度被用在时间数轴(<a href=\"option.html#xAxis.type\" target=\"_blank\">axis.type</a> 为 <code class=\"codespan\">&#39;time&#39;</code>)上,那么会被自动设置为 <code class=\"codespan\">&#39;time&#39;</code> 类型。时间类型的支持参见 <a href=\"option.html#series.data\" target=\"_blank\">data</a>。</li>\n<li><code class=\"codespan\">&#39;float&#39;</code>: 如果设置成 <code class=\"codespan\">&#39;float&#39;</code>,在存储时候会使用 <code class=\"codespan\">TypedArray</code>,对性能优化有好处。</li>\n<li><code class=\"codespan\">&#39;int&#39;</code>: 如果设置成 <code class=\"codespan\">&#39;int&#39;</code>,在存储时候会使用 <code class=\"codespan\">TypedArray</code>,对性能优化有好处。</li>\n</ul>\n<h2 id=\"-series-encode-\">数据到图形的映射( series.encode )</h2>\n<p>了解了维度的概念后,我们就可以使用 <a href=\"option.html#series.encode\" target=\"_blank\">encode</a> 来做映射。总体是这样的感觉:</p>\n<pre><code class=\"lang-js\">var option = {\n    dataset: {\n        source: [\n            [&#39;score&#39;, &#39;amount&#39;, &#39;product&#39;],\n            [89.3, 58212, &#39;Matcha Latte&#39;],\n            [57.1, 78254, &#39;Milk Tea&#39;],\n            [74.4, 41032, &#39;Cheese Cocoa&#39;],\n            [50.1, 12755, &#39;Cheese Brownie&#39;],\n            [89.7, 20145, &#39;Matcha Cocoa&#39;],\n            [68.1, 79146, &#39;Tea&#39;],\n            [19.6, 91852, &#39;Orange Juice&#39;],\n            [10.6, 101852, &#39;Lemon Juice&#39;],\n            [32.7, 20112, &#39;Walnut Brownie&#39;]\n        ]\n    },\n    xAxis: {},\n    yAxis: {type: &#39;category&#39;},\n    series: [\n        {\n            type: &#39;bar&#39;,\n            encode: {\n                // 将 &quot;amount&quot; 列映射到 X 轴。\n                x: &#39;amount&#39;,\n                // 将 &quot;product&quot; 列映射到 Y 轴。\n                y: &#39;product&#39;\n            }\n        }\n    ]\n};\n</code></pre>\n<p>效果如下:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/dataset-encode-simple0&edit=1&reset=1\" width=\"500\" height=\"300\" ></iframe>\n\n\n\n<p><code class=\"codespan\">series.encode</code> 声明的基本结构如下,其中冒号左边是坐标系、标签等特定名称,如 <code class=\"codespan\">&#39;x&#39;</code>, <code class=\"codespan\">&#39;y&#39;</code>, <code class=\"codespan\">&#39;tooltip&#39;</code> 等,冒号右边是数据中的维度名(string 格式)或者维度的序号(number 格式,从 0 开始计数),可以指定一个或多个维度(使用数组)。通常情况下,下面各种信息不需要所有的都写,按需写即可。</p>\n<p>下面是 <code class=\"codespan\">series.encode</code> 支持的属性:</p>\n<pre><code class=\"lang-js\">// 在任何坐标系和系列中,都支持:\nencode: {\n    // 使用 “名为 product 的维度” 和 “名为 score 的维度” 的值在 tooltip 中显示\n    tooltip: [&#39;product&#39;, &#39;score&#39;]\n    // 使用 “维度 1” 和 “维度 3” 的维度名连起来作为系列名。(有时候名字比较长,这可以避免在 series.name 重复输入这些名字)\n    seriesName: [1, 3],\n    // 表示使用 “维度2” 中的值作为 id。这在使用 setOption 动态更新数据时有用处,可以使新老数据用 id 对应起来,从而能够产生合适的数据更新动画。\n    itemId: 2,\n    // 指定数据项的名称使用 “维度3” 在饼图等图表中有用,可以使这个名字显示在图例(legend)中。\n    itemName: 3\n}\n\n// 直角坐标系(grid/cartesian)特有的属性:\nencode: {\n    // 把 “维度1”、“维度5”、“名为 score 的维度” 映射到 X 轴:\n    x: [1, 5, &#39;score&#39;],\n    // 把“维度0”映射到 Y 轴。\n    y: 0\n}\n\n// 单轴(singleAxis)特有的属性:\nencode: {\n    single: 3\n}\n\n// 极坐标系(polar)特有的属性:\nencode: {\n    radius: 3,\n    angle: 2\n}\n\n// 地理坐标系(geo)特有的属性:\nencode: {\n    lng: 3,\n    lat: 2\n}\n\n// 对于一些没有坐标系的图表,例如饼图、漏斗图等,可以是:\nencode: {\n    value: 3\n}\n</code></pre>\n<p>下面给出个更丰富的 <code class=\"codespan\">series.encode</code> 的示例:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=dataset-encode1&edit=1&reset=1\" width=\"800\" height=\"600\" ></iframe>\n\n\n\n<h2 id=\"-\">视觉通道(颜色、尺寸等)的映射</h2>\n<p>我们可以使用 <a href=\"option.html#visualMap\" target=\"_blank\">visualMap</a> 组件进行视觉通道的映射。详见 <code class=\"codespan\">visualMap</code> 文档的介绍。这是一个示例:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=dataset-encode0&edit=1&reset=1\" width=\"500\" height=\"400\" ></iframe>\n\n\n\n<h2 id=\"-encode\">默认的 encode</h2>\n<p>值得一提的是,当 <code class=\"codespan\">series.encode</code> 并没有指定时,ECharts 针对最常见直角坐标系中的图表(折线图、柱状图、散点图、K线图等)、饼图、漏斗图,会采用一些默认的映射规则。默认的映射规则比较简单,大体是:</p>\n<ul>\n<li>在坐标系中(如直角坐标系、极坐标系等)<ul>\n<li>如果有类目轴(axis.type 为 &#39;category&#39;),则将第一列(行)映射到这个轴上,后续每一列(行)对应一个系列。</li>\n<li>如果没有类目轴,假如坐标系有两个轴(例如直角坐标系的 X Y 轴),则每两列对应一个系列,这两列分别映射到这两个轴上。</li>\n</ul>\n</li>\n<li>如果没有坐标系(如饼图)<ul>\n<li>取第一列(行)为名字,第二列(行)为数值(如果只有一列,则取第一列为数值)。</li>\n</ul>\n</li>\n</ul>\n<p>默认的规则不能满足要求时,就可以自己来配置 <code class=\"codespan\">encode</code>,也并不复杂。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=dataset-default&edit=1&reset=1\" width=\"800\" height=\"400\" ></iframe>\n\n\n\n<h2 id=\"-series-encode-\">几个常见的 series.encode 设置方式举例</h2>\n<p>问:如何把第三列设置为 X 轴,第五列设置为 Y 轴?</p>\n<p>答:</p>\n<pre><code class=\"lang-js\">series: {\n    // 注意维度序号(dimensionIndex)从 0 开始计数,第三列是 dimensions[2]。\n    encode: {x: 2, y: 4},\n    ...\n}\n</code></pre>\n<p>问:如何把第三行设置为 X 轴,第五行设置为 Y 轴?</p>\n<p>答:</p>\n<pre><code class=\"lang-js\">series: {\n    encode: {x: 2, y: 4},\n    seriesLayoutBy: &#39;row&#39;,\n    ...\n}\n</code></pre>\n<p>问:如何把第二列设置为标签?</p>\n<p>答:\n关于标签的显示 <a href=\"option.html#series.label.formatter\" target=\"_blank\">label.formatter</a>,现在支持引用特定维度的值,例如:</p>\n<pre><code class=\"lang-js\">series: {\n    label: {\n        // `&#39;{@score}&#39;` 表示 “名为 score” 的维度里的值。\n        // `&#39;{@[4]}&#39;` 表示引用序号为 4 的维度里的值。\n        formatter: &#39;aaa{@product}bbb{@score}ccc{@[4]}ddd&#39;\n    }\n}\n</code></pre>\n<p>问:如何让第 2 列和第 3 列显示在提示框(tooltip)中?</p>\n<p>答:</p>\n<pre><code class=\"lang-js\">series: {\n    encode: {\n        tooltip: [1, 2]\n        ...\n    },\n    ...\n}\n</code></pre>\n<p>问:数据里没有维度名,那么怎么给出维度名?</p>\n<p>答:</p>\n<pre><code class=\"lang-js\">dataset: {\n    dimensions: [&#39;score&#39;, &#39;amount&#39;],\n    source: [\n        [89.3, 3371],\n        [92.1, 8123],\n        [94.4, 1954],\n        [85.4, 829]\n    ]\n}\n</code></pre>\n<p>问:如何把第三列映射为气泡图的点的大小?</p>\n<p>答:</p>\n<pre><code class=\"lang-js\">var option = {\n    dataset: {\n        source: [\n            [12, 323, 11.2],\n            [23, 167, 8.3],\n            [81, 284, 12],\n            [91, 413, 4.1],\n            [13, 287, 13.5]\n        ]\n    },\n    visualMap: {\n        show: false,\n        dimension: 2, // 指向第三列(列序号从 0 开始记,所以设置为 2)。\n        min: 2, // 需要给出数值范围,最小数值。\n        max: 15, // 需要给出数值范围,最大数值。\n        inRange: {\n            // 气泡尺寸:5 像素到 60 像素。\n            symbolSize: [5, 60]\n        }\n    },\n    xAxis: {},\n    yAxis: {},\n    series: {\n        type: &#39;scatter&#39;\n    }\n};\n</code></pre>\n<p>问:encode 里指定了映射,但是不管用?</p>\n<p>答:可以查查有没有拼错,比如,维度名是:<code class=\"codespan\">&#39;Life Expectancy&#39;</code>,encode 中拼成了 <code class=\"codespan\">&#39;Life Expectency&#39;</code>。</p>\n<h2 id=\"-\">数据的各种格式</h2>\n<p>多数常见图表中,数据适于用二维表的形式描述。广为使用的数据表格软件(如 MS Excel、Numbers)或者关系数据数据库都是二维表。他们的数据可以导出成 JSON 格式,输入到 <code class=\"codespan\">dataset.source</code> 中,在不少情况下可以免去一些数据处理的步骤。</p>\n<blockquote>\n<p>假如数据导出成 csv 文件,那么可以使用一些 csv 工具如 <a href=\"https://github.com/d3/d3-dsv\" target=\"_blank\">dsv</a> 或者 <a href=\"https://github.com/mholt/PapaParse\" target=\"_blank\">PapaParse</a> 将 csv 转成 JSON。</p>\n</blockquote>\n<p>在 JavaScript 常用的数据传输格式中,二维数组可以比较直观的存储二维表。前面的示例都是使用二维数组表示。</p>\n<p>除了二维数组以外,dataset 也支持例如下面 key-value 方式的数据格式,这类格式也非常常见。但是这类格式中,目前并不支持 <a href=\"option.html#series.seriesLayoutBy\" target=\"_blank\">seriesLayoutBy</a> 参数。</p>\n<pre><code class=\"lang-js\">dataset: [{\n    // 按行的 key-value 形式(对象数组),这是个比较常见的格式。\n    source: [\n        {product: &#39;Matcha Latte&#39;, count: 823, score: 95.8},\n        {product: &#39;Milk Tea&#39;, count: 235, score: 81.4},\n        {product: &#39;Cheese Cocoa&#39;, count: 1042, score: 91.2},\n        {product: &#39;Walnut Brownie&#39;, count: 988, score: 76.9}\n    ]\n}, {\n    // 按列的 key-value 形式。\n    source: {\n        &#39;product&#39;: [&#39;Matcha Latte&#39;, &#39;Milk Tea&#39;, &#39;Cheese Cocoa&#39;, &#39;Walnut Brownie&#39;],\n        &#39;count&#39;: [823, 235, 1042, 988],\n        &#39;score&#39;: [95.8, 81.4, 91.2, 76.9]\n    }\n}]\n</code></pre>\n<h2 id=\"-dataset-\">多个 dataset 以及如何引用他们</h2>\n<p>可以同时定义多个 dataset。系列可以通过 <a href=\"option.html#series.datasetIndex\" target=\"_blank\">series.datasetIndex</a> 来指定引用哪个 dataset。例如:</p>\n<pre><code class=\"lang-js\">var option = {\n    dataset: [{\n        // 序号为 0 的 dataset。\n        source: [...],\n    }, {\n        // 序号为 1 的 dataset。\n        source: [...]\n    }, {\n        // 序号为 2 的 dataset。\n        source: [...]\n    }],\n    series: [{\n        // 使用序号为 2 的 dataset。\n        datasetIndex: 2\n    }, {\n        // 使用序号为 1 的 dataset。\n        datasetIndex: 1\n    }]\n}\n</code></pre>\n<h2 id=\"echarts-3-series-data-\">ECharts 3 的数据设置方式(series.data)仍正常使用</h2>\n<p>ECharts 4 之前一直以来的数据声明方式仍然被正常支持,如果系列已经声明了 <a href=\"option.html#series.data\" target=\"_blank\">series.data</a>, 那么就会使用 <a href=\"option.html#series.data\" target=\"_blank\">series.data</a> 而非 <code class=\"codespan\">dataset</code>。</p>\n<pre><code class=\"lang-js\">{\n    xAxis: {\n        type: &#39;category&#39;\n        data: [&#39;Matcha Latte&#39;, &#39;Milk Tea&#39;, &#39;Cheese Cocoa&#39;, &#39;Walnut Brownie&#39;]\n    },\n    yAxis: {},\n    series: [{\n        type: &#39;bar&#39;,\n        name: &#39;2015&#39;,\n        data: [89.3, 92.1, 94.4, 85.4]\n    }, {\n        type: &#39;bar&#39;,\n        name: &#39;2016&#39;,\n        data: [95.8, 89.4, 91.2, 76.9]\n    }, {\n        type: &#39;bar&#39;,\n        name: &#39;2017&#39;,\n        data: [97.7, 83.1, 92.5, 78.1]\n    }]\n}\n</code></pre>\n<p>其实,<a href=\"option.html#series.data\" target=\"_blank\">series.data</a> 也是种会一直存在的重要设置方式。一些特殊的非 table 格式的图表,如 <a href=\"option.html#series-treemap\" target=\"_blank\">treemap</a>、<a href=\"option.html#series-graph\" target=\"_blank\">graph</a>、<a href=\"option.html#series-lines\" target=\"_blank\">lines</a> 等,现在仍不支持在 dataset 中设置,仍然需要使用 <a href=\"option.html#series.data\" target=\"_blank\">series.data</a>。另外,对于巨大数据量的渲染(如百万以上的数据量),需要使用 <a href=\"api.html#echartsInstance.appendData\" target=\"_blank\">appendData</a> 进行增量加载,这种情况不支持使用 <code class=\"codespan\">dataset</code>。</p>\n<h2 id=\"-data-transform-\">数据转换器( data transform )</h2>\n<p>参见 <a href=\"#%E4%BD%BF%E7%94%A8%20transform%20%E8%BF%9B%E8%A1%8C%E6%95%B0%E6%8D%AE%E8%BD%AC%E6%8D%A2\">data transform</a>。</p>\n<h2 id=\"-\">其他</h2>\n<p>目前并非所有图表都支持 dataset。支持 dataset 的图表有:\n<code class=\"codespan\">line</code>、<code class=\"codespan\">bar</code>、<code class=\"codespan\">pie</code>、<code class=\"codespan\">scatter</code>、<code class=\"codespan\">effectScatter</code>、<code class=\"codespan\">parallel</code>、<code class=\"codespan\">candlestick</code>、<code class=\"codespan\">map</code>、<code class=\"codespan\">funnel</code>、<code class=\"codespan\">custom</code>。\n后续会有更多的图表进行支持。</p>\n<p>最后,给出一个示例,多个图表共享一个 <code class=\"codespan\">dataset</code>,并带有联动交互:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=dataset-link&edit=1&reset=1\" width=\"800\" height=\"500\" ></iframe>\n\n\n\n\n"},"使用 transform 进行数据转换":{"type":["*"],"description":"<p>Apache ECharts<sup>TM</sup> 5 开始支持了“数据转换”( data transform )功能。在 echarts 中,“数据转换” 这个词指的是,给定一个已有的“数据集”(<a href=\"option.html#dataset\" target=\"_blank\">dataset</a>)和一个“转换方法”(<a href=\"option.html#dataset.transform\" target=\"_blank\">transform</a>),echarts 能生成一个新的“数据集”,然后可以使用这个新的“数据集”绘制图表。这些工作都可以声明式地完成。</p>\n<p>抽象地来说,数据转换是这样一种公式:<code class=\"codespan\">outData = f(inputData)</code>。<code class=\"codespan\">f</code> 是转换方法,例如:<code class=\"codespan\">filter</code>、<code class=\"codespan\">sort</code>、<code class=\"codespan\">regression</code>、<code class=\"codespan\">boxplot</code>、<code class=\"codespan\">cluster</code>、<code class=\"codespan\">aggregate</code>(todo) 等等。有了数据转换能力后,我们就至少可以做到这些事情:</p>\n<ul>\n<li>把数据分成多份用不同的饼图展现。</li>\n<li>进行一些数据统计运算,并展示结果。</li>\n<li>用某些数据可视化算法处理数据,并展示结果。</li>\n<li>数据排序。</li>\n<li>去除或直选择数据项。</li>\n<li>...</li>\n</ul>\n<h2 id=\"-\">数据转换基础使用</h2>\n<p>在 echarts 中,数据转换是依托于数据集(<a href=\"#dataset\">dataset</a>)来实现的. 我们可以设置 <a href=\"option.html#dataset.transform\" target=\"_blank\">dataset.transform</a> 来表示,此 dataset 的数据,来自于此 transform 的结果。例如。</p>\n<pre><code class=\"lang-js\">var option = {\n    dataset: [{\n        // 这个 dataset 的 index 是 `0`。\n        source: [\n            [&#39;Product&#39;, &#39;Sales&#39;, &#39;Price&#39;, &#39;Year&#39;],\n            [&#39;Cake&#39;, 123, 32, 2011],\n            [&#39;Cereal&#39;, 231, 14, 2011],\n            [&#39;Tofu&#39;, 235, 5, 2011],\n            [&#39;Dumpling&#39;, 341, 25, 2011],\n            [&#39;Biscuit&#39;, 122, 29, 2011],\n            [&#39;Cake&#39;, 143, 30, 2012],\n            [&#39;Cereal&#39;, 201, 19, 2012],\n            [&#39;Tofu&#39;, 255, 7, 2012],\n            [&#39;Dumpling&#39;, 241, 27, 2012],\n            [&#39;Biscuit&#39;, 102, 34, 2012],\n            [&#39;Cake&#39;, 153, 28, 2013],\n            [&#39;Cereal&#39;, 181, 21, 2013],\n            [&#39;Tofu&#39;, 395, 4, 2013],\n            [&#39;Dumpling&#39;, 281, 31, 2013],\n            [&#39;Biscuit&#39;, 92, 39, 2013],\n            [&#39;Cake&#39;, 223, 29, 2014],\n            [&#39;Cereal&#39;, 211, 17, 2014],\n            [&#39;Tofu&#39;, 345, 3, 2014],\n            [&#39;Dumpling&#39;, 211, 35, 2014],\n            [&#39;Biscuit&#39;, 72, 24, 2014],\n        ],\n        // id: &#39;a&#39;\n    }, {\n        // 这个 dataset 的 index 是 `1`。\n        // 这个 `transform` 配置,表示,此 dataset 的数据,来自于此 transform 的结果。\n        transform: {\n            type: &#39;filter&#39;,\n            config: { dimension: &#39;Year&#39;, value: 2011 }\n        },\n        // 我们还可以设置这些可选的属性: `fromDatasetIndex` 或 `fromDatasetId`。\n        // 这些属性,指定了,transform 的输入,来自于哪个 dataset。例如,\n        // `fromDatasetIndex: 0` 表示输入来自于 index 为 `0` 的 dataset 。又例如,\n        // `fromDatasetId: &#39;a&#39;` 表示输入来自于 `id: &#39;a&#39;` 的 dataset。\n        // 当这些属性都不指定时,默认认为,输入来自于 index 为 `0` 的 dataset 。\n    }, {\n        // 这个 dataset 的 index 是 `2`。\n        // 同样,这里因为 `fromDatasetIndex` 和 `fromDatasetId` 都没有被指定,\n        // 那么输入默认来自于 index 为 `0` 的 dataset 。\n        transform: {\n            // 这个类型为 &quot;filter&quot; 的 transform 能够遍历并筛选出满足条件的数据项。\n            type: &#39;filter&#39;,\n            // 每个 transform 如果需要有配置参数的话,都须配置在 `config` 里。\n            // 在这个 &quot;filter&quot; transform 中,`config` 用于指定筛选条件。\n            // 下面这个筛选条件是:选出维度( dimension )&#39;Year&#39; 中值为 2012 的所有\n            // 数据项。\n            config: { dimension: &#39;Year&#39;, value: 2012 }\n        }\n    }, {\n        // 这个 dataset 的 index 是 `3`。\n        transform: {\n            type: &#39;filter&#39;,\n            config: { dimension: &#39;Year&#39;, value: 2013 }\n        }\n    }],\n    series: [{\n        type: &#39;pie&#39;, radius: 50, center: [&#39;25%&#39;, &#39;50%&#39;],\n        // 这个饼图系列,引用了 index 为 `1` 的 dataset 。也就是,引用了上述\n        // 2011 年那个 &quot;filter&quot; transform 的结果。\n        datasetIndex: 1\n    }, {\n        type: &#39;pie&#39;, radius: 50, center: [&#39;50%&#39;, &#39;50%&#39;],\n        datasetIndex: 2\n    }, {\n        type: &#39;pie&#39;, radius: 50, center: [&#39;75%&#39;, &#39;50%&#39;],\n        datasetIndex: 3\n    }]\n};\n</code></pre>\n<p>下面是上述例子的效果,三个饼图分别显示了 2011、2012、2013 年的数据。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=data-transform-multiple-pie&reset=1&edit=1\" width=\"800\" height=\"300\" ></iframe>\n\n\n<p>现在我们简单总结下,使用 transform 时的几个要点:</p>\n<ul>\n<li>在一个空的 dataset 中声明 <code class=\"codespan\">transform</code>, <code class=\"codespan\">fromDatasetIndex</code>/<code class=\"codespan\">fromDatasetId</code> 来表示我们要生成新的数据。</li>\n<li>系列引用这个 dataset 。</li>\n</ul>\n<h2 id=\"-\">数据转换的进阶使用</h2>\n<h4 id=\"-transform\">链式声明 transform</h4>\n<p><code class=\"codespan\">transform</code> 可以被链式声明,这是一个语法糖。</p>\n<pre><code class=\"lang-js\">option: {\n    dataset: [{\n        source: [ ... ] // 原始数据\n    }, {\n        // 几个 transform 被声明成 array ,他们构成了一个链,\n        // 前一个 transform 的输出是后一个 transform 的输入。\n        transform: [{\n            type: &#39;filter&#39;,\n            config: { dimension: &#39;Product&#39;, value: &#39;Tofu&#39; }\n        }, {\n            type: &#39;sort&#39;,\n            config: { dimension: &#39;Year&#39;, order: &#39;desc&#39; }\n        }]\n    }],\n    series: {\n        type: &#39;pie&#39;,\n        // 这个系列引用上述 transform 的结果。\n        datasetIndex: 1\n    }\n}\n</code></pre>\n<blockquote>\n<p>注意:理论上,任何 transform 都可能有多个输入或多个输出。但是,如果一个 transform 被链式声明,它只能获取前一个 transform 的第一个输出作为输入(第一个 transform 除外),以及它只能把自己的第一个输出给到后一个 transform (最后一个 transform 除外)。</p>\n</blockquote>\n<h4 id=\"-transform-data\">一个 transform 输出多个 data</h4>\n<p>在大多数场景下,transform 只需输出一个 data 。但是也有一些场景,需要输出多个 data ,每个 data 可以被不同的 series 或者 dataset 所使用。</p>\n<p>例如,在内置的 &quot;boxplot&quot; transform 中,除了 boxplot 系列所需要的 data 外,离群点( outlier )也会被生成,并且可以用例如散点图系列显示出来。例如,<a href=\"https://echarts.apache.org/examples/zh/editor.html?c=boxplot-light-velocity&amp;edit=1&amp;reset=1\" target=\"_blank\">example</a>。</p>\n<p>我们提供配置 <a href=\"option.html#dataset.fromTransformResult\" target=\"_blank\">dataset.fromTransformResult</a> 来满足这种情况,例如:</p>\n<pre><code class=\"lang-js\">option = {\n    dataset: [{\n        // 这个 dataset 的 index 为 `0`。\n        source: [...] // 原始数据\n    }, {\n        // 这个 dataset 的 index 为 `1`。\n        transform: {\n            type: &#39;boxplot&#39;\n        }\n        // 这个 &quot;boxplot&quot; transform 生成了两个数据:\n        // result[0]: boxplot series 所需的数据。\n        // result[1]: 离群点数据。\n        // 当其他 series 或者 dataset 引用这个 dataset 时,他们默认只能得到\n        // result[0] 。\n        // 如果想要他们得到 result[1] ,需要额外声明如下这样一个 dataset :\n    }, {\n        // 这个 dataset 的 index 为 `2`。\n        // 这个额外的 dataset 指定了数据来源于 index 为 `1` 的 dataset。\n        fromDatasetIndex: 1,\n        // 并且指定了获取 transform result[1] 。\n        fromTransformResult: 1\n    }],\n    xAxis: {\n        type: &#39;category&#39;\n    },\n    yAxis: {\n    },\n    series: [{\n        name: &#39;boxplot&#39;,\n        type: &#39;boxplot&#39;,\n        // Reference the data from result[0].\n        // 这个 series 引用 index 为 `1` 的 dataset 。\n        datasetIndex: 1\n    }, {\n        name: &#39;outlier&#39;,\n        type: &#39;scatter&#39;,\n        // 这个 series 引用 index 为 `2` 的 dataset 。\n        // 从而也就得到了上述的 transform result[1] (即离群点数据)\n        datasetIndex: 2\n    }]\n};\n</code></pre>\n<p>另外,<a href=\"option.html#dataset.fromTransformResult\" target=\"_blank\">dataset.fromTransformResult</a> 和 <a href=\"option.html#dataset.transform\" target=\"_blank\">dataset.transform</a> 能同时出现在一个 dataset 中,这表示,这个 transform 的输入,是上游的结果中以 <code class=\"codespan\">fromTransformResult</code> 获取的结果。例如:</p>\n<pre><code class=\"lang-js\">{\n    fromDatasetIndex: 1,\n    fromTransformResult: 1,\n    transform: {\n        type: &#39;sort&#39;,\n        config: { dimension: 2, order: &#39;desc&#39; }\n    }\n}\n</code></pre>\n<h4 id=\"-debug\">在开发环境中 debug</h4>\n<p>使用 transform 时,有时候我们会配不对,显示不出来结果,并且不知道哪里错了。所以,这里提供了一个配置项 <code class=\"codespan\">transform.print</code> 方便 debug 。这个配置项只在开发环境中生效。如下例:</p>\n<pre><code class=\"lang-js\">option = {\n    dataset: [{\n        source: [ ... ]\n    }, {\n        transform: {\n            type: &#39;filter&#39;,\n            config: { ... }\n            // 配置为 `true` 后, transform 的结果\n            // 会被 console.log 打印出来。\n            print: true\n        }\n    }],\n    ...\n}\n</code></pre>\n<h2 id=\"-filter\">数据转换器 &quot;filter&quot;</h2>\n<p>echarts 内置提供了能起过滤作用的数据转换器。我们只需声明 <code class=\"codespan\">transform.type: &quot;filter&quot;</code>,以及给出数据筛选条件。如下例:</p>\n<pre><code class=\"lang-js\">option = {\n    dataset: [{\n        source: [\n            [&#39;Product&#39;, &#39;Sales&#39;, &#39;Price&#39;, &#39;Year&#39;],\n            [&#39;Cake&#39;, 123, 32, 2011],\n            [&#39;Latte&#39;, 231, 14, 2011],\n            [&#39;Tofu&#39;, 235, 5, 2011],\n            [&#39;Milk Tee&#39;, 341, 25, 2011],\n            [&#39;Porridge&#39;, 122, 29, 2011],\n            [&#39;Cake&#39;, 143, 30, 2012],\n            [&#39;Latte&#39;, 201, 19, 2012],\n            [&#39;Tofu&#39;, 255, 7, 2012],\n            [&#39;Milk Tee&#39;, 241, 27, 2012],\n            [&#39;Porridge&#39;, 102, 34, 2012],\n            [&#39;Cake&#39;, 153, 28, 2013],\n            [&#39;Latte&#39;, 181, 21, 2013],\n            [&#39;Tofu&#39;, 395, 4, 2013],\n            [&#39;Milk Tee&#39;, 281, 31, 2013],\n            [&#39;Porridge&#39;, 92, 39, 2013],\n            [&#39;Cake&#39;, 223, 29, 2014],\n            [&#39;Latte&#39;, 211, 17, 2014],\n            [&#39;Tofu&#39;, 345, 3, 2014],\n            [&#39;Milk Tee&#39;, 211, 35, 2014],\n            [&#39;Porridge&#39;, 72, 24, 2014]\n        ]\n    }, {\n        transform: {\n            type: &#39;filter&#39;,\n            config: { dimension: &#39;Year&#39;, &#39;=&#39;: 2011 }\n            // 这个筛选条件表示,遍历数据,筛选出维度( dimension )\n            // &#39;Year&#39; 上值为 2011 的所有数据项。\n        }\n    }],\n    series: {\n        type: &#39;pie&#39;,\n        datasetIndex: 1\n    }\n};\n</code></pre>\n<p><br>\n<br>\n这是 filter 的另一个例子的效果:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=data-transform-filter&reset=1&edit=1\" width=\"600\" height=\"350\" ></iframe>\n\n\n\n<p>在 &quot;filter&quot; transform 中,有这些要素:</p>\n<p><strong>关于维度( dimension ):</strong></p>\n<p><code class=\"codespan\">config.dimension</code> 指定了维度,能设成这样的值:</p>\n<ul>\n<li>设定成声明在 dataset 中的维度名,例如 <code class=\"codespan\">config: { dimension: &#39;Year&#39;, &#39;=&#39;: 2011 }</code>。不过, dataset 中维度名的声明并非强制,所以我们也可以</li>\n<li>设定成 dataset 中的维度 index (index 值从 0 开始)例如 <code class=\"codespan\">config: { dimension: 3, &#39;=&#39;: 2011 }</code>。</li>\n</ul>\n<p><strong>关于关系比较操作符:</strong></p>\n<p>关系操作符,可以设定这些:\n<code class=\"codespan\">&gt;</code>(<code class=\"codespan\">gt</code>)、<code class=\"codespan\">&gt;=</code>(<code class=\"codespan\">gte</code>)、<code class=\"codespan\">&lt;</code>(<code class=\"codespan\">lt</code>)、<code class=\"codespan\">&lt;=</code>(<code class=\"codespan\">lte</code>)、<code class=\"codespan\">=</code>(<code class=\"codespan\">eq</code>)、<code class=\"codespan\">!=</code>(<code class=\"codespan\">ne</code>、<code class=\"codespan\">&lt;&gt;</code>)、<code class=\"codespan\">reg</code>。(小括号中的符号或名字,是别名,设置起来作用相同)。他们首先基本地能基于数值大小进行比较,然后也有些额外的功能特性:</p>\n<ul>\n<li>多个关系操作符能声明在一个 {} 中,例如 <code class=\"codespan\">{ dimension: &#39;Price&#39;, &#39;&gt;=&#39;: 20, &#39;&lt;&#39;: 30 }</code>。这表示“与”的关系,即,筛选出价格大于等于 20 小雨 30 的数据项。</li>\n<li>data 里的值,不仅可以是数值( number ),也可以是“类数值的字符串”(“ numeric string ”)。“类数值的字符串”本身是一个字符串,但是可以被转换为字面所描述的数值,例如 <code class=\"codespan\">&#39; 123 &#39;</code>。转换过程中,空格(全角半角空格)和换行符都能被消除( trim )。</li>\n<li>如果我们需要对日期对象(JS <code class=\"codespan\">Date</code>)或者日期字符串(如 &#39;2012-05-12&#39;)进行比较,我们需要手动指定 <code class=\"codespan\">parser: &#39;time&#39;</code>,例如 <code class=\"codespan\">config: { dimension: 3, lt: &#39;2012-05-12&#39;, parser: &#39;time&#39; }</code>。</li>\n<li>纯字符串比较也被支持,但是只能用在 <code class=\"codespan\">=</code> 或 <code class=\"codespan\">!=</code> 上。而 <code class=\"codespan\">&gt;</code>, <code class=\"codespan\">&gt;=</code>, <code class=\"codespan\">&lt;</code>, <code class=\"codespan\">&lt;=</code> 并不支持纯字符串比较,也就是说,这四个操作符的右值,不能是字符串。</li>\n<li><code class=\"codespan\">reg</code> 操作符能提供正则表达式比较。例如, <code class=\"codespan\">{ dimension: &#39;Name&#39;, reg: /\\s+Müller\\s*$/ }</code> 能在 <code class=\"codespan\">&#39;Name&#39;</code> 维度上选出姓 <code class=\"codespan\">&#39;Müller&#39;</code> 的数据项。</li>\n</ul>\n<p><strong>关于逻辑比较:</strong></p>\n<p>我们也支持了逻辑比较操作符 <strong>与或非</strong>( <code class=\"codespan\">and</code> | <code class=\"codespan\">or</code> | <code class=\"codespan\">not</code> ):</p>\n<pre><code class=\"lang-js\">option = {\n    dataset: [{\n        source: [...]\n    }, {\n        transform: {\n            type: &#39;filter&#39;,\n            config: {\n                // 使用 and 操作符。\n                // 类似地,同样的位置也可以使用 “or” 或 “not”。\n                // 但是注意 “not” 后应该跟一个 {...} 而非 [...] 。\n                and: [\n                    { dimension: &#39;Year&#39;, &#39;=&#39;: 2011 },\n                    { dimension: &#39;Price&#39;, &#39;&gt;=&#39;: 20, &#39;&lt;&#39;: 30 }\n                ]\n            }\n            // 这个表达的是,选出 2011 年价格大于等于 20 但小于 30 的数据项。\n        }\n    }],\n    series: {\n        type: &#39;pie&#39;,\n        datasetIndex: 1\n    }\n};\n</code></pre>\n<p><code class=\"codespan\">and</code>/<code class=\"codespan\">or</code>/<code class=\"codespan\">not</code> 自然可以被嵌套,例如:</p>\n<pre><code class=\"lang-js\">transform: {\n    type: &#39;filter&#39;,\n    config: {\n        or: [{\n            and: [{\n                dimension: &#39;Price&#39;, &#39;&gt;=&#39;: 10, &#39;&lt;&#39;: 20\n            }, {\n                dimension: &#39;Sales&#39;, &#39;&lt;&#39;: 100\n            }, {\n                not: { dimension: &#39;Product&#39;, &#39;=&#39;: &#39;Tofu&#39; }\n            }]\n        }, {\n            and: [{\n                dimension: &#39;Price&#39;, &#39;&gt;=&#39;: 10, &#39;&lt;&#39;: 20\n            }, {\n                dimension: &#39;Sales&#39;, &#39;&lt;&#39;: 100\n            }, {\n                not: { dimension: &#39;Product&#39;, &#39;=&#39;: &#39;Cake&#39; }\n            }]\n        }]\n    }\n}\n</code></pre>\n<p><strong>关于解析器( parser ):</strong></p>\n<p>还可以指定“解析器”( parser )来对值进行解析后再做比较。现在支持的解析器有:</p>\n<ul>\n<li><code class=\"codespan\">parser: &#39;time&#39;</code>:把原始值解析成时间戳( timestamp )后再做比较。这个解析器的行为,和 <code class=\"codespan\">echarts.time.parse</code> 相同,即,当原始值为时间对象( JS <code class=\"codespan\">Date</code> 实例),或者是时间戳,或者是描述时间的字符串(例如 <code class=\"codespan\">&#39;2012-05-12 03:11:22&#39;</code> ),都可以被解析为时间戳,然后就可以基于数值大小进行比较。如果原始数据是其他不可解析为时间戳的值,那么会被解析为 NaN。</li>\n<li><code class=\"codespan\">parser: &#39;trim&#39;</code>:如果原始数据是字符串,则把字符串两端的空格(全角半角)和换行符去掉。如果不是字符串,还保持为原始数据。</li>\n<li><code class=\"codespan\">parser: &#39;number&#39;</code>:强制把原始数据转成数值。如果不能转成有意义的数值,那么转成 <code class=\"codespan\">NaN</code>。在大多数场景下,我们并不需要这个解析器,因为按默认策略,“像数值的字符串”就会被转成数值。但是默认策略比较严格,这个解析器比较宽松,如果我们遇到含有尾缀的字符串(例如 <code class=\"codespan\">&#39;33%&#39;</code>, <code class=\"codespan\">12px</code>),我们需要手动指定 <code class=\"codespan\">parser: &#39;number&#39;</code>,从而去掉尾缀转为数值才能比较。</li>\n</ul>\n<p>这个例子显示了如何使用 <code class=\"codespan\">parser: &#39;time&#39;</code>:</p>\n<pre><code class=\"lang-js\">option = {\n    dataset: [{\n        source: [\n            [&#39;Product&#39;, &#39;Sales&#39;, &#39;Price&#39;, &#39;Date&#39;],\n            [&#39;Milk Tee&#39;, 311, 21, &#39;2012-05-12&#39;],\n            [&#39;Cake&#39;, 135, 28, &#39;2012-05-22&#39;],\n            [&#39;Latte&#39;, 262, 36, &#39;2012-06-02&#39;],\n            [&#39;Milk Tee&#39;, 359, 21, &#39;2012-06-22&#39;],\n            [&#39;Cake&#39;, 121, 28, &#39;2012-07-02&#39;],\n            [&#39;Latte&#39;, 271, 36, &#39;2012-06-22&#39;],\n            ...\n        ]\n    }, {\n        transform: {\n            type: &#39;filter&#39;,\n            config: {\n                { dimension: &#39;Date&#39;, &#39;&gt;=&#39;: &#39;2012-05&#39;, &#39;&lt;&#39;: &#39;2012-06&#39;, parser: &#39;time&#39; }\n            }\n        }\n    }]\n}\n</code></pre>\n<p><strong>形式化定义:</strong></p>\n<p>最后,我们给出,数据转换器 &quot;filter&quot; 的 config 的形式化定义:</p>\n<pre><code class=\"lang-ts\">type FilterTransform = {\n    type: &#39;filter&#39;;\n    config: ConditionalExpressionOption;\n};\ntype ConditionalExpressionOption =\n    true | false | RelationalExpressionOption | LogicalExpressionOption;\ntype RelationalExpressionOption = {\n    dimension: DimensionName | DimensionIndex;\n    parser?: &#39;time&#39; | &#39;trim&#39; | &#39;number&#39;;\n    lt?: DataValue; // less than\n    lte?: DataValue; // less than or equal\n    gt?: DataValue; // greater than\n    gte?: DataValue; // greater than or equal\n    eq?: DataValue; // equal\n    ne?: DataValue; // not equal\n    &#39;&lt;&#39;?: DataValue; // lt\n    &#39;&lt;=&#39;?: DataValue; // lte\n    &#39;&gt;&#39;?: DataValue; // gt\n    &#39;&gt;=&#39;?: DataValue; // gte\n    &#39;=&#39;?: DataValue; // eq\n    &#39;!=&#39;?: DataValue; // ne\n    &#39;&lt;&gt;&#39;?: DataValue; // ne (SQL style)\n    reg?: RegExp | string; // RegExp\n};\ntype LogicalExpressionOption = {\n    and?: ConditionalExpressionOption[];\n    or?: ConditionalExpressionOption[];\n    not?: ConditionalExpressionOption;\n};\ntype DataValue = string | number | Date;\ntype DimensionName = string;\ntype DimensionIndex = number;\n</code></pre>\n<h2 id=\"-sort\">数据转换器 &quot;sort&quot;</h2>\n<p>&quot;sort&quot; 是另一个内置的数据转换器,用于排序数据。目前主要能用于在类目轴( <code class=\"codespan\">axis.type: &#39;category&#39;</code> )中显示排过序的数据。例如:</p>\n<pre><code class=\"lang-js\">option = {\n    dataset: [{\n        dimensions: [&#39;name&#39;, &#39;age&#39;, &#39;profession&#39;, &#39;score&#39;, &#39;date&#39;],\n        source: [\n            [&#39; Hannah Krause &#39;, 41, &#39;Engineer&#39;, 314, &#39;2011-02-12&#39;],\n            [&#39;Zhao Qian &#39;, 20, &#39;Teacher&#39;, 351, &#39;2011-03-01&#39;],\n            [&#39; Jasmin Krause &#39;, 52, &#39;Musician&#39;, 287, &#39;2011-02-14&#39;],\n            [&#39;Li Lei&#39;, 37, &#39;Teacher&#39;, 219, &#39;2011-02-18&#39;],\n            [&#39; Karle Neumann &#39;, 25, &#39;Engineer&#39;, 253, &#39;2011-04-02&#39;],\n            [&#39; Adrian Groß&#39;, 19, &#39;Teacher&#39;, null, &#39;2011-01-16&#39;],\n            [&#39;Mia Neumann&#39;, 71, &#39;Engineer&#39;, 165, &#39;2011-03-19&#39;],\n            [&#39; Böhm Fuchs&#39;, 36, &#39;Musician&#39;, 318, &#39;2011-02-24&#39;],\n            [&#39;Han Meimei &#39;, 67, &#39;Engineer&#39;, 366, &#39;2011-03-12&#39;],\n        ]\n    }, {\n        transform: {\n            type: &#39;sort&#39;,\n            // 按分数排序\n            config: { dimension: &#39;score&#39;, order: &#39;asc&#39; }\n        }\n    }],\n    series: {\n        type: &#39;bar&#39;,\n        datasetIndex: 1\n    },\n    ...\n};\n</code></pre>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=data-transform-sort-bar&reset=1&edit=1\" width=\"600\" height=\"350\" ></iframe>\n\n\n\n<p>数据转换器 &quot;sort&quot; 还有一些额外的功能:</p>\n<ul>\n<li>可以多重排序,多个维度一起排序。见下面的例子。</li>\n<li>排序规则是这样的:<ul>\n<li>默认按照数值大小排序。其中,“可转为数值的字符串”也被转换成数值,和其他数值一起按大小排序。</li>\n<li>对于其他“不能转为数值的字符串”,也能在它们之间按字符串进行排序。这个特性有助于这种场景:把相同标签的数据项排到一起,尤其是当多个维度共同排序时。见下面的例子。</li>\n<li>当“数值及可转为数值的字符串”和“不能转为数值的字符串”进行排序时,或者它们和“其他类型的值”进行比较时,它们本身是不知如何进行比较的。那么我们称呼“后者”为“incomparable”,并且可以设置 <code class=\"codespan\">incomparable: &#39;min&#39; | &#39;max&#39;</code> 来指定一个“incomparable”在这个比较中是最大还是最小,从而能使它们能产生比较结果。这个设定的用途,比如可以是,决定空值(例如 <code class=\"codespan\">null</code>, <code class=\"codespan\">undefined</code>, <code class=\"codespan\">NaN</code>, <code class=\"codespan\">&#39;&#39;</code>, <code class=\"codespan\">&#39;-&#39;</code>)在排序的头还是尾。</li>\n</ul>\n</li>\n<li>过滤器 <code class=\"codespan\">filter: &#39;time&#39; | &#39;trim&#39; | &#39;number&#39;</code> 可以被使用,和数据转换器 &quot;filter&quot; 中的情况一样。<ul>\n<li>如果要对时间进行排序(例如,值为 JS <code class=\"codespan\">Date</code> 实例或者时间字符串如 <code class=\"codespan\">&#39;2012-03-12 11:13:54&#39;</code>),我们需要声明 <code class=\"codespan\">parser: &#39;time&#39;</code>。</li>\n<li>如果需要对有后缀的数值进行排序(如 <code class=\"codespan\">&#39;33%&#39;</code>, <code class=\"codespan\">&#39;16px&#39;</code>)我们需要声明 <code class=\"codespan\">parser: &#39;number&#39;</code>。</li>\n</ul>\n</li>\n</ul>\n<p>这是一个“多维度排序”的例子。</p>\n<pre><code class=\"lang-js\">option = {\n    dataset: [{\n        dimensions: [&#39;name&#39;, &#39;age&#39;, &#39;profession&#39;, &#39;score&#39;, &#39;date&#39;],\n        source: [\n            [&#39; Hannah Krause &#39;, 41, &#39;Engineer&#39;, 314, &#39;2011-02-12&#39;],\n            [&#39;Zhao Qian &#39;, 20, &#39;Teacher&#39;, 351, &#39;2011-03-01&#39;],\n            [&#39; Jasmin Krause &#39;, 52, &#39;Musician&#39;, 287, &#39;2011-02-14&#39;],\n            [&#39;Li Lei&#39;, 37, &#39;Teacher&#39;, 219, &#39;2011-02-18&#39;],\n            [&#39; Karle Neumann &#39;, 25, &#39;Engineer&#39;, 253, &#39;2011-04-02&#39;],\n            [&#39; Adrian Groß&#39;, 19, &#39;Teacher&#39;, null, &#39;2011-01-16&#39;],\n            [&#39;Mia Neumann&#39;, 71, &#39;Engineer&#39;, 165, &#39;2011-03-19&#39;],\n            [&#39; Böhm Fuchs&#39;, 36, &#39;Musician&#39;, 318, &#39;2011-02-24&#39;],\n            [&#39;Han Meimei &#39;, 67, &#39;Engineer&#39;, 366, &#39;2011-03-12&#39;],\n        ]\n    }, {\n        transform: {\n            type: &#39;sort&#39;,\n            config: [\n                // 对两个维度按声明的优先级分别排序。\n                { dimension: &#39;profession&#39;, order: &#39;desc&#39; },\n                { dimension: &#39;score&#39;, order: &#39;desc&#39; }\n            ]\n        }\n    }],\n    series: {\n        type: &#39;bar&#39;,\n        datasetIndex: 1\n    },\n    ...\n};\n</code></pre>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/data-transform-multiple-sort-bar&reset=1&edit=1\" width=\"600\" height=\"350\" ></iframe>\n\n\n\n<p>最后,我们给出数据转换器 &quot;sort&quot; 的 config 的形式化定义。</p>\n<pre><code class=\"lang-ts\">type SortTransform = {\n    type: &#39;filter&#39;;\n    config: OrderExpression | OrderExpression[];\n};\ntype OrderExpression = {\n    dimension: DimensionName | DimensionIndex;\n    order: &#39;asc&#39; | &#39;desc&#39;;\n    incomparable?: &#39;min&#39; | &#39;max&#39;;\n    parser?: &#39;time&#39; | &#39;trim&#39; | &#39;number&#39;;\n};\ntype DimensionName = string;\ntype DimensionIndex = number;\n</code></pre>\n<h2 id=\"-\">使用外部的数据转换器</h2>\n<p>除了上述的内置的数据转换器外,我们也可以使用外部的数据转换器。外部数据转换器能提供或自己定制更丰富的功能。下面的例子中,我们使用第三方库 <a href=\"https://github.com/ecomfe/echarts-stat\" target=\"_blank\">ecStat</a> 提供的数据转换器。</p>\n<p>生成数据的回归线:</p>\n<pre><code class=\"lang-js\">// 首先要注册外部数据转换器。\necharts.registerTransform(ecStatTransform(ecStat).regression);\n</code></pre>\n<pre><code class=\"lang-js\">option = {\n    dataset: [{\n        source: rawData\n    }, {\n        transform: {\n            // 引用注册的数据转换器。\n            // 注意,每个外部的数据转换器,都有名空间(如 &#39;ecStat:xxx&#39;,&#39;ecStat&#39; 是名空间)。\n            // 而内置数据转换器(如 &#39;filter&#39;, &#39;sort&#39;)没有名空间。\n            type: &#39;ecStat:regression&#39;,\n            config: {\n                // 这里是此外部数据转换器所需的参数。\n                method: &#39;exponential&#39;\n            }\n        }\n    }],\n    xAxis: { type: &#39;category&#39; },\n    yAxis: {},\n    series: [{\n        name: &#39;scatter&#39;,\n        type: &#39;scatter&#39;,\n        datasetIndex: 0\n    }, {\n        name: &#39;regression&#39;,\n        type: &#39;line&#39;,\n        symbol: &#39;none&#39;,\n        datasetIndex: 1\n    }]\n};\n</code></pre>\n<p>一些使用外部转换器的例子:</p>\n<ul>\n<li><a href=\"https://echarts.apache.org/examples/zh/editor.html?c=data-transform-aggregate&amp;edit=1&amp;reset=1\" target=\"_blank\">聚集</a></li>\n<li><a href=\"https://echarts.apache.org/examples/zh/editor.html?c=bar-histogram&amp;edit=1&amp;reset=1\" target=\"_blank\">直方图</a></li>\n<li><a href=\"https://echarts.apache.org/examples/zh/editor.html?c=scatter-clustering&amp;edit=1&amp;reset=1\" target=\"_blank\">简单聚类</a></li>\n<li><a href=\"https://echarts.apache.org/examples/zh/editor.html?c=scatter-linear-regression&amp;edit=1&amp;reset=1\" target=\"_blank\">线性回归线</a></li>\n<li><a href=\"https://echarts.apache.org/examples/zh/editor.html?c=scatter-exponential-regression&amp;edit=1&amp;reset=1\" target=\"_blank\">指数回归线</a></li>\n<li><a href=\"https://echarts.apache.org/examples/zh/editor.html?c=scatter-logarithmic-regression&amp;edit=1&amp;reset=1\" target=\"_blank\">对数回归线</a></li>\n<li><a href=\"https://echarts.apache.org/examples/zh/editor.html?c=scatter-polynomial-regression&amp;edit=1&amp;reset=1\" target=\"_blank\">多项式回归线</a></li>\n</ul>\n"},"在图表中加入交互组件":{"type":["*"],"description":"<p>除了图表外 Apache ECharts<sup>TM</sup> 中,提供了很多交互组件。例如:</p>\n<p><code class=\"codespan\">图例组件</code> <a href=\"option.html#legend\" target=\"_blank\">legend</a>、<code class=\"codespan\">标题组件</code> <a href=\"option.html#title\" target=\"_blank\">title</a>、<code class=\"codespan\">视觉映射组件</code> <a href=\"option.html#visualMap\" target=\"_blank\">visualMap</a>、<code class=\"codespan\">数据区域缩放组件</code> <a href=\"option.html#dataZoom\" target=\"_blank\">dataZoom</a>、<code class=\"codespan\">时间线组件</code> <a href=\"option.html#timeline\" target=\"_blank\">timeline</a></p>\n<p>下面以 <code class=\"codespan\">数据区域缩放组件</code> <a href=\"option.html#dataZoom\" target=\"_blank\">dataZoom</a> 为例,介绍如何加入这种组件。</p>\n<h2 id=\"-datazoom-\">数据区域缩放组件(dataZoom)介绍</h2>\n<p>『概览数据整体,按需关注数据细节』是数据可视化的基本交互需求。<code class=\"codespan\">dataZoom</code> 组件能够在直角坐标系(<a href=\"option.html#grid\" target=\"_blank\">grid</a>)、极坐标系(<a href=\"option.html#polar\" target=\"_blank\">polar</a>)中实现这一功能。</p>\n<p><strong>如下例子:</strong></p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/scatter-dataZoom-all&edit=1&reset=1\" width=\"600\" height=\"400\" ></iframe>\n\n\n<p><br></p>\n<ul>\n<li><code class=\"codespan\">dataZoom</code> 组件是对 <code class=\"codespan\">数轴(axis)</code> 进行『数据窗口缩放』『数据窗口平移』操作。</li>\n</ul>\n<blockquote>\n<p>可以通过 <a href=\"option.html#dataZoom.xAxisIndex\" target=\"_blank\">dataZoom.xAxisIndex</a> 或 <a href=\"option.html#dataZoom.yAxisIndex\" target=\"_blank\">dataZoom.yAxisIndex</a> 来指定 <code class=\"codespan\">dataZoom</code> 控制哪个或哪些数轴。</p>\n</blockquote>\n<ul>\n<li><p><code class=\"codespan\">dataZoom</code> 组件可同时存在多个,起到共同控制的作用。控制同一个数轴的组件,会自动联动。下面例子中会详细说明。</p>\n</li>\n<li><p><code class=\"codespan\">dataZoom</code> 的运行原理是通过『数据过滤』来达到『数据窗口缩放』的效果。</p>\n<p>  数据过滤模式的设置不同,效果也不同,参见:<a href=\"option.html#dataZoom.filterMode\" target=\"_blank\">dataZoom.filterMode</a>。</p>\n</li>\n<li><p><code class=\"codespan\">dataZoom</code> 的数据窗口范围的设置,目前支持两种形式:</p>\n<ul>\n<li><p>百分比形式:参见 <a href=\"option.html#dataZoom.start\" target=\"_blank\">dataZoom.start</a> 和 <a href=\"option.html#dataZoom.end\" target=\"_blank\">dataZoom.end</a>。</p>\n</li>\n<li><p>绝对数值形式:参见 <a href=\"option.html#dataZoom.startValue\" target=\"_blank\">dataZoom.startValue</a> 和 <a href=\"option.html#dataZoom.endValue\" target=\"_blank\">dataZoom.endValue</a>。</p>\n</li>\n</ul>\n</li>\n</ul>\n<p><strong>dataZoom 组件现在支持几种子组件:</strong></p>\n<ul>\n<li><p><a href=\"option.html#dataZoom-inside\" target=\"_blank\">内置型数据区域缩放组件(dataZoomInside)</a>:内置于坐标系中。</p>\n</li>\n<li><p><a href=\"option.html#dataZoom-slider\" target=\"_blank\">滑动条型数据区域缩放组件(dataZoomSlider)</a>:有单独的滑动条操作。</p>\n</li>\n<li><p><a href=\"option.html#toolbox.feature.dataZoom\" target=\"_blank\">框选型数据区域缩放组件(dataZoomSelect)</a>:全屏的选框进行数据区域缩放。入口和配置项均在 <code class=\"codespan\">toolbox</code>中。</p>\n</li>\n</ul>\n<h2 id=\"-datazoom-\">在代码加入 dataZoom 组件</h2>\n<p>先只在对单独一个横轴,加上 dataZoom 组件,代码示例如下:</p>\n<pre><code class=\"lang-javascript\">\noption = {\n    xAxis: {\n        type: &#39;value&#39;\n    },\n    yAxis: {\n        type: &#39;value&#39;\n    },\n    dataZoom: [\n        {   // 这个dataZoom组件,默认控制x轴。\n            type: &#39;slider&#39;, // 这个 dataZoom 组件是 slider 型 dataZoom 组件\n            start: 10,      // 左边在 10% 的位置。\n            end: 60         // 右边在 60% 的位置。\n        }\n    ],\n    series: [\n        {\n            type: &#39;scatter&#39;, // 这是个『散点图』\n            itemStyle: {\n                opacity: 0.8\n            },\n            symbolSize: function (val) {\n                return val[2] * 40;\n            },\n            data: [[&quot;14.616&quot;,&quot;7.241&quot;,&quot;0.896&quot;],[&quot;3.958&quot;,&quot;5.701&quot;,&quot;0.955&quot;],[&quot;2.768&quot;,&quot;8.971&quot;,&quot;0.669&quot;],[&quot;9.051&quot;,&quot;9.710&quot;,&quot;0.171&quot;],[&quot;14.046&quot;,&quot;4.182&quot;,&quot;0.536&quot;],[&quot;12.295&quot;,&quot;1.429&quot;,&quot;0.962&quot;],[&quot;4.417&quot;,&quot;8.167&quot;,&quot;0.113&quot;],[&quot;0.492&quot;,&quot;4.771&quot;,&quot;0.785&quot;],[&quot;7.632&quot;,&quot;2.605&quot;,&quot;0.645&quot;],[&quot;14.242&quot;,&quot;5.042&quot;,&quot;0.368&quot;]]\n        }\n    ]\n}\n</code></pre>\n<p>可以看到如下结果:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/scatter-tutorial-dataZoom-1&edit=1&reset=1\" width=\"600\" height=\"300\" ></iframe>\n\n\n<p><br></p>\n<p>上面的图只能拖动 dataZoom 组件导致窗口变化。如果想在坐标系内进行拖动,以及用滚轮(或移动触屏上的两指滑动)进行缩放,那么要再加上一个 inside 型的 dataZoom组件。直接在上面的 <code class=\"codespan\">option.dataZoom</code> 中增加即可:</p>\n<pre><code class=\"lang-javascript\">option = {\n    ...,\n    dataZoom: [\n        {   // 这个dataZoom组件,默认控制x轴。\n            type: &#39;slider&#39;, // 这个 dataZoom 组件是 slider 型 dataZoom 组件\n            start: 10,      // 左边在 10% 的位置。\n            end: 60         // 右边在 60% 的位置。\n        },\n        {   // 这个dataZoom组件,也控制x轴。\n            type: &#39;inside&#39;, // 这个 dataZoom 组件是 inside 型 dataZoom 组件\n            start: 10,      // 左边在 10% 的位置。\n            end: 60         // 右边在 60% 的位置。\n        }\n    ],\n    ...\n}\n</code></pre>\n<p>可以看到如下结果(能在坐标系中进行滑动,以及使用滚轮缩放了):</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/scatter-tutorial-dataZoom-2&edit=1&reset=1\" width=\"600\" height=\"300\" ></iframe>\n\n\n\n<p><br></p>\n<p>如果想 y 轴也能够缩放,那么在 y 轴上也加上 dataZoom 组件:</p>\n<pre><code class=\"lang-javascript\">option = {\n    ...,\n    dataZoom: [\n        {\n            type: &#39;slider&#39;,\n            xAxisIndex: 0,\n            start: 10,\n            end: 60\n        },\n        {\n            type: &#39;inside&#39;,\n            xAxisIndex: 0,\n            start: 10,\n            end: 60\n        },\n        {\n            type: &#39;slider&#39;,\n            yAxisIndex: 0,\n            start: 30,\n            end: 80\n        },\n        {\n            type: &#39;inside&#39;,\n            yAxisIndex: 0,\n            start: 30,\n            end: 80\n        }\n    ],\n    ...\n}\n</code></pre>\n<p>可以看到如下结果:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/scatter-tutorial-dataZoom-3&edit=1&reset=1\" width=\"600\" height=\"300\" ></iframe>\n\n\n\n\n\n\n\n"},"移动端自适应":{"type":["*"],"description":"<p>Apache ECharts<sup>TM</sup> 工作在用户指定高宽的 DOM 节点(容器)中。ECharts 的『组件』和『系列』都在这个 DOM 节点中,每个节点都可以由用户指定位置。图表库内部并不适宜实现 DOM 文档流布局,因此采用类似绝对布局的简单容易理解的布局方式。但是有时候容器尺寸极端时,这种方式并不能自动避免组件重叠的情况,尤其在移动端小屏的情况下。</p>\n<p>另外,有时会出现一个图表需要同时在PC、移动端上展现的场景。这需要 ECharts 内部组件随着容器尺寸变化而变化的能力。</p>\n<p>为了解决这个问题,ECharts 完善了组件的定位设置,并且实现了类似 <a href=\"https://www.w3.org/TR/css3-mediaqueries/\" target=\"_blank\">CSS Media Query</a> 的自适应能力。</p>\n<h2 id=\"echarts-\">ECharts组件的定位和布局</h2>\n<p>大部分『组件』和『系列』会遵循两种定位方式:</p>\n<p><br>\n<strong>left/right/top/bottom/width/height 定位方式:</strong></p>\n<p>这六个量中,每个量都可以是『绝对值』或者『百分比』或者『位置描述』。</p>\n<ul>\n<li><p>绝对值</p>\n<p>  单位是浏览器像素(px),用 <code class=\"codespan\">number</code> 形式书写(不写单位)。例如 <code class=\"codespan\">{left: 23, height: 400}</code>。</p>\n</li>\n<li><p>百分比</p>\n<p>  表示占 DOM 容器高宽的百分之多少,用 <code class=\"codespan\">string</code> 形式书写。例如 <code class=\"codespan\">{right: &#39;30%&#39;, bottom: &#39;40%&#39;}</code>。</p>\n</li>\n<li><p>位置描述</p>\n<ul>\n<li>可以设置 <code class=\"codespan\">left: &#39;center&#39;</code>,表示水平居中。</li>\n<li>可以设置 <code class=\"codespan\">top: &#39;middle&#39;</code>,表示垂直居中。</li>\n</ul>\n</li>\n</ul>\n<p>这六个量的概念,和 CSS 中六个量的概念类似:</p>\n<ul>\n<li>left:距离 DOM 容器左边界的距离。</li>\n<li>right:距离 DOM 容器右边界的距离。</li>\n<li>top:距离 DOM 容器上边界的距离。</li>\n<li>bottom:距离 DOM 容器下边界的距离。</li>\n<li>width:宽度。</li>\n<li>height:高度。</li>\n</ul>\n<p>在横向,<code class=\"codespan\">left</code>、<code class=\"codespan\">right</code>、<code class=\"codespan\">width</code> 三个量中,只需两个量有值即可,因为任两个量可以决定组件的位置和大小,例如 <code class=\"codespan\">left</code> 和 <code class=\"codespan\">right</code> 或者 <code class=\"codespan\">right</code> 和 <code class=\"codespan\">width</code> 都可以决定组件的位置和大小。\n纵向,<code class=\"codespan\">top</code>、<code class=\"codespan\">bottom</code>、<code class=\"codespan\">height</code> 三个量,和横向类同不赘述。</p>\n<p><br>\n<strong><code class=\"codespan\">center</code> / <code class=\"codespan\">radius</code> 定位方式:</strong></p>\n<ul>\n<li><p><code class=\"codespan\">center</code></p>\n<p>  是一个数组,表示 <code class=\"codespan\">[x, y]</code>,其中,<code class=\"codespan\">x</code>、<code class=\"codespan\">y</code>可以是『绝对值』或者『百分比』,含义和前述相同。</p>\n</li>\n<li><p><code class=\"codespan\">radius</code></p>\n<p>  是一个数组,表示 <code class=\"codespan\">[内半径, 外半径]</code>,其中,内外半径可以是『绝对值』或者『百分比』,含义和前述相同。</p>\n<p>  在自适应容器大小时,百分比设置是很有用的。</p>\n</li>\n</ul>\n<p><br>\n<strong>横向(horizontal)和纵向(vertical)</strong></p>\n<p>ECharts的『外观狭长』型的组件(如 <code class=\"codespan\">legend</code>、<code class=\"codespan\">visualMap</code>、<code class=\"codespan\">dataZoom</code>、<code class=\"codespan\">timeline</code>等),大多提供了『横向布局』『纵向布局』的选择。例如,在细长的移动端屏幕上,可能适合使用『纵向布局』;在PC宽屏上,可能适合使用『横向布局』。</p>\n<p>横纵向布局的设置,一般在『组件』或者『系列』的 <code class=\"codespan\">orient</code> 或者 <code class=\"codespan\">layout</code> 配置项上,设置为 <code class=\"codespan\">&#39;horizontal&#39;</code> 或者 <code class=\"codespan\">&#39;vertical&#39;</code>。</p>\n<p><br>\n<strong>与 ECharts2 的兼容:</strong></p>\n<p>ECharts2 中的 <code class=\"codespan\">x/x2/y/y2</code> 的命名方式仍被兼容,对应于 <code class=\"codespan\">left/right/top/bottom</code>。但是建议写 <code class=\"codespan\">left/right/top/bottom</code>。</p>\n<p>位置描述中,为兼容 ECharts2,可以支持一些看起来略奇怪的设置:<code class=\"codespan\">left: &#39;right&#39;</code>、<code class=\"codespan\">left: &#39;left&#39;</code>、<code class=\"codespan\">top: &#39;bottom&#39;</code>、<code class=\"codespan\">top: &#39;top&#39;</code>。这些语句分别等效于:<code class=\"codespan\">right: 0</code>、<code class=\"codespan\">left: 0</code>、<code class=\"codespan\">bottom: 0</code>、<code class=\"codespan\">top: 0</code>,写成后者就不奇怪了。</p>\n<h2 id=\"media-query\">Media Query</h2>\n<p><a href=\"https://www.w3.org/TR/css3-mediaqueries/#media1\" target=\"_blank\">Media Query</a> 提供了『随着容器尺寸改变而改变』的能力。</p>\n<p>如下例子,可尝试拖动<strong>右下角的圆点</strong>,随着尺寸变化,legend 和 系列会自动改变布局位置和方式。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/pie-media&edit=1&reset=1\" width=\"750\" height=\"600\" ></iframe>\n\n\n<p>要在 option 中设置 Media Query 须遵循如下格式:</p>\n<pre><code class=\"lang-javascript\">option = {\n    // 这里是基本的『原子option』。\n    title: {...},\n    legend: {...},\n    series: [{...}, {...}, ...],\n    ...,\n    media: [ // 这里定义了 media query 的逐条规则。\n        {\n            query: {...},   // 这里写规则。\n            option: {       // 这里写此规则满足下的option。\n                legend: {...},\n                ...\n            }\n        },\n        {\n            query: {...},   // 第二个规则。\n            option: {       // 第二个规则对应的option。\n                legend: {...},\n                ...\n            }\n        },\n        {                   // 这条里没有写规则,表示『默认』,\n            option: {       // 即所有规则都不满足时,采纳这个option。\n                legend: {...},\n                ...\n            }\n        }\n    ]\n};\n</code></pre>\n<p>上面的例子中,<code class=\"codespan\">baseOption</code>、以及 <code class=\"codespan\">media</code> 每个 option 都是『原子 option』,即普通的含有各组件、系列定义的 option。而由『原子option』组合成的整个 option,我们称为『复合 option』。<code class=\"codespan\">baseOption</code> 是必然被使用的,此外,满足了某个 <code class=\"codespan\">query</code> 条件时,对应的 option 会被使用 <code class=\"codespan\">chart.mergeOption()</code> 来 merge 进去。</p>\n<p><strong>query:</strong></p>\n<p>每个 <code class=\"codespan\">query</code> 类似于这样:</p>\n<pre><code class=\"lang-javascript\">{\n    minWidth: 200,\n    maxHeight: 300,\n    minAspectRatio: 1.3\n}\n</code></pre>\n<p>现在支持三个属性:<code class=\"codespan\">width</code>、<code class=\"codespan\">height</code>、<code class=\"codespan\">aspectRatio</code>(长宽比)。每个属性都可以加上 <code class=\"codespan\">min</code> 或 <code class=\"codespan\">max</code> 前缀。比如,<code class=\"codespan\">minWidth: 200</code> 表示『大于等于200px宽度』。两个属性一起写表示『并且』,比如:<code class=\"codespan\">{minWidth: 200, maxHeight: 300}</code> 表示『大于等于200px宽度,并且小于等于300px高度』。</p>\n<p><strong>option:</strong></p>\n<p><code class=\"codespan\">media</code>中的 option 既然是『原子 option』,理论上可以写任何 option 的配置项。但是一般我们只写跟布局定位相关的,例如截取上面例子中的一部分 query option:</p>\n<pre><code class=\"lang-javascript\">media: [\n    ...,\n    {\n        query: {\n            maxAspectRatio: 1           // 当长宽比小于1时。\n        },\n        option: {\n            legend: {                   // legend 放在底部中间。\n                right: &#39;center&#39;,\n                bottom: 0,\n                orient: &#39;horizontal&#39;    // legend 横向布局。\n            },\n            series: [                   // 两个饼图左右布局。\n                {\n                    radius: [20, &#39;50%&#39;],\n                    center: [&#39;50%&#39;, &#39;30%&#39;]\n                },\n                {\n                    radius: [30, &#39;50%&#39;],\n                    center: [&#39;50%&#39;, &#39;70%&#39;]\n                }\n            ]\n        }\n    },\n    {\n        query: {\n            maxWidth: 500               // 当容器宽度小于 500 时。\n        },\n        option: {\n            legend: {\n                right: 10,              // legend 放置在右侧中间。\n                top: &#39;15%&#39;,\n                orient: &#39;vertical&#39;      // 纵向布局。\n            },\n            series: [                   // 两个饼图上下布局。\n                {\n                    radius: [20, &#39;50%&#39;],\n                    center: [&#39;50%&#39;, &#39;30%&#39;]\n                },\n                {\n                    radius: [30, &#39;50%&#39;],\n                    center: [&#39;50%&#39;, &#39;75%&#39;]\n                }\n            ]\n        }\n    },\n    ...\n]\n</code></pre>\n<p><strong>多个 query 被满足时的优先级:</strong></p>\n<p>注意,可以有多个 <code class=\"codespan\">query</code> 同时被满足,会都被 <code class=\"codespan\">mergeOption</code>,定义在后的后被 merge(即优先级更高)。</p>\n<p><strong>默认 query:</strong></p>\n<p>如果 <code class=\"codespan\">media</code> 中有某项不写 <code class=\"codespan\">query</code>,则表示『默认值』,即所有规则都不满足时,采纳这个option。</p>\n<p><strong>容器大小实时变化时的注意事项:</strong></p>\n<p>在不少情况下,并不需要容器DOM节点任意随着拖拽变化大小,而是只是根据不同终端设置几个典型尺寸。</p>\n<p>但是如果容器DOM节点需要能任意随着拖拽变化大小,那么目前使用时需要注意这件事:某个配置项,如果在某一个 <code class=\"codespan\">query option</code> 中出现,那么在其他 <code class=\"codespan\">query option</code> 中也必须出现,否则不能够回归到原来的状态。(<code class=\"codespan\">left/right/top/bottom/width/height</code> 不受这个限制。)</p>\n<p><strong>『复合 option』 中的 <code class=\"codespan\">media</code> 不支持 merge</strong></p>\n<p>也就是说,当第二(或三、四、五 ...)次 <code class=\"codespan\">chart.setOption(rawOption)</code> 时,如果 <code class=\"codespan\">rawOption</code> 是 <code class=\"codespan\">复合option</code>(即包含 <code class=\"codespan\">media</code> 列表),那么新的 <code class=\"codespan\">rawOption.media</code> 列表不会和老的 <code class=\"codespan\">media</code> 列表进行 merge,而是简单替代。当然,<code class=\"codespan\">baseOption</code> 仍然会正常和老的 option 进行merge。</p>\n<p>其实,很少有场景需要使用『复合 option』来多次 <code class=\"codespan\">setOption</code>,而我们推荐的做法是,使用 mediaQuery 时,第一次setOption使用『复合 option』,后面 <code class=\"codespan\">setOption</code> 时仅使用 『原子 option』,也就是仅仅用 setOption 来改变 <code class=\"codespan\">baseOption</code>。</p>\n<p><br>\n最后看一个和时间轴结合的例子:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/bar-media-timeline&edit=1&reset=1\" width=\"750\" height=\"700\" ></iframe>\n\n\n\n\n"},"数据的视觉映射":{"type":["*"],"description":"<p>数据可视化是 <strong>数据</strong> 到 <strong>视觉元素</strong> 的映射过程(这个过程也可称为视觉编码,视觉元素也可称为视觉通道)。</p>\n<p>Apache ECharts<sup>TM</sup> 的每种图表本身就内置了这种映射过程,比如折线图把数据映射到『线』,柱状图把数据映射到『长度』。一些更复杂的图表,如 <code class=\"codespan\">graph</code>、<code class=\"codespan\">事件河流图</code>、<code class=\"codespan\">treemap</code> 也都会做出他们内置的映射。</p>\n<p>此外,ECharts 还提供了 <a href=\"option.html#visualMap\" target=\"_blank\">visualMap 组件</a> 来提供通用的视觉映射。<code class=\"codespan\">visualMap</code> 组件中可以使用的视觉元素有:<br>\n<code class=\"codespan\">图形类别(symbol)</code>、<code class=\"codespan\">图形大小(symbolSize)</code><br>\n<code class=\"codespan\">颜色(color)</code>、<code class=\"codespan\">透明度(opacity)</code>、<code class=\"codespan\">颜色透明度(colorAlpha)</code>、<br>\n<code class=\"codespan\">颜色明暗度(colorLightness)</code>、<code class=\"codespan\">颜色饱和度(colorSaturation)</code>、<code class=\"codespan\">色调(colorHue)</code></p>\n<p>下面对 <code class=\"codespan\">visualMap</code> 组件的使用方式进行简要的介绍。</p>\n<h2 id=\"-\">数据和维度</h2>\n<p>ECharts中的数据,一般存放于 <a href=\"option.html#series.data\" target=\"_blank\">series.data</a> 中。根据图表类型不同,数据的具体形式也可能有些许差异。比如可能是『线性表』、『树』、『图』等。但他们都有个共性:都是『数据项(dataItem)』的集合。每个数据项含有『数据值(value)』和其他信息(如果需要的话)。每个数据值,可以是单一的数值(一维)或者一个数组(多维)。</p>\n<p>例如,<a href=\"option.html#series.data\" target=\"_blank\">series.data</a> 最常见的形式,是『线性表』,即一个普通数组:</p>\n<pre><code class=\"lang-javascript\">series: {\n    data: [\n        {       // 这里每一个项就是数据项(dataItem)\n            value: 2323, // 这是数据项的数据值(value)\n            itemStyle: {...}\n        },\n        1212,   // 也可以直接是 dataItem 的 value,这更常见。\n        2323,   // 每个 value 都是『一维』的。\n        4343,\n        3434\n    ]\n}\n</code></pre>\n<pre><code class=\"lang-javascript\">series: {\n    data: [\n        {                        // 这里每一个项就是数据项(dataItem)\n            value: [3434, 129,  &#39;圣马力诺&#39;], // 这是数据项的数据值(value)\n            itemStyle: {...}\n        },\n        [1212, 5454, &#39;梵蒂冈&#39;],   // 也可以直接是 dataItem 的 value,这更常见。\n        [2323, 3223, &#39;瑙鲁&#39;],     // 每个 value 都是『三维』的,每列是一个维度。\n        [4343, 23,   &#39;图瓦卢&#39;]    // 假如是『气泡图』,常见第一维度映射到x轴,\n                                 // 第二维度映射到y轴,\n                                 // 第三维度映射到气泡半径(symbolSize)\n    ]\n}\n</code></pre>\n<p>在图表中,往往默认把 value 的前一两个维度进行映射,比如取第一个维度映射到x轴,取第二个维度映射到y轴。如果想要把更多的维度展现出来,可以借助 <code class=\"codespan\">visualMap</code> 。最常见的情况,<a href=\"option.html#series-scatter\" target=\"_blank\">气泡图(scatter)</a> 使用半径展现了第三个维度。</p>\n<h2 id=\"visualmap-\">visualMap 组件</h2>\n<p>visualMap 组件定义了把数据的『哪个维度』映射到『什么视觉元素上』。</p>\n<p>现在提供如下两种类型的visualMap组件,通过 <a href=\"option.html#visualMap.type\" target=\"_blank\">visualMap.type</a> 来区分。</p>\n<p>其定义结构例如:</p>\n<pre><code class=\"lang-javascript\">option = {\n    visualMap: [ // 可以同时定义多个 visualMap 组件。\n        { // 第一个 visualMap 组件\n            type: &#39;continuous&#39;, // 定义为连续型 visualMap\n            ...\n        },\n        { // 第二个 visualMap 组件\n            type: &#39;piecewise&#39;, // 定义为分段型 visualMap\n            ...\n        }\n    ],\n    ...\n};\n</code></pre>\n<p><a href=\"option.html#visualMap-continuous\" target=\"_blank\">连续型(visualMapContinuous)</a></p>\n<p><a href=\"option.html#visualMap-piecewise\" target=\"_blank\">分段型(visualMapPiecewise)</a>:</p>\n<p>分段型视觉映射组件(visualMapPiecewise),有三种模式:</p>\n<ul>\n<li>连续型数据平均分段: 依据 <a href=\"option.html#visualMap-piecewise.splitNumber\" target=\"_blank\">visualMap-piecewise.splitNumber</a> 来自动平均分割成若干块。</li>\n<li>连续型数据自定义分段: 依据 <a href=\"option.html#visualMap-piecewise.pieces\" target=\"_blank\">visualMap-piecewise.pieces</a> 来定义每块范围。</li>\n<li>离散数据(类别性数据): 类别定义在 <a href=\"option.html#visualMap-piecewise.categories\" target=\"_blank\">visualMap-piecewise.categories</a> 中。</li>\n</ul>\n<p><br>\n<strong>视觉映射方式的配置</strong></p>\n<p>既然是『数据』到『视觉元素』的映射,<code class=\"codespan\">visualMap</code> 中可以指定数据的『哪个维度』(参见<a href=\"#visualMap.dimension\">visualMap.dimension</a>)映射到哪些『视觉元素』(参见 <a href=\"option.html#visualMap.inRange\" target=\"_blank\">visualMap.inRange</a> 和 <a href=\"option.html#visualMap.outOfRange\" target=\"_blank\">visualMap.outOfRange</a>)中。</p>\n<p>例一:</p>\n<pre><code class=\"lang-javascript\">option = {\n    visualMap: [\n        {\n            type: &#39;piecewise&#39;,\n            min: 0,\n            max: 5000,\n            dimension: 3,       // series.data 的第四个维度(即 value[3])被映射\n            seriesIndex: 4,     // 对第四个系列进行映射。\n            inRange: {          // 选中范围中的视觉配置\n                color: [&#39;blue&#39;, &#39;#121122&#39;, &#39;red&#39;], // 定义了图形颜色映射的颜色列表,\n                                                    // 数据最小值映射到&#39;blue&#39;上,\n                                                    // 最大值映射到&#39;red&#39;上,\n                                                    // 其余自动线性计算。\n                symbolSize: [30, 100]               // 定义了图形尺寸的映射范围,\n                                                    // 数据最小值映射到30上,\n                                                    // 最大值映射到100上,\n                                                    // 其余自动线性计算。\n            },\n            outOfRange: {       // 选中范围外的视觉配置\n                symbolSize: [30, 100]\n            }\n        },\n        ...\n    ]\n};\n</code></pre>\n<p>例二:</p>\n<pre><code class=\"lang-javascript\">option = {\n    visualMap: [\n        {\n            ...,\n            inRange: {          // 选中范围中的视觉配置\n                colorLightness: [0.2, 1], // 映射到明暗度上。也就是对本来的颜色进行明暗度处理。\n                                          // 本来的颜色可能是从全局色板中选取的颜色,visualMap组件并不关心。\n                symbolSize: [30, 100]\n            },\n            ...\n        },\n        ...\n    ]\n};\n</code></pre>\n<p>更多详情,参见 <a href=\"option.html#visualMap.inRange\" target=\"_blank\">visualMap.inRange</a> 和 <a href=\"option.html#visualMap.outOfRange\" target=\"_blank\">visualMap.outOfRange</a>。</p>\n"},"ECharts 中的事件和行为":{"type":["*"],"description":"<p>在 Apache ECharts<sup>TM</sup> 的图表中用户的操作将会触发相应的事件。开发者可以监听这些事件,然后通过回调函数做相应的处理,比如跳转到一个地址,或者弹出对话框,或者做数据下钻等等。</p>\n<p>在 ECharts 3 中绑定事件跟 2 一样都是通过 <a href=\"api.html#EChartsInstance.on\" target=\"_blank\">on</a> 方法,但是事件名称比 2 更加简单了。ECharts 3 中,事件名称对应 DOM 事件名称,均为小写的字符串,如下是一个绑定点击操作的示例。</p>\n<pre><code class=\"lang-js\">myChart.on(&#39;click&#39;, function (params) {\n    // 控制台打印数据的名称\n    console.log(params.name);\n});\n</code></pre>\n<p>在 ECharts 中事件分为两种类型,一种是用户鼠标操作点击,或者 hover 图表的图形时触发的事件,还有一种是用户在使用可以交互的组件后触发的行为事件,例如在切换图例开关时触发的 <a href=\"api.html#events.legendselectchanged\" target=\"_blank\">&#39;legendselectchanged&#39;</a> 事件(这里需要注意切换图例开关是不会触发<code class=\"codespan\">&#39;legendselected&#39;</code>事件的),数据区域缩放时触发的 <a href=\"api.html#events.legendselectchanged\" target=\"_blank\">&#39;datazoom&#39;</a> 事件等等。</p>\n<h2 id=\"-\">鼠标事件的处理</h2>\n<p>ECharts 支持常规的鼠标事件类型,包括 <code class=\"codespan\">&#39;click&#39;</code>、<code class=\"codespan\">&#39;dblclick&#39;</code>、<code class=\"codespan\">&#39;mousedown&#39;</code>、<code class=\"codespan\">&#39;mousemove&#39;</code>、<code class=\"codespan\">&#39;mouseup&#39;</code>、<code class=\"codespan\">&#39;mouseover&#39;</code>、<code class=\"codespan\">&#39;mouseout&#39;</code>、<code class=\"codespan\">&#39;globalout&#39;</code>、<code class=\"codespan\">&#39;contextmenu&#39;</code> 事件。下面先来看一个简单的点击柱状图后打开相应的百度搜索页面的示例。</p>\n<pre><code class=\"lang-js\">// 基于准备好的dom,初始化ECharts实例\nvar myChart = echarts.init(document.getElementById(&#39;main&#39;));\n\n// 指定图表的配置项和数据\nvar option = {\n    xAxis: {\n        data: [&quot;衬衫&quot;,&quot;羊毛衫&quot;,&quot;雪纺衫&quot;,&quot;裤子&quot;,&quot;高跟鞋&quot;,&quot;袜子&quot;]\n    },\n    yAxis: {},\n    series: [{\n        name: &#39;销量&#39;,\n        type: &#39;bar&#39;,\n        data: [5, 20, 36, 10, 10, 20]\n    }]\n};\n// 使用刚指定的配置项和数据显示图表。\nmyChart.setOption(option);\n// 处理点击事件并且跳转到相应的百度搜索页面\nmyChart.on(&#39;click&#39;, function (params) {\n    window.open(&#39;https://www.baidu.com/s?wd=&#39; + encodeURIComponent(params.name));\n});\n</code></pre>\n<p>所有的鼠标事件包含参数 <code class=\"codespan\">params</code>,这是一个包含点击图形的数据信息的对象,如下格式:</p>\n<pre><code class=\"lang-js\">{\n    // 当前点击的图形元素所属的组件名称,\n    // 其值如 &#39;series&#39;、&#39;markLine&#39;、&#39;markPoint&#39;、&#39;timeLine&#39; 等。\n    componentType: string,\n    // 系列类型。值可能为:&#39;line&#39;、&#39;bar&#39;、&#39;pie&#39; 等。当 componentType 为 &#39;series&#39; 时有意义。\n    seriesType: string,\n    // 系列在传入的 option.series 中的 index。当 componentType 为 &#39;series&#39; 时有意义。\n    seriesIndex: number,\n    // 系列名称。当 componentType 为 &#39;series&#39; 时有意义。\n    seriesName: string,\n    // 数据名,类目名\n    name: string,\n    // 数据在传入的 data 数组中的 index\n    dataIndex: number,\n    // 传入的原始数据项\n    data: Object,\n    // sankey、graph 等图表同时含有 nodeData 和 edgeData 两种 data,\n    // dataType 的值会是 &#39;node&#39; 或者 &#39;edge&#39;,表示当前点击在 node 还是 edge 上。\n    // 其他大部分图表中只有一种 data,dataType 无意义。\n    dataType: string,\n    // 传入的数据值\n    value: number|Array\n    // 数据图形的颜色。当 componentType 为 &#39;series&#39; 时有意义。\n    color: string\n}\n</code></pre>\n<p>如何区分鼠标点击到了哪里:</p>\n<pre><code class=\"lang-js\">myChart.on(&#39;click&#39;, function (params) {\n    if (params.componentType === &#39;markPoint&#39;) {\n        // 点击到了 markPoint 上\n        if (params.seriesIndex === 5) {\n            // 点击到了 index 为 5 的 series 的 markPoint 上。\n        }\n    }\n    else if (params.componentType === &#39;series&#39;) {\n        if (params.seriesType === &#39;graph&#39;) {\n            if (params.dataType === &#39;edge&#39;) {\n                // 点击到了 graph 的 edge(边)上。\n            }\n            else {\n                // 点击到了 graph 的 node(节点)上。\n            }\n        }\n    }\n});\n</code></pre>\n<p>使用 <code class=\"codespan\">query</code> 只对指定的组件的图形元素的触发回调:</p>\n<pre><code class=\"lang-js\">chart.on(eventName, query, handler);\n</code></pre>\n<p><code class=\"codespan\">query</code> 可为 <code class=\"codespan\">string</code> 或者 <code class=\"codespan\">Object</code>。</p>\n<p>如果为 <code class=\"codespan\">string</code> 表示组件类型。格式可以是 &#39;mainType&#39; 或者 &#39;mainType.subType&#39;。例如:</p>\n<pre><code class=\"lang-js\">chart.on(&#39;click&#39;, &#39;series&#39;, function () {...});\nchart.on(&#39;click&#39;, &#39;series.line&#39;, function () {...});\nchart.on(&#39;click&#39;, &#39;dataZoom&#39;, function () {...});\nchart.on(&#39;click&#39;, &#39;xAxis.category&#39;, function () {...});\n</code></pre>\n<p>如果为 <code class=\"codespan\">Object</code>,可以包含以下一个或多个属性,每个属性都是可选的:</p>\n<pre><code class=\"lang-js\">{\n    &lt;mainType&gt;Index: number // 组件 index\n    &lt;mainType&gt;Name: string // 组件 name\n    &lt;mainType&gt;Id: string // 组件 id\n    dataIndex: number // 数据项 index\n    name: string // 数据项 name\n    dataType: string // 数据项 type,如关系图中的 &#39;node&#39;, &#39;edge&#39;\n    element: string // 自定义系列中的 el 的 name\n}\n</code></pre>\n<p>例如:</p>\n<pre><code class=\"lang-js\">chart.setOption({\n    // ...\n    series: [{\n        name: &#39;uuu&#39;\n        // ...\n    }]\n});\nchart.on(&#39;mouseover&#39;, {seriesName: &#39;uuu&#39;}, function () {\n    // series name 为 &#39;uuu&#39; 的系列中的图形元素被 &#39;mouseover&#39; 时,此方法被回调。\n});\n</code></pre>\n<p>例如:</p>\n<pre><code class=\"lang-js\">chart.setOption({\n    // ...\n    series: [{\n        // ...\n    }, {\n        // ...\n        data: [\n            {name: &#39;xx&#39;, value: 121},\n            {name: &#39;yy&#39;, value: 33}\n        ]\n    }]\n});\nchart.on(&#39;mouseover&#39;, {seriesIndex: 1, name: &#39;xx&#39;}, function () {\n    // series index 1 的系列中的 name 为 &#39;xx&#39; 的元素被 &#39;mouseover&#39; 时,此方法被回调。\n});\n</code></pre>\n<p>例如:</p>\n<pre><code class=\"lang-js\">chart.setOption({\n    // ...\n    series: [{\n        type: &#39;graph&#39;,\n        nodes: [{name: &#39;a&#39;, value: 10}, {name: &#39;b&#39;, value: 20}],\n        edges: [{source: 0, target: 1}]\n    }]\n});\nchart.on(&#39;click&#39;, {dataType: &#39;node&#39;}, function () {\n    // 关系图的节点被点击时此方法被回调。\n});\nchart.on(&#39;click&#39;, {dataType: &#39;edge&#39;}, function () {\n    // 关系图的边被点击时此方法被回调。\n});\n</code></pre>\n<p>例如:</p>\n<pre><code class=\"lang-js\">chart.setOption({\n    // ...\n    series: {\n        // ...\n        type: &#39;custom&#39;,\n        renderItem: function (params, api) {\n            return {\n                type: &#39;group&#39;,\n                children: [{\n                    type: &#39;circle&#39;,\n                    name: &#39;my_el&#39;,\n                    // ...\n                }, {\n                    // ...\n                }]\n            }\n        },\n        data: [[12, 33]]\n    }\n})\nchart.on(&#39;mouseup&#39;, {element: &#39;my_el&#39;}, function () {\n    // name 为 &#39;my_el&#39; 的元素被 &#39;mouseup&#39; 时,此方法被回调。\n});\n</code></pre>\n<p>你可以在回调函数中获得这个对象中的数据名、系列名称后在自己的数据仓库中索引得到其它的信息候更新图表,显示浮层等等,如下示例代码:</p>\n<pre><code class=\"lang-js\">myChart.on(&#39;click&#39;, function (parmas) {\n    $.get(&#39;detail?q=&#39; + params.name, function (detail) {\n        myChart.setOption({\n            series: [{\n                name: &#39;pie&#39;,\n                // 通过饼图表现单个柱子中的数据分布\n                data: [detail.data]\n            }]\n        });\n    });\n});\n</code></pre>\n<h2 id=\"-\">组件交互的行为事件</h2>\n<p>在 ECharts 中基本上所有的组件交互行为都会触发相应的事件,常用的事件和事件对应参数在 <a href=\"api.html#events\" target=\"_blank\">events</a> 文档中有列出。</p>\n<p>下面是监听一个图例开关的示例:</p>\n<pre><code class=\"lang-js\">// 图例开关的行为只会触发 legendselectchanged 事件\nmyChart.on(&#39;legendselectchanged&#39;, function (params) {\n    // 获取点击图例的选中状态\n    var isSelected = params.selected[params.name];\n    // 在控制台中打印\n    console.log((isSelected ? &#39;选中了&#39; : &#39;取消选中了&#39;) + &#39;图例&#39; + params.name);\n    // 打印所有图例的状态\n    console.log(params.selected);\n});\n</code></pre>\n<h2 id=\"-echarts-\">代码触发 ECharts 中组件的行为</h2>\n<p>上面提到诸如<code class=\"codespan\">&#39;legendselectchanged&#39;</code>事件会由组件交互的行为触发,那除了用户的交互操作,有时候也会有需要在程序里调用方法触发图表的行为,诸如显示 tooltip,选中图例。</p>\n<p>在 ECharts 2.x 是通过 <code class=\"codespan\">myChart.component.tooltip.showTip</code> 这种形式调用相应的接口触发图表行为,入口很深,而且涉及到内部组件的组织。相对地,在 ECharts 3 里改为通过调用 <code class=\"codespan\">myChart.dispatchAction({ type: &#39;&#39; })</code> 触发图表行为,统一管理了所有动作,也可以方便地根据需要去记录用户的行为路径。</p>\n<p>常用的动作和动作对应参数在 <a href=\"api.html#action\" target=\"_blank\">action</a> 文档中有列出。</p>\n<p>下面示例演示了如何通过<code class=\"codespan\">dispatchAction</code>去轮流高亮饼图的每个扇形。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/pie-highlight&edit=1&reset=1\" width=\"600\" height=\"400\" ></iframe>\n\n\n\n<h2 id=\"-\">监听“空白处”的事件</h2>\n<p>有时候,开发者需要监听画布的“空白处”所触发的事件。比如,当需要在用户点击“空白处”的时候重置图表时。</p>\n<p>在讨论这个功能之前,我们需要先明确两种事件。<code class=\"codespan\">zrender 事件</code>和<code class=\"codespan\">echarts 事件</code>。</p>\n<pre><code class=\"lang-js\">myChart.getZr().on(&#39;click&#39;, function (event) {\n    // 该监听器正在监听一个`zrender 事件`。\n});\nmyChart.on(&#39;click&#39;, function (event) {\n    // 该监听器正在监听一个`echarts 事件`。\n});\n</code></pre>\n<p><code class=\"codespan\">zrender 事件</code>与<code class=\"codespan\">echarts 事件</code>不同。前者是当鼠标在任何地方都会被触发,而后者是只有当鼠标在图形元素上时才能被触发。事实上,<code class=\"codespan\">echarts 事件</code> 是在 <code class=\"codespan\">zrender 事件</code> 的基础上实现的,也就是说,当一个 <code class=\"codespan\">zrender 事件</code> 在图形元素上被触发时,<code class=\"codespan\">echarts</code> 将触发一个 <code class=\"codespan\">echarts 事件</code> 给开发者。</p>\n<p>有了 <code class=\"codespan\">zrender事件</code>,我们就可以实现 “监听空白处的事件”,具体如下:</p>\n<pre><code class=\"lang-js\">myChart.getZr().on(&#39;click&#39;, function (event) {\n    // 没有 target 意味着鼠标/指针不在任何一个图形元素上,它是从“空白处”触发的。\n    if (!event.target) {\n        // 点击在了空白处,做些什么。\n    }\n});\n</code></pre>\n"},"动态排序柱状图":{"type":["*"],"description":"<p>动态排序柱状图是一种展示随时间变化的数据排名变化的图表,从 ECharts 5 开始内置支持。</p>\n<blockquote>\n<p>动态排序柱状图通常是横向的柱条,如果想要采用纵向的柱条,只要把本教程中的 X 轴和 Y 轴相反设置即可。</p>\n</blockquote>\n<ol>\n<li><code class=\"codespan\">yAxis.realtimeSort</code> 设为 <code class=\"codespan\">true</code>,表示开启 Y 轴的动态排序效果</li>\n<li><code class=\"codespan\">yAxis.inverse</code> 设为 <code class=\"codespan\">true</code>,表示 Y 轴从下往上是从小到大的排列</li>\n<li><code class=\"codespan\">yAxis.animationDuration</code> 建议设为 <code class=\"codespan\">300</code>,表示第一次柱条排序动画的时长</li>\n<li><code class=\"codespan\">yAxis.animationDurationUpdate</code> 建议设为 <code class=\"codespan\">300</code>,表示第一次后柱条排序动画的时长</li>\n<li>如果想只显示前 <em>n</em> 名,将 <code class=\"codespan\">yAxis.max</code> 设为 <em>n - 1</em>,否则显示所有柱条</li>\n<li><code class=\"codespan\">xAxis.max</code> 建议设为 <code class=\"codespan\">&#39;dataMax&#39;</code> 表示用数据的最大值作为 X 轴最大值,视觉效果更好</li>\n<li>如果想要实时改变标签,需要将 <code class=\"codespan\">series.label.valueAnimation</code> 设为 <code class=\"codespan\">true</code></li>\n<li><code class=\"codespan\">animationDuration</code> 设为 <code class=\"codespan\">0</code>,表示第一份数据不需要从 <code class=\"codespan\">0</code> 开始动画(如果希望从 <code class=\"codespan\">0</code> 开始则设为和 <code class=\"codespan\">animationDurationUpdate</code> 相同的值)</li>\n<li><code class=\"codespan\">animationDurationUpdate</code> 建议设为 <code class=\"codespan\">3000</code> 表示每次更新动画时长,这一数值应与调用 <code class=\"codespan\">setOption</code> 改变数据的频率相同</li>\n<li>以 <code class=\"codespan\">animationDurationUpdate</code> 的频率调用 <code class=\"codespan\">setInterval</code>,更新数据值,显示下一个时间点对应的柱条排序</li>\n</ol>\n<p>完整的例子如下:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=bar-race&edit=1&reset=1\" width=\"700\" height=\"300\" ></iframe>\n\n\n<p>以上的设置项比较多,如果手动设置比较繁琐,之后我们也会推出不用写代码就能实现动态排序柱状图的工具,敬请期待!</p>\n"},"小例子:自己实现拖拽":{"type":["*"],"description":"<p>介绍一个实现拖拽的小例子。这个例子是在原生 Apache ECharts<sup>TM</sup> 基础上做了些小小扩展,带有一定的交互性。通过这个例子,我们可以了解到,如何使用 ECharts 提供的 API 实现定制化的富交互的功能。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=line-draggable&edit=1&reset=1\" width=\"600\" height=\"400\" ></iframe>\n\n\n<p>这个例子主要做到了这样一件事,用鼠标可以拖拽曲线的点,从而改变曲线的形状。例子很简单,但是有了这个基础我们还可以做更多的事情,比如在图中可视化得编辑。所以我们从这个简单的例子开始。</p>\n<p>echarts 本身没有提供封装好的『拖拽改变图表』功能,因为现在认为这个功能并不足够有通用性。那么这个功能就留给开发者用 API 实现,这也有助于开发者按自己的需要个性定制。</p>\n<h2 id=\"-\">(一)实现基本的拖拽功能</h2>\n<p>在这个例子中,基础的图表是一个 <a href=\"option.html#series-line\" target=\"_blank\">折线图 (series-line)</a>。参见如下配置:</p>\n<pre><code class=\"lang-js\">var symbolSize = 20;\n\n// 这个 data 变量在这里单独声明,在后面也会用到。\nvar data = [[15, 0], [-50, 10], [-56.5, 20], [-46.5, 30], [-22.1, 40]];\n\nmyChart.setOption({\n    xAxis: {\n        min: -100,\n        max: 80,\n        type: &#39;value&#39;,\n        axisLine: {onZero: false}\n    },\n    yAxis: {\n        min: -30,\n        max: 60,\n        type: &#39;value&#39;,\n        axisLine: {onZero: false}\n    },\n    series: [\n        {\n            id: &#39;a&#39;,\n            type: &#39;line&#39;,\n            smooth: true,\n            symbolSize: symbolSize, // 为了方便拖拽,把 symbolSize 尺寸设大了。\n            data: data\n        }\n    ]\n});\n</code></pre>\n<p>既然折线中原生的点没有拖拽功能,我们就为它加上拖拽功能:用 <a href=\"option.html#graphic\" target=\"_blank\">graphic</a> 组件,在每个点上面,覆盖一个隐藏的可拖拽的圆点。</p>\n<pre><code class=\"lang-js\">myChart.setOption({\n    // 声明一个 graphic component,里面有若干个 type 为 &#39;circle&#39; 的 graphic elements。\n    // 这里使用了 echarts.util.map 这个帮助方法,其行为和 Array.prototype.map 一样,但是兼容 es5 以下的环境。\n    // 用 map 方法遍历 data 的每项,为每项生成一个圆点。\n    graphic: echarts.util.map(data, function (dataItem, dataIndex) {\n        return {\n            // &#39;circle&#39; 表示这个 graphic element 的类型是圆点。\n            type: &#39;circle&#39;,\n\n            shape: {\n                // 圆点的半径。\n                r: symbolSize / 2\n            },\n            // 用 transform 的方式对圆点进行定位。position: [x, y] 表示将圆点平移到 [x, y] 位置。\n            // 这里使用了 convertToPixel 这个 API 来得到每个圆点的位置,下面介绍。\n            position: myChart.convertToPixel(&#39;grid&#39;, dataItem),\n\n            // 这个属性让圆点不可见(但是不影响他响应鼠标事件)。\n            invisible: true,\n            // 这个属性让圆点可以被拖拽。\n            draggable: true,\n            // 把 z 值设得比较大,表示这个圆点在最上方,能覆盖住已有的折线图的圆点。\n            z: 100,\n            // 此圆点的拖拽的响应事件,在拖拽过程中会不断被触发。下面介绍详情。\n            // 这里使用了 echarts.util.curry 这个帮助方法,意思是生成一个与 onPointDragging\n            // 功能一样的新的函数,只不过第一个参数永远为此时传入的 dataIndex 的值。\n            ondrag: echarts.util.curry(onPointDragging, dataIndex)\n        };\n    })\n});\n</code></pre>\n<p>上面的代码中,使用 <a href=\"api.html#echartsInstance.convertToPixel\" target=\"_blank\">convertToPixel</a> 这个 API,进行了从 data 到『像素坐标』的转换,从而得到了每个圆点应该在的位置,从而能绘制这些圆点。<code class=\"codespan\">myChart.convertToPixel(&#39;grid&#39;, dataItem)</code> 这句话中,第一个参数 <code class=\"codespan\">&#39;grid&#39;</code> 表示 <code class=\"codespan\">dataItem</code> 在 <a href=\"option.html#grid\" target=\"_blank\">grid</a> 这个组件中(即直角坐标系)中进行转换。所谓『像素坐标』,就是以 echarts 容器 dom element 的左上角为零点的以像素为单位的坐标系中的坐标。</p>\n<p>注意这件事需要在第一次 setOption 后再进行,也就是说,须在坐标系(<a href=\"option.html#grid\" target=\"_blank\">grid</a>)初始化后才能调用 <code class=\"codespan\">myChart.convertToPixel(&#39;grid&#39;, dataItem)</code>。</p>\n<p>有了这段代码后,就有了诸个能拖拽的点。接下来要为每个点,加上拖拽响应的事件:</p>\n<pre><code class=\"lang-js\">// 拖拽某个圆点的过程中会不断调用此函数。\n// 此函数中会根据拖拽后的新位置,改变 data 中的值,并用新的 data 值,重绘折线图,从而使折线图同步于被拖拽的隐藏圆点。\nfunction onPointDragging(dataIndex) {\n    // 这里的 data 就是本文最初的代码块中声明的 data,在这里会被更新。\n    // 这里的 this 就是被拖拽的圆点。this.position 就是圆点当前的位置。\n    data[dataIndex] = myChart.convertFromPixel(&#39;grid&#39;, this.position);\n    // 用更新后的 data,重绘折线图。\n    myChart.setOption({\n        series: [{\n            id: &#39;a&#39;,\n            data: data\n        }]\n    });\n}\n</code></pre>\n<p>上面的代码中,使用了 <a href=\"api.html#echartsInstance.convertFromPixel\" target=\"_blank\">convertFromPixel</a> 这个 API。它是 <a href=\"api.html#echartsInstance.convertToPixel\" target=\"_blank\">convertToPixel</a> 的逆向过程。<code class=\"codespan\">myChart.convertFromPixel(&#39;grid&#39;, this.position)</code> 表示把当前像素坐标转换成 <a href=\"option.html#grid\" target=\"_blank\">grid</a> 组件中直角坐标系的 dataItem 值。</p>\n<p>最后,为了使 dom 尺寸改变时,图中的元素能自适应得变化,加上这些代码:</p>\n<pre><code class=\"lang-js\">window.addEventListener(&#39;resize&#39;, function () {\n    // 对每个拖拽圆点重新计算位置,并用 setOption 更新。\n    myChart.setOption({\n        graphic: echarts.util.map(data, function (item, dataIndex) {\n            return {\n                position: myChart.convertToPixel(&#39;grid&#39;, item)\n            };\n        })\n    });\n});\n\n</code></pre>\n<h2 id=\"-tooltip-\">(二)添加 tooltip 组件</h2>\n<p>到此,拖拽的基本功能就完成了。但是想要更进一步得实时看到拖拽过程中,被拖拽的点的 data 值的变化状况,我们可以使用 <a href=\"option.html#tooltip\" target=\"_blank\">tooltip</a> 组件来实时显示这个值。但是,tooltip 有其默认的『显示』『隐藏』触发规则,在我们拖拽的场景中并不适用,所以我们还要手动定制 tooltip 的『显示』『隐藏』行为。</p>\n<p>在上述代码中分别添加如下定义:</p>\n<pre><code class=\"lang-js\">myChart.setOption({\n    ...,\n    tooltip: {\n        // 表示不使用默认的『显示』『隐藏』触发规则。\n        triggerOn: &#39;none&#39;,\n        formatter: function (params) {\n            return &#39;X: &#39; + params.data[0].toFixed(2) + &#39;&lt;br&gt;Y: &#39; + params.data[1].toFixed(2);\n        }\n    }\n});\n</code></pre>\n<pre><code class=\"lang-js\">myChart.setOption({\n    graphic: echarts.util.map(data, function (item, dataIndex) {\n        return {\n            type: &#39;circle&#39;,\n            ...,\n            // 在 mouseover 的时候显示,在 mouseout 的时候隐藏。\n            onmousemove: echarts.util.curry(showTooltip, dataIndex),\n            onmouseout: echarts.util.curry(hideTooltip, dataIndex),\n        };\n    })\n});\n\nfunction showTooltip(dataIndex) {\n    myChart.dispatchAction({\n        type: &#39;showTip&#39;,\n        seriesIndex: 0,\n        dataIndex: dataIndex\n    });\n}\n\nfunction hideTooltip(dataIndex) {\n    myChart.dispatchAction({\n        type: &#39;hideTip&#39;\n    });\n}\n</code></pre>\n<p>这里使用了 <a href=\"api.html#echartsInstance.dispatchAction\" target=\"_blank\">dispatchAction</a> 来显示隐藏 tooltip。用到了 <a href=\"api.html#action.tooltip.showTip\" target=\"_blank\">showTip</a>、<a href=\"api.html#action.tooltip.hideTip\" target=\"_blank\">hideTip</a>。</p>\n<h2 id=\"-\">(三)全部代码</h2>\n<p>总结一下,全部的代码如下:</p>\n<pre><code>&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n    &lt;meta charset=&quot;utf-8&quot;&gt;\n    &lt;script src=&quot;dist/echarts.min.js&quot;&gt;&lt;/script&gt;\n&lt;/head&gt;\n&lt;body&gt;\n    &lt;div id=&quot;main&quot; style=&quot;width: 600px;height:400px;&quot;&gt;&lt;/div&gt;\n    &lt;script type=&quot;text/javascript&quot;&gt;\n\n    var symbolSize = 20;\n    var data = [[15, 0], [-50, 10], [-56.5, 20], [-46.5, 30], [-22.1, 40]];\n\n    var myChart = echarts.init(document.getElementById(&#39;main&#39;));\n\n    myChart.setOption({\n        tooltip: {\n            triggerOn: &#39;none&#39;,\n            formatter: function (params) {\n                return &#39;X: &#39; + params.data[0].toFixed(2) + &#39;&lt;br&gt;Y: &#39; + params.data[1].toFixed(2);\n            }\n        },\n        xAxis: {\n            min: -100,\n            max: 80,\n            type: &#39;value&#39;,\n            axisLine: {onZero: false}\n        },\n        yAxis: {\n            min: -30,\n            max: 60,\n            type: &#39;value&#39;,\n            axisLine: {onZero: false}\n        },\n        series: [\n            {\n                id: &#39;a&#39;,\n                type: &#39;line&#39;,\n                smooth: true,\n                symbolSize: symbolSize,\n                data: data\n            }\n        ],\n    });\n\n    myChart.setOption({\n        graphic: echarts.util.map(data, function (item, dataIndex) {\n            return {\n                type: &#39;circle&#39;,\n                position: myChart.convertToPixel(&#39;grid&#39;, item),\n                shape: {\n                    r: symbolSize / 2\n                },\n                invisible: true,\n                draggable: true,\n                ondrag: echarts.util.curry(onPointDragging, dataIndex),\n                onmousemove: echarts.util.curry(showTooltip, dataIndex),\n                onmouseout: echarts.util.curry(hideTooltip, dataIndex),\n                z: 100\n            };\n        })\n    });\n\n    window.addEventListener(&#39;resize&#39;, function () {\n        myChart.setOption({\n            graphic: echarts.util.map(data, function (item, dataIndex) {\n                return {\n                    position: myChart.convertToPixel(&#39;grid&#39;, item)\n                };\n            })\n        });\n    });\n\n    function showTooltip(dataIndex) {\n        myChart.dispatchAction({\n            type: &#39;showTip&#39;,\n            seriesIndex: 0,\n            dataIndex: dataIndex\n        });\n    }\n\n    function hideTooltip(dataIndex) {\n        myChart.dispatchAction({\n            type: &#39;hideTip&#39;\n        });\n    }\n\n    function onPointDragging(dataIndex, dx, dy) {\n        data[dataIndex] = myChart.convertFromPixel(&#39;grid&#39;, this.position);\n        myChart.setOption({\n            series: [{\n                id: &#39;a&#39;,\n                data: data\n            }]\n        });\n    }\n\n&lt;/script&gt;\n&lt;/body&gt;\n&lt;/html&gt;\n</code></pre><p><br></p>\n<p>有了这些基础,就可以定制更多的功能了。可以加 <a href=\"option.html#dataZoom\" target=\"_blank\">dataZoom</a> 组件,可以制作一个直角坐标系上的绘图板等等。可以发挥想象力。</p>\n"},"小例子:实现日历图":{"type":["*"],"description":"<p>在 Apache ECharts<sup>TM</sup> 中,我们新增了日历坐标系,如何快速写出一个日历图呢?</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=calendar-simple&edit=1&reset=1\" width=\"800\" height=\"300\" ></iframe>\n\n\n<p>通过以下三个步骤即可实现上述效果:</p>\n<h2 id=\"-js-\">第一步:引入js文件</h2>\n<p>下载的最新完整版本 echarts.min.js 即可,无需再单独引入其他文件哦</p>\n<pre><code class=\"lang-html\">&lt;script src=&quot;echarts.min.js&quot;&gt;&lt;/script&gt;\n&lt;script&gt;\n    // ...\n&lt;/script&gt;\n</code></pre>\n<h2 id=\"-dom-\">第二步:指定DOM元素作为图表容器</h2>\n<p>和ECharts中的其他图表一样,创建一个DOM来作为绘制图表的容器</p>\n<pre><code class=\"lang-html\">&lt;div id=&quot;main&quot; style=&quot;width=100%; height = 400px&quot;&gt;&lt;/div&gt;\n</code></pre>\n<p>使用ECharts进行初始化</p>\n<pre><code class=\"lang-js\">var myChart = echarts.init(document.getElementById(&#39;main&#39;));\n</code></pre>\n<h2 id=\"-\">第三步:配置参数</h2>\n<p>以常见的日历图为例: calendar坐标 + heatmap图</p>\n<pre><code class=\"lang-js\">var option = {\n    visualMap: {\n        show: false\n        min: 0,\n        max: 1000\n    },\n    calendar: {\n        range: &#39;2017&#39;\n    },\n    series: {\n        type: &#39;heatmap&#39;,\n        coordinateSystem: &#39;calendar&#39;,\n        data: [[&#39;2017-01-02&#39;, 900], [&#39;2017-01-02&#39;, 877], [&#39;2017-01-02&#39;, 699], ...]\n    }\n}\nmyChart.setOption(option);\n</code></pre>\n<p>在heatmap图的基础上,加上<code class=\"codespan\">coordinateSystem: &#39;calendar&#39;,</code>和<code class=\"codespan\">calendar: { range: &#39;2017&#39; }</code>heatmap图就秒变为日历图了。</p>\n<blockquote>\n<p>若发现图表没有正确显示,你可以检查以下几种可能:</p>\n<ul>\n<li>JS文件是否正确加载;</li>\n<li><code class=\"codespan\">echarts</code> 变量是否存在;</li>\n<li>控制台是否报错;</li>\n<li>DOM 元素在 <code class=\"codespan\">echarts.init</code> 的时候是否有高度和宽度。</li>\n<li>若为 <code class=\"codespan\">type: heatmap</code>,检查是否配置了 <code class=\"codespan\">visualMap</code>。</li>\n</ul>\n</blockquote>\n<p><strong>附完整示例代码</strong></p>\n<pre><code class=\"lang-html\">&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n    &lt;meta charset=&quot;utf-8&quot;&gt;\n    &lt;title&gt;ECharts&lt;/title&gt;\n    &lt;script src=&quot;echarts.min.js&quot;&gt;&lt;/script&gt;\n&lt;/head&gt;\n&lt;body&gt;\n    &lt;div id=&quot;main&quot; style=&quot;width:100%;height:400px;&quot;&gt;&lt;/div&gt;\n    &lt;script type=&quot;text/javascript&quot;&gt;\n        var myChart = echarts.init(document.getElementById(&#39;main&#39;));\n\n        // 模拟数据\n        function getVirtulData(year) {\n            year = year || &#39;2017&#39;;\n            var date = +echarts.number.parseDate(year + &#39;-01-01&#39;);\n            var end = +echarts.number.parseDate(year + &#39;-12-31&#39;);\n            var dayTime = 3600 * 24 * 1000;\n            var data = [];\n            for (var time = date; time &lt;= end; time += dayTime) {\n                data.push([\n                    echarts.format.formatTime(&#39;yyyy-MM-dd&#39;, time),\n                    Math.floor(Math.random() * 10000)\n                ]);\n            }\n            return data;\n        }\n        var option = {\n            visualMap: {\n                show: false,\n                min: 0,\n                max: 10000\n            },\n            calendar: {\n                range: &#39;2017&#39;\n            },\n            series: {\n                type: &#39;heatmap&#39;,\n                coordinateSystem: &#39;calendar&#39;,\n                data: getVirtulData(2017)\n            }\n        };\n        myChart.setOption(option);\n    &lt;/script&gt;\n&lt;/body&gt;\n&lt;/html&gt;\n\n</code></pre>\n<p>以上就是绘制最简日历图的步骤了,如若还想进一步私人定制,还可以通过自定义配置参数来实现</p>\n<h2 id=\"-\">自定义配置参数</h2>\n<p>使用日历坐标绘制日历图时,支持自定义各项属性:</p>\n<ul>\n<li><p><a href=\"option.html#calendar.range\" target=\"_blank\">range</a>: <code class=\"codespan\">设置时间的范围,可支持某年、某月、某天,还可支持跨年</code></p>\n</li>\n<li><p><a href=\"option.html#calendar.cellSize\" target=\"_blank\">cellSize</a>: <code class=\"codespan\">设置日历格的大小,可支持设置不同高宽,还可支持自适应auto</code></p>\n</li>\n<li><p><a href=\"option.html#calendar.width\" target=\"_blank\">width</a>、<a href=\"http://xxx\" target=\"_blank\">height</a>: <code class=\"codespan\">也可以直接设置改日历图的整体高宽,让其基于已有的高宽全部自适应</code></p>\n</li>\n<li><p><a href=\"option.html#calendar.orient\" target=\"_blank\">orient</a>: <code class=\"codespan\">设置坐标的方向,既可以横着也可以竖着</code></p>\n</li>\n<li><p><a href=\"option.html#calendar.splitLine\" target=\"_blank\">splitLine</a>: <code class=\"codespan\">设置分隔线样式,也可以直接不显示</code></p>\n</li>\n<li><p><a href=\"option.html#calendar.itemStyle\" target=\"_blank\">itemStyle</a>: <code class=\"codespan\">设置日历格的样式,背景色、方框线颜色大小类型、透明度均可自定义,甚至还能加阴影</code></p>\n</li>\n<li><p><a href=\"option.html#calendar.dayLabel\" target=\"_blank\">dayLabel</a>: <code class=\"codespan\">设置坐标中 星期样式,可以设置星期从第几天开始,快捷设置中英文、甚至是自定义中英文混搭、或局部不显示、通过formatter 可以想怎么显示就怎么显示;</code></p>\n</li>\n<li><p><a href=\"option.html#calendar.monthLabel\" target=\"_blank\">monthLabel</a>: <code class=\"codespan\">设置坐标中 月样式,和星期一样,可快捷设置中英文和自定义混搭</code></p>\n</li>\n<li><p><a href=\"option.html#calendar.yearLabel\" target=\"_blank\">yearLabel</a>: <code class=\"codespan\">设置坐标中 年样式,默认显示一年,通过formatter 文字可以想显示什么就能通过string function任性自定义,上下左右方位随便选;</code></p>\n</li>\n</ul>\n<p>完整的配置项参数参见:<a href=\"option.html#calendar\" target=\"_blank\">calendar API</a></p>\n<h2 id=\"-\">日历坐标系的其他形式</h2>\n<p>日历坐标系是一种新的 <code class=\"codespan\">ECharts</code> 坐标系,提供了在日历上绘制图表的能力; 所以除了制作常用的日历图外,我们可以在热力图、散点图、关系图中使用日历坐标系。</p>\n<p>在日历坐标系中使用热力图:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=calendar-heatmap&edit=1&reset=1\" width=\"800\" height=\"300\" ></iframe>\n\n\n<p>在日历坐标系中使用散点图:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=calendar-effectscatter&edit=1&reset=1\" width=\"800\" height=\"600\" ></iframe>\n\n\n<p>还可以混合放置不同的图表,例如下例子,同时放置了热力图和关系图:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=calendar-graph&edit=1&reset=1\" width=\"800\" height=\"600\" ></iframe>\n\n\n<p><strong>其他更丰富的效果</strong></p>\n<p>灵活利用 <code class=\"codespan\">ECharts</code> 图表和坐标系的组合,以及 API,还可以实现更丰富的效果。</p>\n<p>例如,制作农历:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=calendar-lunar&edit=1&reset=1\" width=\"600\" height=\"500\" ></iframe>\n\n\n<p>例如,使用 <code class=\"codespan\">chart.convertToPixel</code> 接口,在日历坐标系绘制饼图。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=calendar-pie&edit=1&reset=1\" width=\"800\" height=\"640\" ></iframe>\n\n\n\n\n\n\n\n"},"旭日图":{"type":["*"],"description":"<p><a href=\"https://en.wikipedia.org/wiki/Pie_chart#Ring_chart_/_Sunburst_chart_/_Multilevel_pie_chart\" target=\"_blank\">旭日图(Sunburst)</a>由多层的环形图组成,在数据结构上,内圈是外圈的父节点。因此,它既能像<a href=\"option.html#series-pie\" target=\"_blank\">饼图</a>一样表现局部和整体的占比,又能像<a href=\"option.html#series-treemap\" target=\"_blank\">矩形树图</a>一样表现层级关系。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=sunburst-monochrome&edit=1&reset=1\" width=\"700\" height=\"500\" ></iframe>\n\n\n<h2 id=\"-\">引入相关文件</h2>\n<p>旭日图是 Apache ECharts<sup>TM</sup> 4.0 新增的图表类型,从 <a href=\"https://www.jsdelivr.com/package/npm/echarts\" target=\"_blank\">CDN</a> 引入完整版的 <a href=\"https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js\" target=\"_blank\">echarts.min.js</a></p>\n<h2 id=\"-\">最简单的旭日图</h2>\n<p>创建旭日图需要在 <code class=\"codespan\">series</code> 配置项中声明类型为 <code class=\"codespan\">&#39;sunburst&#39;</code> 的系列,并且以树形结构声明其 <code class=\"codespan\">data</code>:</p>\n<pre><code class=\"lang-js\">var option = {\n    series: {\n        type: &#39;sunburst&#39;,\n        data: [{\n            name: &#39;A&#39;,\n            value: 10,\n            children: [{\n                value: 3,\n                name: &#39;Aa&#39;\n            }, {\n                value: 5,\n                name: &#39;Ab&#39;\n            }]\n        }, {\n            name: &#39;B&#39;,\n            children: [{\n                name: &#39;Ba&#39;,\n                value: 4\n            }, {\n                name: &#39;Bb&#39;,\n                value: 2\n            }]\n        }, {\n            name: &#39;C&#39;,\n            value: 3\n        }]\n    }\n};\n</code></pre>\n<p>得到以下结果:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/sunburst-simple&edit=1&reset=1\" width=\"700\" height=\"400\" ></iframe>\n\n\n<h2 id=\"-\">颜色等样式调整</h2>\n<p>默认情况下会使用全局调色盘 <a href=\"option.html#color\" target=\"_blank\">color</a> 分配最内层的颜色,其余层则与其父元素同色。在旭日图中,扇形块的颜色有以下三种设置方式:</p>\n<ul>\n<li>在 <a href=\"option.html#series-sunburst.data.itemStyle\" target=\"_blank\">series.data.itemStyle</a> 中设置每个扇形块的样式;</li>\n<li>在 <a href=\"option.html#series-sunburst.levels.itemStyle\" target=\"_blank\">series.levels.itemStyle</a> 中设置每一层的样式;</li>\n<li>在 <a href=\"option.html#series-sunburst.itemStyle\" target=\"_blank\">series.itemStyle</a> 中设置整个旭日图的样式。</li>\n</ul>\n<p>上述三者的优先级是从高到低的,也就是说,配置了 <code class=\"codespan\">series.data.itemStyle</code> 的扇形块将会覆盖 <code class=\"codespan\">series.levels.itemStyle</code> 和 <code class=\"codespan\">series.itemStyle</code> 的设置。</p>\n<p>下面,我们将整体的颜色设为灰色 <code class=\"codespan\">&#39;#aaa&#39;</code>,将最内层的颜色设为蓝色 <code class=\"codespan\">&#39;blue&#39;</code>,将 <code class=\"codespan\">Aa</code>、<code class=\"codespan\">B</code> 这两块设为红色 <code class=\"codespan\">&#39;red&#39;</code>。</p>\n<pre><code class=\"lang-js\">var option = {\n    series: {\n        type: &#39;sunburst&#39;,\n        data: [{\n            name: &#39;A&#39;,\n            value: 10,\n            children: [{\n                value: 3,\n                name: &#39;Aa&#39;,\n                itemStyle: {\n                    color: &#39;red&#39;\n                }\n            }, {\n                value: 5,\n                name: &#39;Ab&#39;\n            }]\n        }, {\n            name: &#39;B&#39;,\n            children: [{\n                name: &#39;Ba&#39;,\n                value: 4\n            }, {\n                name: &#39;Bb&#39;,\n                value: 2\n            }],\n            itemStyle: {\n                color: &#39;red&#39;\n            }\n        }, {\n            name: &#39;C&#39;,\n            value: 3\n        }],\n        itemStyle: {\n            color: &#39;#aaa&#39;\n        },\n        levels: [{\n            // 留给数据下钻的节点属性\n        }, {\n            itemStyle: {\n                color: &#39;blue&#39;\n            }\n        }]\n    }\n};\n</code></pre>\n<p>效果为:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/sunburst-color&edit=1&reset=1\" width=\"700\" height=\"300\" ></iframe>\n\n\n\n<h2 id=\"-\">按层配置样式</h2>\n<p>旭日图是一种有层次的结构,为了方便同一层样式的配置,我们提供了 <a href=\"option.html#series-sunburst.levels\" target=\"_blank\">levels</a> 配置项。它是一个数组,其中的第 0 项表示数据下钻后返回上级的图形,其后的每一项分别表示从圆心向外层的层级。</p>\n<p>例如,假设我们没有数据下钻功能,并且希望将最内层的扇形块的颜色设为红色,文字设为蓝色,可以这样设置:</p>\n<pre><code class=\"lang-js\">series: {\n    // ...\n    levels: [\n        {\n            // 留给数据下钻点的空白配置\n        },\n        {\n            // 最靠内测的第一层\n            itemStyle: {\n                color: &#39;red&#39;\n            },\n            label: {\n                color: &#39;blue&#39;\n            }\n        },\n        {\n            // 第二层 ...\n        }\n    ]\n}\n</code></pre>\n<p>在实际使用的过程中,你会发现按层配置样式是一个很常用的功能,能够很大程度上提高配置的效率。</p>\n<h2 id=\"-\">数据下钻</h2>\n<p>旭日图默认支持数据下钻,也就是说,当点击了扇形块之后,将以该扇形块的数据作为根节点,便于进一步了解该数据的细节。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=sunburst-simple&edit=1&reset=1\" width=\"700\" height=\"500\" ></iframe>\n\n\n<p>当数据下钻后,中间会出现一个用于返回上一层的图形,该图形的样式可以通过 <a href=\"option.html#series-sunburst.levels\" target=\"_blank\">levels[0]</a> 配置。</p>\n<p>如果不需要数据下钻功能,可以通过将 <a href=\"option.html#series-sunburst.nodeClick\" target=\"_blank\">nodeClick</a> 设置为 <code class=\"codespan\">false</code> 关闭;或者将其设为 <code class=\"codespan\">&#39;link&#39;</code>,并将 <a href=\"option.html#series-sunburst.data.link\" target=\"_blank\">data.link</a> 设为点击扇形块对应打开的链接。</p>\n<h2 id=\"-\">高亮相关扇形块</h2>\n<p>旭日图支持鼠标移动到某扇形块时,高亮相关数据块的操作,可以通过设置 <a href=\"option.html#series-sunburst.highlightPolicy\" target=\"_blank\">highlightPolicy</a>,包括以下几种高亮方式:</p>\n<ul>\n<li><code class=\"codespan\">&#39;descendant&#39;</code>(默认值):高亮鼠标移动所在扇形块与其后代元素;</li>\n<li><code class=\"codespan\">&#39;ancestor&#39;</code>:高亮鼠标所在扇形块与其祖先元素;</li>\n<li><code class=\"codespan\">&#39;self&#39;</code>:仅高亮鼠标所在扇形块;</li>\n<li><code class=\"codespan\">&#39;none&#39;</code>:不会淡化(downplay)其他元素。</li>\n</ul>\n<p>上面提到的“高亮”,对于鼠标所在的扇形块,会使用 <code class=\"codespan\">emphasis</code> 样式;对于其他相关扇形块,则会使用 <code class=\"codespan\">highlight</code> 样式。通过这种方式,可以很方便地实现突出显示相关数据的需求。</p>\n<p>具体来说,对于配置项:</p>\n<pre><code class=\"lang-js\">itemStyle: {\n    color: &#39;yellow&#39;,\n    borderWidth: 2,\n    emphasis: {\n        color: &#39;red&#39;\n    },\n    highlight: {\n        color: &#39;orange&#39;\n    },\n    downplay: {\n        color: &#39;#ccc&#39;\n    }\n}\n</code></pre>\n<p><code class=\"codespan\">highlightPolicy</code> 为 <code class=\"codespan\">&#39;descendant&#39;</code> 或 <code class=\"codespan\">&#39;ancestor&#39;</code> 的效果分别为:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/sunburst-highlight-descendant&edit=1&reset=1\" width=\"700\" height=\"350\" ></iframe>\n\n\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/sunburst-highlight-ancestor&edit=1&reset=1\" width=\"700\" height=\"350\" ></iframe>\n\n\n<h2 id=\"-\">总结</h2>\n<p>上面的教程主要讲述的是如何入门使用旭日图,感兴趣的用户可以在 <a href=\"option.html#series-sunburst\" target=\"_blank\">配置项手册</a> 查看更完整的文档。在灵活应用这些配置项之后,就能做出丰富多彩的旭日图了!</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=sunburst-book&edit=1&reset=1\" width=\"700\" height=\"600\" ></iframe>\n\n\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=sunburst-drink&edit=1&reset=1\" width=\"700\" height=\"600\" ></iframe>\n\n\n\n\n\n\n\n\n\n"},"自定义系列":{"type":["*"],"description":"<p><a href=\"option.html#series-custom\" target=\"_blank\">自定义系列(custom series)</a>,是一种系列的类型。它把绘制图形元素这一步留给开发者去做,从而开发者能在坐标系中自由绘制出自己需要的图表。</p>\n<p>Apache ECharts<sup>TM</sup> 为什么会要支持 <code class=\"codespan\">自定义系列</code> 呢?</p>\n<p>ECharts 内置支持的图表类型是最常见的图表类型,但是图表类型是难于穷举的,有很多小众的需求 echarts 并不能内置的支持。那么就需要提供一种方式来让开发者自己扩展。另一方面,所提供的扩展方式要尽可能得简单,例如图形元素创建和释放、过渡动画、tooltip、<a href=\"option.html#dataZoom\" target=\"_blank\">数据区域缩放(dataZoom)</a>、<a href=\"option.html#visualMap\" target=\"_blank\">视觉映射(visualMap)</a>等功能,尽量在 ECharts 中内置得处理,使开发者不必纠结于这些细节。综上考虑形成了 <a href=\"option.html#series-custom\" target=\"_blank\">自定义系列(custom series)</a>。</p>\n<p><strong>例如,下面的例子使用 custom series 扩展出了 x-range 图:</strong></p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=custom-profile&reset=1&edit=1\" width=\"800\" height=\"500\" ></iframe>\n\n\n<p><strong>更多的例子参见:<a href=\"https://echarts.apache.org/examples/zh/index.html#chart-type-custom\" target=\"_blank\">custom examples</a></strong></p>\n<p>下面来介绍开发者怎么使用 <a href=\"option.html#series-custom\" target=\"_blank\">自定义系列(custom series)</a>。</p>\n<h2 id=\"-renderitem-\">(一)renderItem 方法</h2>\n<p>开发者自定义的图形元素渲染逻辑,是通过书写 <code class=\"codespan\">renderItem</code> 函数实现的,例如:</p>\n<pre><code class=\"lang-js\">var option = {\n    ...,\n    series: [{\n        type: &#39;custom&#39;,\n        renderItem: function (params, api) {\n            // ...\n        },\n        data: data\n    }]\n}\n</code></pre>\n<p>在渲染阶段,对于 <a href=\"option.html#series-custom.data\" target=\"_blank\">series.data</a> 中的每个数据项(为方便描述,这里称为 <code class=\"codespan\">dataItem</code>),会调用此 <a href=\"option.html#series-custom.renderItem\" target=\"_blank\">renderItem</a> 函数。这个 <code class=\"codespan\">renderItem</code> 函数的职责,就是返回一个(或者一组)<code class=\"codespan\">图形元素定义</code>,<code class=\"codespan\">图形元素定义</code> 中包括图形元素的类型、位置、尺寸、样式等。echarts 会根据这些 <code class=\"codespan\">图形元素定义</code> 来渲染出图形元素。如下的示意:</p>\n<pre><code class=\"lang-js\">var option = {\n    ...,\n    series: [{\n        type: &#39;custom&#39;,\n        renderItem: function (params, api) {\n            // 对于 data 中的每个 dataItem,都会调用这个 renderItem 函数。\n            // (但是注意,并不一定是按照 data 的顺序调用)\n\n            // 这里进行一些处理,例如,坐标转换。\n            // 这里使用 api.value(0) 取出当前 dataItem 中第一个维度的数值。\n            var categoryIndex = api.value(0);\n            // 这里使用 api.coord(...) 将数值在当前坐标系中转换成为屏幕上的点的像素值。\n            var startPoint = api.coord([api.value(1), categoryIndex]);\n            var endPoint = api.coord([api.value(2), categoryIndex]);\n            // 这里使用 api.size(...) 获得 Y 轴上数值范围为 1 的一段所对应的像素长度。\n            var height = api.size([0, 1])[1] * 0.6;\n\n            // shape 属性描述了这个矩形的像素位置和大小。\n            // 其中特殊得用到了 echarts.graphic.clipRectByRect,意思是,\n            // 如果矩形超出了当前坐标系的包围盒,则剪裁这个矩形。\n            // 如果矩形完全被剪掉,会返回 undefined.\n            var rectShape = echarts.graphic.clipRectByRect({\n                // 矩形的位置和大小。\n                x: startPoint[0],\n                y: startPoint[1] - height / 2,\n                width: endPoint[0] - startPoint[0],\n                height: height\n            }, {\n                // 当前坐标系的包围盒。\n                x: params.coordSys.x,\n                y: params.coordSys.y,\n                width: params.coordSys.width,\n                height: params.coordSys.height\n            });\n\n            // 这里返回为这个 dataItem 构建的图形元素定义。\n            return rectShape &amp;&amp; {\n                // 表示这个图形元素是矩形。还可以是 &#39;circle&#39;, &#39;sector&#39;, &#39;polygon&#39; 等等。\n                type: &#39;rect&#39;,\n                shape: rectShape,\n                // 用 api.style(...) 得到默认的样式设置。这个样式设置包含了\n                // option 中 itemStyle 的配置和视觉映射得到的颜色。\n                style: api.style()\n            };\n        },\n        data: [\n            [12, 44, 55, 60], // 这是第一个 dataItem\n            [53, 31, 21, 56], // 这是第二个 dataItem\n            [71, 33, 10, 20], // 这是第三个 dataItem\n            ...\n        ]\n    }]\n}\n</code></pre>\n<p><a href=\"option.html#series-custom.renderItem\" target=\"_blank\">renderItem</a> 函数提供了两个参数:</p>\n<ul>\n<li><a href=\"option.html#series-custom.renderItem.arguments.params\" target=\"_blank\">params</a>:包含了当前数据信息(如 <code class=\"codespan\">seriesIndex</code>、<code class=\"codespan\">dataIndex</code> 等等)和坐标系的信息(如坐标系包围盒的位置和尺寸)。</li>\n<li><a href=\"option.html#series-custom.renderItem.arguments.api\" target=\"_blank\">api</a>:是一些开发者可调用的方法集合(如 <code class=\"codespan\">api.value()</code>、<code class=\"codespan\">api.coord()</code>)。</li>\n</ul>\n<p><a href=\"option.html#series-custom.renderItem\" target=\"_blank\">renderItem</a> 函数须返回根据此 <code class=\"codespan\">dataItem</code> 绘制出的图形元素的定义信息,参见 <a href=\"option.html#series-custom.renderItem.return\" target=\"_blank\">renderItem.return</a>。</p>\n<p>一般来说,<a href=\"option.html#series-custom.renderItem\" target=\"_blank\">renderItem</a> 函数的主要逻辑,是将 <code class=\"codespan\">dataItem</code> 里的值映射到坐标系上的图形元素。这一般需要用到 <a href=\"option.html#series-custom.renderItem.arguments.api\" target=\"_blank\">renderItem.arguments.api</a> 中的两个函数:</p>\n<ul>\n<li><a href=\"option.html#series-custom.renderItem.arguments.api.value\" target=\"_blank\">api.value(...)</a>,意思是取出 <code class=\"codespan\">dataItem</code> 中的数值。例如 <code class=\"codespan\">api.value(0)</code> 表示取出当前 <code class=\"codespan\">dataItem</code> 中第一个维度的数值。</li>\n<li><a href=\"option.html#series-custom.renderItem.arguments.api.coord\" target=\"_blank\">api.coord(...)</a>,意思是进行坐标转换计算。例如 <code class=\"codespan\">var point = api.coord([api.value(0), api.value(1)])</code> 表示 <code class=\"codespan\">dataItem</code> 中的数值转换成坐标系上的点。</li>\n</ul>\n<p>有时候还需要用到 <a href=\"option.html#series-custom.renderItem.arguments.api.size\" target=\"_blank\">api.size(...)</a> 函数,表示得到坐标系上一段数值范围对应的长度。</p>\n<p>返回值中样式的设置可以使用 <a href=\"option.html#series-custom.renderItem.arguments.api.style\" target=\"_blank\">api.style(...)</a> 函数,他能得到 <a href=\"option.html#series-custom.itemStyle\" target=\"_blank\">series.itemStyle</a> 中定义的样式信息,以及视觉映射的样式信息。也可以用这种方式覆盖这些样式信息:<code class=\"codespan\">api.style({fill: &#39;green&#39;, stroke: &#39;yellow&#39;})</code>。</p>\n<p>书写完 <code class=\"codespan\">renderItem</code> 方法后,自定义系列的 90% 工作就做完了。剩下的是一些精化工作。</p>\n<h2 id=\"-\">(二)使坐标轴的范围自适应数据范围</h2>\n<p>在 <a href=\"option.html#grid\" target=\"_blank\">直角坐标系(grid)</a>、<a href=\"option.html#polar\" target=\"_blank\">极坐标系(polar)</a> 中都有坐标轴。坐标轴的刻度范围需要自适应当前显示出的数据的范围,否则绘制出的图形会超出去。所以,例如,在 <a href=\"option.html#grid\" target=\"_blank\">直角坐标系(grid)</a> 中,使用自定义系列的开发者,需要设定,<code class=\"codespan\">data</code> 中的哪些维度会对应到 <code class=\"codespan\">x</code> 轴上,哪些维度会对应到 <code class=\"codespan\">y</code> 轴上。这件事通过 <a href=\"option.html#series-custom.encode\" target=\"_blank\">encode</a> 来设定。例如:</p>\n<pre><code class=\"lang-js\">option = {\n    series: [{\n        type: &#39;custom&#39;,\n        renderItem: function () {\n            ...\n        },\n        encode: {\n            // data 中『维度1』和『维度2』对应到 X 轴\n            x: [1, 2],\n            // data 中『维度0』对应到 Y 轴\n            y: 0\n        },\n        data: [\n            // 维度0  维度1  维度2  维度3\n            [   12,   44,   55,   60   ], // 这是第一个 dataItem\n            [   53,   31,   21,   56   ], // 这是第二个 dataItem\n            [   71,   33,   10,   20   ], // 这是第三个 dataItem\n            ...\n        ]\n    }]\n};\n</code></pre>\n<h2 id=\"-tooltip\">(三)设定 tooltip</h2>\n<p>当然,使用 <a href=\"option.html#tooltip.formatter\" target=\"_blank\">tooltip.formatter</a> 可以任意定制 tooltip 中的内容。但是还有更简单的方法,通过<a href=\"option.html#series-custom.encode\" target=\"_blank\">encode</a> 和 <a href=\"option.html#series-custom.dimensions\" target=\"_blank\">dimensions</a> 来设定:</p>\n<pre><code class=\"lang-js\">option = {\n    series: [{\n        type: &#39;custom&#39;,\n        renderItem: function () {\n            ...\n        },\n        encode: {\n            x: [1, 2],\n            y: 0,\n            // 表示『维度2』和『维度3』要显示到 tooltip 中。\n            tooltip: [2, 3]\n        },\n        // 表示给『维度2』和『维度3』分别取名为『年龄』和『满意度』,显示到 tooltip 中。\n        dimensions: [null, null, &#39;年龄&#39;, &#39;满意度&#39;],\n        data: [\n            // 维度0  维度1  维度2  维度3\n            [   12,   44,   55,   60   ], // 这是第一个 dataItem\n            [   53,   31,   21,   56   ], // 这是第二个 dataItem\n            [   71,   33,   10,   20   ], // 这是第三个 dataItem\n            ...\n        ]\n    }]\n};\n</code></pre>\n<p><br>\n<br>\n<br></p>\n<hr>\n<p>上面,一个简单的 custome series 例子完成了。</p>\n<p>下面介绍几个其他细节要点。</p>\n<h2 id=\"-\">(四)超出坐标系范围的截取</h2>\n<p>与 <a href=\"option.html#dataZoom\" target=\"_blank\">dataZoom</a> 结合使用的时候,常常使用会设置 <a href=\"option.html#dataZoom.filterMode\" target=\"_blank\">dataZoom.filterMode</a> 为 &#39;weakFilter&#39;。这个设置的意思是:当 <code class=\"codespan\">dataItem</code> 部分超出坐标系边界的时候,<code class=\"codespan\">dataItem</code> 不会整体被过滤掉。例如:</p>\n<pre><code class=\"lang-js\">option = {\n    dataZoom: {\n        xAxisIndex: 0,\n        filterMode: &#39;weakFilter&#39;\n    },\n    series: [{\n        type: &#39;custom&#39;,\n        renderItem: function () {\n            ...\n        },\n        encode: {\n            // data 中『维度1』和『维度2』对应到 X 轴\n            x: [1, 2],\n            y: 0\n        },\n        data: [\n            // 维度0  维度1  维度2  维度3\n            [   12,   44,   55,   60   ], // 这是第一个 dataItem\n            [   53,   31,   21,   56   ], // 这是第二个 dataItem\n            [   71,   33,   10,   20   ], // 这是第三个 dataItem\n            ...\n        ]\n    }]\n};\n</code></pre>\n<p>在这个例子中,『维度1』和『维度2』对应到 X 轴,<code class=\"codespan\">dataZoom</code> 组件控制 X 轴的缩放。假如在缩放的过程中,某个 dataItem 的『维度1』超出了 X 轴的范围,『维度2』还在 X 轴的范围中,那么只要设置 <code class=\"codespan\">dataZoom.filterMode = &#39;weakFilter&#39;</code>,这个 dataItem 就不会被过滤掉,从而还能够使用 <code class=\"codespan\">renderItem</code> 绘制图形(可以使用上面提到过的 <code class=\"codespan\">echarts.graphic.clipRectByRect</code> 把图形绘制成被坐标系剪裁过的样子)。参见上面提到过的例子:<a href=\"https://echarts.apache.org/examples/zh/editor.html?c=custom-profile\" target=\"_blank\">Profile</a></p>\n<h2 id=\"-dataindex\">(五)关于 dataIndex</h2>\n<p>开发者如果使用到的话应注意,<a href=\"option.html#series-custom.renderItem.arguments.params\" target=\"_blank\">renderItem.arguments.params</a> 中的 <code class=\"codespan\">dataIndex</code> 和 <code class=\"codespan\">dataIndexInside</code> 是有区别的:</p>\n<ul>\n<li><code class=\"codespan\">dataIndex</code> 指的 <code class=\"codespan\">dataItem</code> 在原始数据中的 index。</li>\n<li><code class=\"codespan\">dataIndexInside</code> 指的是 <code class=\"codespan\">dataItem</code> 在当前数据窗口(参见 <a href=\"option.html#dataZoom\" target=\"_blank\">dataZoom</a>)中的 index。</li>\n</ul>\n<p><a href=\"option.html#series-custom.renderItem.arguments.api\" target=\"_blank\">renderItem.arguments.api</a> 中使用的参数都是 <code class=\"codespan\">dataIndexInside</code> 而非 <code class=\"codespan\">dataIndex</code>,因为从 <code class=\"codespan\">dataIndex</code> 转换成 <code class=\"codespan\">dataIndexInside</code> 需要时间开销。</p>\n<h2 id=\"-\">(六)事件监听</h2>\n<pre><code class=\"lang-js\">chart.setOption({\n    // ...\n    series: {\n        type: &#39;custom&#39;,\n        renderItem: function () {\n            // ...\n            return {\n                type: &#39;group&#39;,\n                children: [{\n                    type: &#39;circle&#39;\n                    // ...\n                }, {\n                    type: &#39;circle&#39;,\n                    name: &#39;aaa&#39;,\n                    // 用户指定的信息,可以在 event handler 访问到。\n                    info: 12345,\n                    // ...\n                }]\n            };\n        }\n    }\n});\nchart.on(&#39;click&#39;, {element: &#39;aaa&#39;}, function (params) {\n    // 当 name 为 &#39;aaa&#39; 的图形元素被点击时,此回调被触发。\n    console.log(params.info);\n});\n</code></pre>\n<h2 id=\"-\">(七)自定义矢量图形</h2>\n<p>自定义系列能支持使用 <a href=\"http://www.w3.org/TR/SVG/paths.html#PathData\" target=\"_blank\">SVG PathData</a> 定义矢量路径。从而可以使用矢量图工具中做出的图形。参见:<a href=\"option.html#series-custom.renderItem.return_path\" target=\"_blank\">path</a>,以及例子:<a href=\"https://echarts.apache.org/examples/zh/editor.html?c=custom-calendar-icon\" target=\"_blank\">icons</a> 和 <a href=\"https://echarts.apache.org/examples/zh/editor.html?c=custom-gantt-flight\" target=\"_blank\">shapes</a>。</p>\n<p><br></p>\n<p><strong>更多的自定义系列的例子参见:<a href=\"https://echarts.apache.org/examples/zh/index.html#chart-type-custom\" target=\"_blank\">custom examples</a></strong></p>\n"},"富文本标签":{"type":["*"],"description":"<p>在许多地方(如图、轴的标签等)都可以使用富文本标签。例如:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=pie-rich-text&edit=1&reset=1\" width=\"800\" height=\"400\" ></iframe>\n\n\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=treemap-obama&edit=1&reset=1\" width=\"800\" height=\"550\" ></iframe>\n\n\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=bar-rich-text&edit=1&reset=1\" width=\"800\" height=\"400\" ></iframe>\n\n\n<p><br></p>\n<p>其他一些例子:\n<a href=\"https://echarts.apache.org/examples/zh/editor.html?c=map-labels&amp;edit=1&amp;reset=1\" target=\"_blank\">Map Labels</a>,\n<a href=\"https://echarts.apache.org/examples/zh/editor.html?c=pie-nest&amp;edit=1&amp;reset=1\" target=\"_blank\">Pie Labels</a>,\n<a href=\"https://echarts.apache.org/examples/zh/editor.html?c=gauge-car&amp;edit=1&amp;reset=1\" target=\"_blank\">Gauge</a>.</p>\n<p><br></p>\n<p>原先 Apache ECharts<sup>TM</sup> 中的文本标签,只能对整块统一进行样式设置,并且仅仅支持颜色和字体的设置,从而导致不易于制作表达能力更强的文字描述信息。</p>\n<p>echarts v3.7 以后,支持了富文本标签,能够:</p>\n<ul>\n<li>定制文本块整体的样式(如背景、边框、阴影等)、位置、旋转等。</li>\n<li>对文本块中个别片段定义样式(如颜色、字体、高宽、背景、阴影等)、对齐方式等。</li>\n<li>在文本中使用图片做小图标或者背景。</li>\n<li>特定组合以上的规则,可以做出简单表格、分割线等效果。</li>\n</ul>\n<p>开始下面的介绍之前,先说明一下下面会使用的两个名词的含义:</p>\n<ul>\n<li>文本块(Text Block):文本标签块整体。</li>\n<li>文本片段(Text fragment):文本标签块中的部分文本。</li>\n</ul>\n<p>如下图示例:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/text-block-fragment&edit=1&reset=1\" width=\"340\" height=\"240\" ></iframe>\n\n\n\n<h2 id=\"-\">文本样式相关的配置项</h2>\n<p>echarts 提供了丰富的文本标签配置项,包括:</p>\n<ul>\n<li>字体基本样式设置:<code class=\"codespan\">fontStyle</code>、<code class=\"codespan\">fontWeight</code>、<code class=\"codespan\">fontSize</code>、<code class=\"codespan\">fontFamily</code>。</li>\n<li>文字颜色:<code class=\"codespan\">color</code>。</li>\n<li>文字描边:<code class=\"codespan\">textBorderColor</code>、<code class=\"codespan\">textBorderWidth</code>。</li>\n<li>文字阴影:<code class=\"codespan\">textShadowColor</code>、<code class=\"codespan\">textShadowBlur</code>、<code class=\"codespan\">textShadowOffsetX</code>、<code class=\"codespan\">textShadowOffsetY</code>。</li>\n<li>文本块或文本片段大小:<code class=\"codespan\">lineHeight</code>、<code class=\"codespan\">width</code>、<code class=\"codespan\">height</code>、<code class=\"codespan\">padding</code>。</li>\n<li>文本块或文本片段的对齐:<code class=\"codespan\">align</code>、<code class=\"codespan\">verticalAlign</code>。</li>\n<li>文本块或文本片段的边框、背景(颜色或图片):<code class=\"codespan\">backgroundColor</code>、<code class=\"codespan\">borderColor</code>、<code class=\"codespan\">borderWidth</code>、<code class=\"codespan\">borderRadius</code>。</li>\n<li>文本块或文本片段的阴影:<code class=\"codespan\">shadowColor</code>、<code class=\"codespan\">shadowBlur</code>、<code class=\"codespan\">shadowOffsetX</code>、<code class=\"codespan\">shadowOffsetY</code>。</li>\n<li>文本块的位置和旋转:<code class=\"codespan\">position</code>、<code class=\"codespan\">distance</code>、<code class=\"codespan\">rotate</code>。</li>\n</ul>\n<p>可以在各处的 <code class=\"codespan\">rich</code> 属性中定义文本片段样式。例如 <a href=\"option.html#series-bar.label.rich\" target=\"_blank\">series-bar.label.rich</a></p>\n<p>例如:</p>\n<pre><code class=\"lang-js\">label: {\n    // 在文本中,可以对部分文本采用 rich 中定义样式。\n    // 这里需要在文本中使用标记符号:\n    // `{styleName|text content text content}` 标记样式名。\n    // 注意,换行仍是使用 &#39;\\n&#39;。\n    formatter: [\n        &#39;{a|这段文本采用样式a}&#39;,\n        &#39;{b|这段文本采用样式b}这段用默认样式{x|这段用样式x}&#39;\n    ].join(&#39;\\n&#39;),\n\n    // 这里是文本块的样式设置:\n    color: &#39;#333&#39;,\n    fontSize: 5,\n    fontFamily: &#39;Arial&#39;,\n    borderWidth: 3,\n    backgroundColor: &#39;#984455&#39;,\n    padding: [3, 10, 10, 5],\n    lineHeight: 20,\n\n    // rich 里是文本片段的样式设置:\n    rich: {\n        a: {\n            color: &#39;red&#39;,\n            lineHeight: 10\n        },\n        b: {\n            backgroundColor: {\n                image: &#39;xxx/xxx.jpg&#39;\n            },\n            height: 40\n        },\n        x: {\n            fontSize: 18,\n            fontFamily: &#39;Microsoft YaHei&#39;,\n            borderColor: &#39;#449933&#39;,\n            borderRadius: 4\n        },\n        ...\n    }\n}\n</code></pre>\n<blockquote>\n<p>注意:如果不定义 <code class=\"codespan\">rich</code>,不能指定文字块的 <code class=\"codespan\">width</code> 和 <code class=\"codespan\">height</code>。</p>\n</blockquote>\n<h2 id=\"-\">文本、文本框、文本片段的基本样式和装饰</h2>\n<p>每个文本可以设置基本的字体样式:<code class=\"codespan\">fontStyle</code>、<code class=\"codespan\">fontWeight</code>、<code class=\"codespan\">fontSize</code>、<code class=\"codespan\">fontFamily</code>。</p>\n<p>可以设置文字的颜色 <code class=\"codespan\">color</code> 和边框的颜色 <code class=\"codespan\">textBorderColor</code>、<code class=\"codespan\">textBorderWidth</code>。</p>\n<p>文本框可以设置边框和背景的样式:<code class=\"codespan\">borderColor</code>、<code class=\"codespan\">borderWidth</code>、<code class=\"codespan\">backgroundColor</code>、<code class=\"codespan\">padding</code>。</p>\n<p>文本片段也可以设置边框和背景的样式:<code class=\"codespan\">borderColor</code>、<code class=\"codespan\">borderWidth</code>、<code class=\"codespan\">backgroundColor</code>、<code class=\"codespan\">padding</code>。</p>\n<p>例如:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/text-options&edit=1&reset=1\" width=\"700\" height=\"300\" ></iframe>\n\n\n\n<h2 id=\"-\">标签的位置</h2>\n<p>对于折线图、柱状图、散点图等,均可以使用 <code class=\"codespan\">label</code> 来设置标签。标签的相对于图形元素的位置,一般使用 <a href=\"option.html#series-scatter.label.position\" target=\"_blank\">label.position</a>、<a href=\"option.html#series-scatter.label.distance\" target=\"_blank\">label.distance</a> 来配置。</p>\n<p>例如:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/label-position&edit=1&reset=1\" width=\"800\" height=\"400\" ></iframe>\n\n\n<blockquote>\n<p>注意:<code class=\"codespan\">position</code> 在不同的图中可取值有所不同。<code class=\"codespan\">distance</code> 并不是在每个图中都支持。详情请参见 <a href=\"option.html\" target=\"_blank\">option 文档</a>。</p>\n</blockquote>\n<h2 id=\"-\">标签的旋转</h2>\n<p>某些图中,为了能有足够长的空间来显示标签,需要对标签进行旋转。例如:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=bar-label-rotation&edit=1&reset=1\" width=\"900\" height=\"500\" ></iframe>\n\n\n<p>这种场景下,可以结合 <a href=\"option.html#series-bar.label.align\" target=\"_blank\">align</a> 和 <a href=\"option.html#series-bar.label.verticalAlign\" target=\"_blank\">verticalAlign</a> 来调整标签位置。</p>\n<p>注意,逻辑是,先使用 <code class=\"codespan\">align</code> 和 <code class=\"codespan\">verticalAlign</code> 定位,再旋转。</p>\n<h2 id=\"-\">文本片段的排版和对齐</h2>\n<p>关于排版方式,每个文本片段,可以想象成 CSS 中的 <code class=\"codespan\">inline-block</code>,在文档流中按行放置。</p>\n<p>每个文本片段的内容盒尺寸(<code class=\"codespan\">content box size</code>),默认是根据文字大小决定的。但是,也可以设置 <code class=\"codespan\">width</code>、<code class=\"codespan\">height</code> 来强制指定,虽然一般不会这么做(参见下文)。文本片段的边框盒尺寸(<code class=\"codespan\">border box size</code>),由上述本身尺寸,加上文本片段的 <code class=\"codespan\">padding</code> 来得到。</p>\n<p>只有 <code class=\"codespan\">&#39;\\n&#39;</code> 是换行符,能导致换行。</p>\n<p>一行内,会有多个文本片段。每行的实际高度,由 <code class=\"codespan\">lineHeight</code> 最大的文本片段决定。文本片段的 <code class=\"codespan\">lineHeight</code> 可直接在 <code class=\"codespan\">rich</code> 中指定,也可以在 <code class=\"codespan\">rich</code> 的父层级中统一指定而采用到 <code class=\"codespan\">rich</code> 的所有项中,如果都不指定,则取文本片段的边框盒尺寸(<code class=\"codespan\">border box size</code>)。</p>\n<p>在一行的 <code class=\"codespan\">lineHeight</code> 被决定后,一行内,文本片段的竖直位置,由文本片段的 <code class=\"codespan\">verticalAlign</code> 来指定(这里和 CSS 中的规则稍有不同):</p>\n<ul>\n<li><code class=\"codespan\">&#39;bottom&#39;</code>:文本片段的盒的底边贴住行底。</li>\n<li><code class=\"codespan\">&#39;top&#39;</code>:文本片段的盒的顶边贴住行顶。</li>\n<li><code class=\"codespan\">&#39;middle&#39;</code>:居行中。</li>\n</ul>\n<p>文本块的宽度,可以直接由文本块的 <code class=\"codespan\">width</code> 指定,否则,由最长的行决定。宽度决定后,在一行中进行文本片段的放置。文本片段的 <code class=\"codespan\">align</code> 决定了文本片段在行中的水平位置:</p>\n<ul>\n<li>首先,从左向右连续紧靠放置 <code class=\"codespan\">align</code> 为 <code class=\"codespan\">&#39;left&#39;</code> 的文本片段盒。</li>\n<li>然后,从右向左连续紧靠放置 <code class=\"codespan\">align</code> 为 <code class=\"codespan\">&#39;right&#39;</code> 的文本片段盒。</li>\n<li>最后,剩余的没处理的文本片段盒,紧贴着,在中间剩余的区域中居中放置。</li>\n</ul>\n<p>关于文字在文本片段盒中的位置:</p>\n<ul>\n<li>如果 <code class=\"codespan\">align</code> 为 <code class=\"codespan\">&#39;center&#39;</code>,则文字在文本片段盒中是居中的。</li>\n<li>如果 <code class=\"codespan\">align</code> 为 <code class=\"codespan\">&#39;left&#39;</code>,则文字在文本片段盒中是居左的。</li>\n<li>如果 <code class=\"codespan\">align</code> 为 <code class=\"codespan\">&#39;right&#39;</code>,则文字在文本片段盒中是居右的。</li>\n</ul>\n<p>例如:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/text-fragment-align&edit=1&reset=1\" width=\"800\" height=\"220\" ></iframe>\n\n\n\n<h2 id=\"-\">特殊效果:图标、分割线、标题块、简单表格</h2>\n<p>看下面的例子:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/title-block&edit=1&reset=1\" width=\"600\" height=\"400\" ></iframe>\n\n\n<p>文本片段的 <code class=\"codespan\">backgroundColor</code> 可以指定为图片后,就可以在文本中使用图标了:</p>\n<pre><code class=\"lang-js\">rich: {\n    Sunny: {\n        // 这样设定 backgroundColor 就可以是图片了。\n        backgroundColor: {\n            image: &#39;./data/asset/img/weather/sunny_128.png&#39;\n        },\n        // 可以只指定图片的高度,从而图片的宽度根据图片的长宽比自动得到。\n        height: 30\n    }\n}\n</code></pre>\n<p>分割线实际是用 border 实现的:</p>\n<pre><code class=\"lang-js\">rich: {\n    hr: {\n        borderColor: &#39;#777&#39;,\n        // 这里把 width 设置为 &#39;100%&#39;,表示分割线的长度充满文本块。\n        // 注意,这里是文本块内容盒(content box)的 100%,而不包含 padding。\n        // 虽然这和 CSS 相关的定义有所不同,但是在这类场景中更加方便。\n        width: &#39;100%&#39;,\n        borderWidth: 0.5,\n        height: 0\n    }\n}\n</code></pre>\n<p>标题块是使用 <code class=\"codespan\">backgroundColor</code> 实现的:</p>\n<pre><code class=\"lang-js\">// 标题文字居左\nformatter: &#39;{titleBg|Left Title}&#39;,\nrich: {\n    titleBg: {\n        backgroundColor: &#39;#000&#39;,\n        height: 30,\n        borderRadius: [5, 5, 0, 0],\n        padding: [0, 10, 0, 10],\n        width: &#39;100%&#39;,\n        color: &#39;#eee&#39;\n    }\n}\n\n// 标题文字居中。\n// 这个实现有些 tricky,但是,能够不引入更复杂的排版规则而实现这个效果。\nformatter: &#39;{tc|Center Title}{titleBg|}&#39;,\nrich: {\n    titleBg: {\n        align: &#39;right&#39;,\n        backgroundColor: &#39;#000&#39;,\n        height: 30,\n        borderRadius: [5, 5, 0, 0],\n        padding: [0, 10, 0, 10],\n        width: &#39;100%&#39;,\n        color: &#39;#eee&#39;\n    }\n}\n</code></pre>\n<p>简单表格的设定,其实就是给不同行上纵向对应的文本片段设定同样的宽度就可以了。参见本文最开始的 <a href=\"https://echarts.apache.org/examples/zh/view.html?c=pie-rich-text&amp;edit=1&amp;reset=1\" target=\"_blank\">例子</a>。</p>\n"},"服务端渲染":{"type":["*"],"description":"<p>Apache ECharts<sup>TM</sup> 可以在服务端进行渲染。例如 <a href=\"https://echarts.apache.org/examples/zh/index.html\" target=\"_blank\">官方示例</a> 里的一个个小截图,就是在服务端预生成出来的。</p>\n<p>服务端渲染可以使用流行的 headless 环境,例如 <a href=\"https://github.com/GoogleChrome/puppeteer\" target=\"_blank\">puppeteer</a>、<a href=\"https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md\" target=\"_blank\">headless chrome</a>、<a href=\"https://github.com/Automattic/node-canvas\" target=\"_blank\">node-canvas</a>、<a href=\"https://github.com/jsdom/jsdom\" target=\"_blank\">jsdom</a>、<a href=\"http://phantomjs.org/\" target=\"_blank\">PhantomJS</a> 等。</p>\n<p>这是一些社区贡献的 echarts 服务端渲染方案:</p>\n<ul>\n<li><a href=\"https://github.com/hellosean1025/node-echarts\" target=\"_blank\">https://github.com/hellosean1025/node-echarts</a></li>\n<li><a href=\"https://github.com/chfw/echarts-scrappeteer\" target=\"_blank\">https://github.com/chfw/echarts-scrappeteer</a></li>\n<li><a href=\"https://github.com/chfw/pyecharts-snapshot/blob/master/pyecharts_snapshot/phantomjs/snapshot.js\" target=\"_blank\">https://github.com/chfw/pyecharts-snapshot/blob/master/pyecharts_snapshot/phantomjs/snapshot.js</a></li>\n<li><a href=\"https://gist.github.com/pissang/4c32ee30e35c91336af72b129a1a4a73\" target=\"_blank\">https://gist.github.com/pissang/4c32ee30e35c91336af72b129a1a4a73</a></li>\n</ul>\n"},"使用 Canvas 或者 SVG 渲染":{"type":["*"],"description":"<p>浏览器端图表库大多会选择 SVG 或者 Canvas 进行渲染。对于绘制图表来说,这两种技术往往是可替换的,效果相近。但是在一些场景中,他们的表现和能力又有一定差异。于是,对它们的选择取舍,就成为了一个一直存在的不易有标准答案的话题。</p>\n<p>Apache ECharts<sup>TM</sup> 从初始一直使用 Canvas 绘制图表(除了对 IE8- 使用 VML)。而 <a href=\"https://github.com/apache/echarts/releases\" target=\"_blank\">ECharts v4.0</a> 发布了 SVG 渲染器,从而提供了一种新的选择。只须在初始化一个图表实例时,设置 <a href=\"api.html#echarts.init\" target=\"_blank\">renderer 参数</a> 为 <code class=\"codespan\">&#39;canvas&#39;</code> 或 <code class=\"codespan\">&#39;svg&#39;</code> 即可指定渲染器,比较方便。</p>\n<blockquote>\n<p>SVG 和 Canvas 这两种使用方式差异很大的技术,能够做到同时被透明支持,主要归功于 ECharts 底层库 <a href=\"https://github.com/ecomfe/zrender\" target=\"_blank\">ZRender</a> 的抽象和实现,形成可互换的 SVG 渲染器和 Canvas 渲染器。</p>\n</blockquote>\n<h2 id=\"-\">选择哪种渲染器</h2>\n<p>一般来说,Canvas 更适合绘制图形元素数量非常大(这一般是由数据量大导致)的图表(如热力图、地理坐标系或平行坐标系上的大规模线图或散点图等),也利于实现某些视觉 <a href=\"https://echarts.apache.org/examples/zh/editor.html?c=lines-bmap-effect\" target=\"_blank\">特效</a>。但是,在不少场景中,SVG 具有重要的优势:它的内存占用更低(这对移动端尤其重要)、渲染性能略高、并且用户使用浏览器内置的缩放功能时不会模糊。例如,我们在一些硬件环境中分别使用 Canvas 渲染器和 SVG 渲染器绘制中等数据量的折、柱、饼,统计初始动画阶段的帧率,得到了一个性能对比图:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/canvas-vs-svg&reset=1\" width=\"90%\" height=\"400\" ></iframe>\n\n\n<p>上图显示出,在这些场景中,SVG 渲染器相比 Canvas 渲染器在移动端的总体表现更好。当然,这个实验并非是全面的评测,在另一些数据量较大或者有图表交互动画的场景中,目前的 SVG 渲染器的性能还比不过 Canvas 渲染器。但是同时有这两个选项,为开发者们根据自己的情况优化性能提供了更广阔的空间。</p>\n<p>选择哪种渲染器,我们可以根据软硬件环境、数据量、功能需求综合考虑。</p>\n<ul>\n<li>在软硬件环境较好,数据量不大的场景下(例如 PC 端做商务报表),两种渲染器都可以适用,并不需要太多纠结。</li>\n<li>在环境较差,出现性能问题需要优化的场景下,可以通过试验来确定使用哪种渲染器。比如有这些经验:<ul>\n<li>在须要创建很多 ECharts 实例且浏览器易崩溃的情况下(可能是因为 Canvas 数量多导致内存占用超出手机承受能力),可以使用 SVG 渲染器来进行改善。大略得说,如果图表运行在低端安卓机,或者我们在使用一些特定图表如 <a href=\"https://ecomfe.github.io/echarts-liquidfill/example/\" target=\"_blank\">水球图</a> 等,SVG 渲染器可能效果更好。</li>\n<li>数据量很大、较多交互时,可以选用 Canvas 渲染器。</li>\n</ul>\n</li>\n</ul>\n<p>我们强烈欢迎开发者们 <a href=\"https://github.com/apache/echarts/issues/new\" target=\"_blank\">反馈</a> 给我们使用的体验和场景,帮助我们更好的做优化。</p>\n<p>注:除了某些特殊的渲染可能依赖 Canvas:如<a href=\"option.html#series-lines.effect\" target=\"_blank\">炫光尾迹特效</a>、<a href=\"https://echarts.apache.org/examples/zh/editor.html?c=heatmap-bmap\" target=\"_blank\">带有混合效果的热力图</a>等,绝大部分功能 SVG 都是支持的。此外,目前的 SVG 版中,富文本、材质功能尚未实现。</p>\n<h2 id=\"-\">如何使用渲染器</h2>\n<p>ECharts 默认使用 Canvas 渲染。如果想使用 SVG 渲染,ECharts 代码中须包括有 SVG 渲染器模块。</p>\n<ul>\n<li>ECharts 的 <a href=\"https://www.jsdelivr.com/package/npm/echarts\" target=\"_blank\">预构建文件</a> 中,<a href=\"https://cdn.jsdelivr.net/npm/echarts/dist/echarts.common.min.js\" target=\"_blank\">常用版</a> 和 <a href=\"https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js\" target=\"_blank\">完整版</a> 已经包含了 SVG 渲染器,可直接使用。而 <a href=\"https://cdn.jsdelivr.net/npm/echarts/dist/echarts.simple.min.js\" target=\"_blank\">精简版</a> 没有包括。</li>\n<li>如果 <a href=\"https://echarts.apache.org/zh/builder.html\" target=\"_blank\">在线自定义构建 ECharts</a>,则需要勾上页面下方的 “SVG 渲染”。</li>\n<li>如果 <a href=\"tutorial.html#%E8%87%AA%E5%AE%9A%E4%B9%89%E6%9E%84%E5%BB%BA%20ECharts\" target=\"_blank\">线下自定义构建 ECharts</a>,则须引入 SVG 渲染器模块,即:</li>\n</ul>\n<pre><code class=\"lang-js\">import &#39;zrender/lib/svg/svg&#39;;\n</code></pre>\n<p>然后,我们就可以在代码中,初始化图表实例时,<a href=\"api.html#echarts.init\" target=\"_blank\">传入参数</a> 选择渲染器类型:</p>\n<pre><code class=\"lang-js\">// 使用 Canvas 渲染器(默认)\nvar chart = echarts.init(containerDom, null, {renderer: &#39;canvas&#39;});\n// 等价于:\nvar chart = echarts.init(containerDom);\n\n// 使用 SVG 渲染器\nvar chart = echarts.init(containerDom, null, {renderer: &#39;svg&#39;});\n</code></pre>\n"},"在图表中支持无障碍访问":{"type":["*"],"description":"<p>W3C 制定了无障碍富互联网应用规范集(<a href=\"https://www.w3.org/WAI/intro/aria\" target=\"_blank\">WAI-ARIA</a>,the Accessible Rich Internet Applications Suite),致力于使得网页内容和网页应用能够被更多残障人士访问。Apache ECharts<sup>TM</sup> 4.0 遵从这一规范,支持自动根据图表配置项智能生成描述,使得盲人可以在朗读设备的帮助下了解图表内容,让图表可以被更多人群访问。</p>\n<p>默认关闭,需要通过将 <a href=\"option.html#aria.enabled\" target=\"_blank\">aria.enabled</a> 设置为 <code class=\"codespan\">true</code> 开启。开启后,会根据图表、数据、标题等情况,自动智能生成关于图表的描述,用户也可以通过配置项修改描述。</p>\n<p>对于配置项:</p>\n<pre><code class=\"lang-js\">option = {\n    aria: {\n        enabled: true\n    },\n    title: {\n        text: &#39;某站点用户访问来源&#39;,\n        x: &#39;center&#39;\n    },\n    series: [\n        {\n            name: &#39;访问来源&#39;,\n            type: &#39;pie&#39;,\n            data: [\n                { value: 335, name: &#39;直接访问&#39; },\n                { value: 310, name: &#39;邮件营销&#39; },\n                { value: 234, name: &#39;联盟广告&#39; },\n                { value: 135, name: &#39;视频广告&#39; },\n                { value: 1548, name: &#39;搜索引擎&#39; }\n            ]\n        }\n    ]\n};\n</code></pre>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/aria-pie&edit=1&reset=1\" width=\"700\" height=\"300\" ></iframe>\n\n\n<p>生成的图表 DOM 上,会有一个 <code class=\"codespan\">aria-label</code> 属性,在朗读设备的帮助下,盲人能够了解图表的内容。其值为:</p>\n<pre><code>这是一个关于“某站点用户访问来源”的图表。图表类型是饼图,表示访问来源。其数据是——直接访问的数据是335,邮件营销的数据是310,联盟广告的数据是234,视频广告的数据是135,搜索引擎的数据是1548。\n</code></pre><p>默认语言会根据语言包(默认中文)选择,也可以使用配置项自定义模板。</p>\n<p>除此之外,Apache ECharts 5 新增支持贴花纹理,作为颜色的辅助表达,进一步用以区分数据。在 <code class=\"codespan\">aria.enabled</code> 为 <code class=\"codespan\">true</code> 的前提下,将 <code class=\"codespan\">aria.decal.show</code> 设为 <code class=\"codespan\">true</code> 即可采用默认的贴花样式。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/aria-decal-simple&edit=1&reset=1\" width=\"700\" height=\"300\" ></iframe>\n\n\n<p>下面,我们更具体地介绍这两种无障碍设计的配置方式。</p>\n<h2 id=\"-\">图表描述</h2>\n<h4 id=\"-\">采用整体描述</h4>\n<p>对于有些图表,默认生成的数据点的描述并不足以表现整体的信息。比如下图的散点图,默认生成的描述可以包含数据点的坐标值,但是知道几百几千个点的坐标并不能帮助我们有效地理解图表表达的信息。</p>\n<p><img width=\"600\" height=\"auto\" src=\"documents/asset/img/aria-example.png\"></p>\n<p>这时候,用户可以通过 <a href=\"option.html#aria.label.description\" target=\"_blank\">aria.label.description</a> 配置项指定图表的整体描述。</p>\n<h4 id=\"-\">定制模板描述</h4>\n<p>除了整体性修改描述之外,我们还提供了生成描述的模板,可以方便地进行细粒度的修改。</p>\n<p>生成描述的基本流程为,如果 <a href=\"option.html#aria.label.show\" target=\"_blank\">aria.label.show</a> 设置为 <code class=\"codespan\">true</code>,则生成无障碍访问描述,否则不生成。如果定义了 <a href=\"option.html#aria.label.description\" target=\"_blank\">aria.label.description</a>,则将其作为图表的完整描述,否则根据模板拼接生成描述。我们提供了默认的生成描述的算法,仅当生成的描述不太合适时,才需要修改这些模板,甚至使用 <code class=\"codespan\">aria.description</code> 完全覆盖。</p>\n<p>使用模板拼接时,先根据是否存在标题 <a href=\"#title.text\">title.text</a> 决定使用 <a href=\"option.html#aria.label.general.withTitle\" target=\"_blank\">aria.label.general.withTitle</a> 还是 <a href=\"option.html#aria.label.general.withoutTitle\" target=\"_blank\">aria.label.general.withoutTitle</a> 作为整体性描述。其中,<code class=\"codespan\">aria.general.withTitle</code> 配置项包括模板变量 <code class=\"codespan\">&#39;{title}&#39;</code>,将会被替换成图表标题。也就是说,如果 <code class=\"codespan\">aria.general.withTitle</code> 被设置为 <code class=\"codespan\">&#39;图表的标题是:{title}。&#39;</code>,则如果包含标题 <code class=\"codespan\">&#39;价格分布图&#39;</code>,这部分的描述为 <code class=\"codespan\">&#39;图表的标题是:价格分布图。&#39;</code>。</p>\n<p>拼接完标题之后,会依次拼接系列的描述(<a href=\"option.html#aria.label.series\" target=\"_blank\">aria.label.series</a>),和每个系列的数据的描述(<a href=\"option.html#aria.label.data\" target=\"_blank\">aria.label.data</a>)。同样,每个模板都有可能包括模板变量,用以替换实际的值。</p>\n<h2 id=\"-\">贴花图案</h2>\n<p>上文介绍了使用默认的贴花图案的方式。如果需要自定义贴花图案,可以使用 <a href=\"option.html#aria.decal.decals\" target=\"_blank\">aria.decal.decals</a> 配置出灵活多变的图案。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/aria-decal&edit=1&reset=1\" width=\"700\" height=\"300\" ></iframe>\n\n\n<p>更具体的信息请参见 <a href=\"option.html#aria\" target=\"_blank\">ARIA 文档</a>。</p>\n"},"使用 ECharts GL 实现基础的三维可视化":{"type":["*"],"description":"<p>ECharts GL (后面统一简称 GL)为 Apache ECharts<sup>TM</sup> 补充了丰富的三维可视化组件,这篇文章我们会简单介绍如何基于 GL 实现一些常见的三维可视化作品。实际上如果你对 ECharts 有一定了解的话,也可以很快的上手 GL,GL 的配置项完全是按照 ECharts 的标准和上手难度来设计的。</p>\n<p>在看完文章之后,你可以前往 <a href=\"https://echarts.apache.org/examples/zh/index.html#chart-type-globe\" target=\"_blank\">官方示例</a> 和 <a href=\"https://gallery.echartsjs.com/explore.html#tags=echarts-gl\" target=\"_blank\">Gallery</a> 去了解更多使用 GL 制作的示例,对于文章中我们没法解释到的代码,也可以前往 <a href=\"option-gl.html\" target=\"_blank\">GL 配置项手册</a> 查看具体的配置项使用方法。</p>\n<h2 id=\"-echarts-gl\">如何下载和引入 ECharts GL</h2>\n<p>为了不再增加已经很大了的 ECharts 完整版的体积,我们将 GL 作为扩展包的形式提供,和诸如水球图这样的扩展类似,如果要使用 GL 里的各种组件,只需要在引入<code class=\"codespan\">echarts.min.js</code>的基础上再引入一个<code class=\"codespan\">echarts-gl.min.js</code>。你可以从 <a href=\"https://echarts.apache.org/zh/download.html\" target=\"_blank\">官网</a> 下载最新版的 GL,然后在页面中通过标签引入:</p>\n<pre><code class=\"lang-html\">&lt;script src=&quot;lib/echarts.min.js&quot;&gt;&lt;/script&gt;\n&lt;script src=&quot;lib/echarts-gl.min.js&quot;&gt;&lt;/script&gt;\n</code></pre>\n<p>如果你的项目使用 webpack 或者 rollup 来打包代码的话,也可以通过 npm 安装后引入</p>\n<pre><code class=\"lang-bash\">npm install echarts\nnpm install echarts-gl\n</code></pre>\n<pre><code class=\"lang-js\">// 通过 ES6 的 import 语法引入 ECharts 和 ECharts GL\nimport echarts from &#39;echarts&#39;;\nimport &#39;echarts-gl&#39;;\n</code></pre>\n<h2 id=\"-\">声明一个基础的三维笛卡尔坐标系</h2>\n<p>引入 ECharts 和 ECharts GL 后,我们先来声明一个基础的三维笛卡尔坐标系用于绘制三维的散点图,柱状图,曲面图等常见的统计图。</p>\n<p>在 ECharts 中我们有 <a href=\"option.html#grid\" target=\"_blank\">grid</a> 组件用于提供一个矩形的区域放置一个二维的笛卡尔坐标系,以及笛卡尔坐标系上上的 x 轴(<a href=\"option.html#xAxis\" target=\"_blank\">xAxis</a>)和 y 轴(<a href=\"option.html#yAxis\" target=\"_blank\">yAxis</a>)。对于三维的笛卡尔坐标系,我们在 GL 中提供了 <a href=\"option-gl.html#grid3D\" target=\"_blank\">grid3D</a> 组件用于划分一块三维的笛卡尔空间,以及放置在这个 <a href=\"option-gl.html#grid3D\" target=\"_blank\">grid3D</a> 上的 <a href=\"option-gl.html#xAxis3D\" target=\"_blank\">xAxis3D</a>, <a href=\"option-gl.html#yAxis3D\" target=\"_blank\">yAxis3D</a>, <a href=\"option-gl.html#zAxis3D\" target=\"_blank\">zAxis3D</a>。</p>\n<blockquote>\n<p>小提示:在 GL 中我们对除了 globe 之外所有的三维组件和系列都加了 3D 的后缀用以区分,例如三维的散点图就是 scatter3D,三维的地图就是 map3D 等等。</p>\n</blockquote>\n<p>下面这段代码就声明了一个最简单的三维笛卡尔坐标系</p>\n<pre><code class=\"lang-js\">var option = {\n    // 需要注意的是我们不能跟 grid 一样省略 grid3D\n    grid3D: {},\n    // 默认情况下, x, y, z 分别是从 0 到 1 的数值轴\n    xAxis3D: {},\n    yAxis3D: {},\n    zAxis3D: {}\n}\n</code></pre>\n<p>效果如下:</p>\n<p><img width=\"\" height=\"auto\" src=\"documents/asset/img/gl/grid3D-basic.png\"></p>\n<p>跟二维的笛卡尔坐标系一样,每个轴都会有多种类型,默认是数值轴,如果需要是类目轴的话,简单的设置为 <code class=\"codespan\">type: &#39;category&#39;</code>就行了。</p>\n<h2 id=\"-\">绘制三维的散点图</h2>\n<p>声明好笛卡尔坐标系后,我们先试试用一份程序生成的正态分布数据在这个三维的笛卡尔坐标系中画散点图。</p>\n<p>下面这段是生成正态分布数据的代码,你可以先不用关心这段代码是怎么工作的,只需要知道它生成了一份三维的正态分布数据放在<code class=\"codespan\">data</code>数组中。</p>\n<pre><code class=\"lang-js\">function makeGaussian(amplitude, x0, y0, sigmaX, sigmaY) {\n    return function (amplitude, x0, y0, sigmaX, sigmaY, x, y) {\n        var exponent = -(\n                ( Math.pow(x - x0, 2) / (2 * Math.pow(sigmaX, 2)))\n                + ( Math.pow(y - y0, 2) / (2 * Math.pow(sigmaY, 2)))\n            );\n        return amplitude * Math.pow(Math.E, exponent);\n    }.bind(null, amplitude, x0, y0, sigmaX, sigmaY);\n}\n// 创建一个高斯分布函数\nvar gaussian = makeGaussian(50, 0, 0, 20, 20);\n\nvar data = [];\nfor (var i = 0; i &lt; 1000; i++) {\n    // x, y 随机分布\n    var x = Math.random() * 100 - 50;\n    var y = Math.random() * 100 - 50;\n    var z = gaussian(x, y);\n    data.push([x, y, z]);\n}\n</code></pre>\n<p>生成的正态分布的数据大概长这样:</p>\n<pre><code class=\"lang-js\">[\n  [46.74395071259907, -33.88391024738553, 0.7754030099768191],\n  [-18.45302873809771, 16.88114775416834, 22.87772504105404],\n  [2.9908128281121336, -0.027699444453467947, 49.44400635911886],\n  ...\n]\n</code></pre>\n<p>每一项都包含了<code class=\"codespan\">x</code>, <code class=\"codespan\">y</code>, <code class=\"codespan\">z</code>三个值,这三个值会分别被映射到笛卡尔坐标系的 x 轴,y 轴和 z 轴上。</p>\n<p>然后我们可以使用 GL 提供的 <a href=\"option-gl.html#series-scatter3D\" target=\"_blank\">scatter3D</a> 系列类型把这些数据画成三维空间中正态分布的点。</p>\n<pre><code class=\"lang-js\">option = {\n    grid3D: {},\n    xAxis3D: {},\n    yAxis3D: {},\n    zAxis3D: { max: 100 },\n    series: [{\n        type: &#39;scatter3D&#39;,\n        data: data\n    }]\n}\n</code></pre>\n<p><img width=\"\" height=\"auto\" src=\"documents/asset/img/gl/scatter3D-gaussian.png\"></p>\n<h2 id=\"-\">使用真实数据的三维散点图</h2>\n<p>接下来我们来看一个使用真实多维数据的三维散点图例子。</p>\n<p>可以先从 <a href=\"https://echarts.apache.org/examples/data/asset/data/life-expectancy-table.json\" target=\"_blank\">https://echarts.apache.org/examples/data/asset/data/life-expectancy-table.json</a> 获取这份数据。</p>\n<p>格式化一下可以看到这份数据是很传统转成 JSON 后的表格格式。第一行是每一列数据的属性名,可以从这个属性名看出来每一列数据的含义,分别是人均收入,人均寿命,人口数量,国家和年份。</p>\n<pre><code class=\"lang-js\">[\n    [&quot;Income&quot;, &quot;Life Expectancy&quot;, &quot;Population&quot;, &quot;Country&quot;, &quot;Year&quot;],\n    [815, 34.05, 351014, &quot;Australia&quot;, 1800],\n    [1314, 39, 645526, &quot;Canada&quot;, 1800],\n    [985, 32, 321675013, &quot;China&quot;, 1800],\n    [864, 32.2, 345043, &quot;Cuba&quot;, 1800],\n    [1244, 36.5731262, 977662, &quot;Finland&quot;, 1800],\n    ...\n]\n</code></pre>\n<p>在 ECharts 4 中我们可以使用 dataset 组件非常方便地引入这份数据。如果对 dataset 还不熟悉的话可以看<a href=\"tutorial.html#%E4%BD%BF%E7%94%A8%20dataset%20%E7%AE%A1%E7%90%86%E6%95%B0%E6%8D%AE\" target=\"_blank\">dataset使用教程</a></p>\n<pre><code class=\"lang-js\">$.get(&#39;data/asset/data/life-expectancy-table.json&#39;, function (data) {\n    myChart.setOption({\n        grid3D: {},\n        xAxis3D: {},\n        yAxis3D: {},\n        zAxis3D: {},\n        dataset: {\n            source: data\n        },\n        series: [\n            {\n                type: &#39;scatter3D&#39;,\n                symbolSize: 2.5\n            }\n        ]\n    })\n});\n</code></pre>\n<p><img width=\"\" height=\"auto\" src=\"documents/asset/img/gl/scatter3D-life.png\"></p>\n<p>默认会把前三列,也就是收入(Income),人均寿命(Life Expectancy),人口(Population)分别放到 x、 y、 z 轴上。</p>\n<p>使用 encode 属性我们还可以将指定列的数据映射到指定的坐标轴上,从而省去很多繁琐的数据转换代码。例如我们将 x 轴换成是国家(Country),y 轴换成年份(Year),z 轴换成收入(Income),可以看到不同国家不同年份的人均收入分布。</p>\n<pre><code class=\"lang-js\">myChart.setOption({\n    grid3D: {},\n    xAxis3D: {\n        // 因为 x 轴和 y 轴都是类目数据,所以需要设置 type: &#39;category&#39; 保证正确显示数据。\n        type: &#39;category&#39;\n    },\n    yAxis3D: {\n        type: &#39;category&#39;\n    },\n    zAxis3D: {},\n    dataset: {\n        source: data\n    },\n    series: [\n        {\n            type: &#39;scatter3D&#39;,\n            symbolSize: 2.5,\n            encode: {\n                // 维度的名字默认就是表头的属性名\n                x: &#39;Country&#39;,\n                y: &#39;Year&#39;,\n                z: &#39;Income&#39;,\n                tooltip: [0, 1, 2, 3, 4]\n            }\n        }\n    ]\n});\n</code></pre>\n<h2 id=\"-visualmap-\">利用 visualMap 组件对三维散点图进行视觉编码</h2>\n<p>刚才多维数据的例子中,我们还有几个维度(列)没能表达出来,利用 ECharts 内置的 <a href=\"option.html#visualMap\" target=\"_blank\">visualMap</a> 组件我们可以继续将第四个维度编码成颜色。</p>\n<pre><code class=\"lang-js\">myChart.setOption({\n    grid3D: {\n        viewControl: {\n            // 使用正交投影。\n            projection: &#39;orthographic&#39;\n        }\n    },\n    xAxis3D: {\n        // 因为 x 轴和 y 轴都是类目数据,所以需要设置 type: &#39;category&#39; 保证正确显示数据。\n        type: &#39;category&#39;\n    },\n    yAxis3D: {\n        type: &#39;log&#39;\n    },\n    zAxis3D: {},\n    visualMap: {\n        calculable: true,\n        max: 100,\n        // 维度的名字默认就是表头的属性名\n        dimension: &#39;Life Expectancy&#39;,\n        inRange: {\n            color: [&#39;#313695&#39;, &#39;#4575b4&#39;, &#39;#74add1&#39;, &#39;#abd9e9&#39;, &#39;#e0f3f8&#39;, &#39;#ffffbf&#39;, &#39;#fee090&#39;, &#39;#fdae61&#39;, &#39;#f46d43&#39;, &#39;#d73027&#39;, &#39;#a50026&#39;]\n        }\n    },\n    dataset: {\n        source: data\n    },\n    series: [\n        {\n            type: &#39;scatter3D&#39;,\n            symbolSize: 5,\n            encode: {\n                // 维度的名字默认就是表头的属性名\n                x: &#39;Country&#39;,\n                y: &#39;Population&#39;,\n                z: &#39;Income&#39;,\n                tooltip: [0, 1, 2, 3, 4]\n            }\n        }\n    ]\n})\n</code></pre>\n<p>这段代码中我们又在刚才的例子基础上加入了 <a href=\"option.html#visualMap\" target=\"_blank\">visualMap</a> 组件,将<code class=\"codespan\">Life Expectancy</code>这一列数据映射到了不同的颜色。</p>\n<p>除此之外我们还把原来默认的透视投影改成了正交投影。正交投影在某些场景中可以避免因为近大远小所造成的表达错误。</p>\n<p><img width=\"\" height=\"auto\" src=\"documents/asset/img/gl/scatter3D-color.png\"></p>\n<p>当然,除了 <a href=\"option.html#visualMap\" target=\"_blank\">visualMap</a> 组件,还可以利用其它的 ECharts 内置组件并且充分利用这些组件的交互效果,比如 <a href=\"option.html#legend\" target=\"_blank\">legend</a>。也可以像 <a href=\"https://echarts.apache.org/examples/zh/editor.html?c=scatter3d-scatter&amp;gl=1\" target=\"_blank\">三维散点图和散点矩阵结合使用</a> 这个例子一样实现二维和三维的系列混搭。</p>\n<p>在实现 GL 的时候我们尽可能地把 WebGL 和 Canvas 之间的差异屏蔽了到最小,从而让 GL 的使用可以更加方便自然。</p>\n<h2 id=\"-\">在笛卡尔坐标系上显示其它类型的三维图表</h2>\n<p>除了散点图,我们也可以通过 GL 在三维的笛卡尔坐标系上绘制其它类型的三维图表。比如刚才例子中将 <code class=\"codespan\">scatter3D</code> 类型改成 <code class=\"codespan\">bar3D</code> 就可以变成一个三维的柱状图。</p>\n<p><img width=\"\" height=\"auto\" src=\"documents/asset/img/gl/bar3D.png\"></p>\n<p>还有机器学习中会用到的三维曲面图 <a href=\"option-gl.html#series-surface\" target=\"_blank\">surface</a>,三维曲面图常用来表达平面上的数据走势,刚才的正态分布数据我们也可以像下面这样画成曲面图。</p>\n<pre><code class=\"lang-js\">var data = [];\n// 曲面图要求给入的数据是网格形式按顺序分布。\nfor (var y = -50; y &lt;= 50; y++) {\n    for (var x = -50; x &lt;= 50; x++) {\n        var z = gaussian(x, y);\n        data.push([x, y, z]);\n    }\n}\noption = {\n    grid3D: {},\n    xAxis3D: {},\n    yAxis3D: {},\n    zAxis3D: { max: 60 },\n    series: [{\n        type: &#39;surface&#39;,\n        data: data\n    }]\n}\n</code></pre>\n<p><img width=\"\" height=\"auto\" src=\"documents/asset/img/gl/surface.png\"></p>\n<h2 id=\"-\">老板想要立体的柱状图效果</h2>\n<p>最后,我们经常会被问到如何用 ECharts 画只有二维数据的立体柱状图效果。一般来说我们是不推荐这么做的,因为这种不必要的立体柱状图很容易造成错误的表达,具体可以见我们 <a href=\"https://vis.baidu.com/chartusage/bar/\" target=\"_blank\">柱状图使用指南</a> 中的解释。</p>\n<p>但是如果有一些其他因素导致必须得画成立体的柱状图的话,用 GL 也可以实现。<a href=\"https://gallery.echartsjs.com/explore.html?u=bd-3056387051\" target=\"_blank\">丶灬豆奶</a> 和 <a href=\"https://gallery.echartsjs.com/explore.html?u=bd-809368804\" target=\"_blank\">阿洛儿啊</a> 在 Gallery 已经写了类似的例子,大家可以参考。</p>\n<p><a href=\"https://gallery.echartsjs.com/explore.html?u=bd-3056387051\" target=\"_blank\">3D堆积柱状图</a></p>\n<p><a href=\"https://gallery.echartsjs.com/editor.html?c=xryQDPYK0b\" target=\"_blank\">3D柱状图</a></p>\n<p><img width=\"\" height=\"auto\" src=\"documents/asset/img/gl/bar3D-2d-data.png\"></p>\n"},"在微信小程序中使用 ECharts":{"type":["*"],"description":"<p>我们接到了很多微信小程序开发者的反馈,表示他们强烈需要像 Apache ECharts<sup>TM</sup> 这样的可视化工具。但是微信小程序是不支持 DOM 操作的,Canvas 接口也和浏览器不尽相同。</p>\n<p>因此,我们和微信小程序官方团队合作,提供了 ECharts 的微信小程序版本。开发者可以通过熟悉的 ECharts 配置方式,快速开发图表,满足各种可视化需求。</p>\n<h2 id=\"-\">体验示例小程序</h2>\n<p>在微信中扫描下面的二维码即可体验 ECharts Demo:</p>\n<p><img width=\"auto\" height=\"auto\" src=\"https://github.com/ecomfe/echarts-for-weixin/raw/master/img/weixin-app.jpg\"></p>\n<h2 id=\"-\">下载</h2>\n<p>为了兼容小程序 Canvas,我们提供了一个小程序的组件,用这种方式可以方便地使用 ECharts。</p>\n<p>首先,下载 GitHub 上的 <a href=\"https://github.com/ecomfe/echarts-for-weixin\" target=\"_blank\">ecomfe/echarts-for-weixin</a> 项目。</p>\n<p>其中,<code class=\"codespan\">ec-canvas</code> 是我们提供的组件,其他文件是如何使用该组件的示例。</p>\n<p><code class=\"codespan\">ec-canvas</code> 目录下有一个 <code class=\"codespan\">echarts.js</code>,默认我们会在每次 <code class=\"codespan\">echarts-for-weixin</code> 项目发版的时候替换成最新版的 ECharts。如有必要,可以自行从 ECharts 项目中下载<a href=\"https://github.com/apache/echarts/releases\" target=\"_blank\">最新发布版</a>,或者从<a href=\"https://echarts.apache.org/builder.html\" target=\"_blank\">官网自定义构建</a>以减小文件大小。</p>\n<h2 id=\"-\">引入组件</h2>\n<p>微信小程序的项目创建可以参见<a href=\"https://developers.weixin.qq.com/miniprogram/dev/framework/quickstart/\" target=\"_blank\">微信公众平台官方文档</a>。</p>\n<p>在创建项目之后,可以将下载的 <a href=\"https://github.com/ecomfe/echarts-for-weixin\" target=\"_blank\">ecomfe/echarts-for-weixin</a> 项目完全替换新建的项目,然后将修改代码;或者仅拷贝 <code class=\"codespan\">ec-canvas</code> 目录到新建的项目下,然后做相应的调整。</p>\n<p>如果采用完全替换的方式,需要将 <code class=\"codespan\">project.config.json</code> 中的 <code class=\"codespan\">appid</code> 替换成在公众平台申请的项目 id。<code class=\"codespan\">pages</code> 目录下的每个文件夹是一个页面,可以根据情况删除不需要的页面,并且在 <code class=\"codespan\">app.json</code> 中删除对应页面。</p>\n<p>如果仅拷贝 <code class=\"codespan\">ec-canvas</code> 目录,则可以参考 <code class=\"codespan\">pages/bar</code> 目录下的几个文件的写法。下面,我们具体地说明。</p>\n<h2 id=\"-\">创建图表</h2>\n<p>首先,在 <code class=\"codespan\">pages/bar</code> 目录下新建以下几个文件:<code class=\"codespan\">index.js</code>、 <code class=\"codespan\">index.json</code>、 <code class=\"codespan\">index.wxml</code>、 <code class=\"codespan\">index.wxss</code>。并且在 <code class=\"codespan\">app.json</code> 的 <code class=\"codespan\">pages</code> 中增加 <code class=\"codespan\">&#39;pages/bar/index&#39;</code>。</p>\n<p><code class=\"codespan\">index.json</code> 配置如下:</p>\n<pre><code class=\"lang-json\">{\n  &quot;usingComponents&quot;: {\n    &quot;ec-canvas&quot;: &quot;../../ec-canvas/ec-canvas&quot;\n  }\n}\n</code></pre>\n<p>这一配置的作用是,允许我们在 <code class=\"codespan\">pages/bar/index.wxml</code> 中使用 <code class=\"codespan\">&lt;ec-canvas&gt;</code> 组件。注意路径的相对位置要写对,如果目录结构和本例相同,就应该像上面这样配置。</p>\n<p><code class=\"codespan\">index.wxml</code> 中,我们创建了一个 <code class=\"codespan\">&lt;ec-canvas&gt;</code> 组件,内容如下:</p>\n<pre><code class=\"lang-xml\">&lt;view class=&quot;container&quot;&gt;\n  &lt;ec-canvas id=&quot;mychart-dom-bar&quot; canvas-id=&quot;mychart-bar&quot; ec=&quot;{{ ec }}&quot;&gt;&lt;/ec-canvas&gt;\n&lt;/view&gt;\n</code></pre>\n<p>其中 <code class=\"codespan\">ec</code> 是一个我们在 <code class=\"codespan\">index.js</code> 中定义的对象,它使得图表能够在页面加载后被初始化并设置。<code class=\"codespan\">index.js</code> 的结构如下:</p>\n<pre><code class=\"lang-js\">function initChart(canvas, width, height) {\n  const chart = echarts.init(canvas, null, {\n    width: width,\n    height: height\n  });\n  canvas.setChart(chart);\n\n  var option = {\n    ...\n  };\n  chart.setOption(option);\n  return chart;\n}\n\nPage({\n  data: {\n    ec: {\n      onInit: initChart\n    }\n  }\n});\n</code></pre>\n<p>这对于所有 ECharts 图表都是通用的,用户只需要修改上面 <code class=\"codespan\">option</code> 的内容,即可改变图表。<code class=\"codespan\">option</code> 的使用方法参见 <a href=\"option.html\" target=\"_blank\">ECharts 配置项文档</a>。对于不熟悉 ECharts 的用户,可以参见 <a href=\"tutorial.html#5%20%E5%88%86%E9%92%9F%E4%B8%8A%E6%89%8B%20ECharts\" target=\"_blank\">5 分钟上手 ECharts</a> 教程。</p>\n<p>完整的例子请参见 <a href=\"https://github.com/ecomfe/echarts-for-weixin\" target=\"_blank\">ecomfe/echarts-for-weixin</a> 项目。</p>\n<h2 id=\"-\">暂不支持的功能</h2>\n<p>ECharts 中的绝大部分功能都支持小程序版本,因此这里仅说明不支持的功能,以及存在的问题。</p>\n<p>以下功能尚不支持,如果有相关需求请在 <a href=\"https://github.com/ecomfe/echarts-for-weixin/issues\" target=\"_blank\">issue</a> 中向我们反馈,对于反馈人数多的需求将优先支持:</p>\n<ul>\n<li>Tooltip</li>\n<li>图片</li>\n<li>多个 zlevel 分层</li>\n</ul>\n<p>此外,目前还有一些 bug 尚未修复,部分需要小程序团队配合上线支持,但不影响基本的使用。已知的 bug 包括:</p>\n<ul>\n<li>安卓平台:transform 的问题(会影响关系图边两端的标记位置、旭日图文字位置等)</li>\n<li>iOS 平台:半透明略有变深的问题</li>\n<li>iOS 平台:渐变色出现在定义区域之外的地方</li>\n</ul>\n<p>如有其它问题,也欢迎在 <a href=\"https://github.com/ecomfe/echarts-for-weixin/issues\" target=\"_blank\">issue</a> 中向我们反馈,谢谢!</p>\n"}}}}
\ No newline at end of file
+{"$schema":"https://echarts.apache.org/doc/json-schem","option":{"type":"Object","properties":{"5 分钟上手 ECharts":{"type":["*"],"description":"<h2 id=\"-echarts\">获取 ECharts</h2>\n<p>你可以通过以下几种方式获取 Apache ECharts<sup>TM</sup>。</p>\n<ul>\n<li><p>从 <a href=\"https://echarts.apache.org/zh/download.html\" target=\"_blank\">Apache ECharts 官网下载界面</a> 获取官方源码包后构建。</p>\n</li>\n<li><p>在 ECharts 的 <a href=\"https://github.com/apache/echarts/releases\" target=\"_blank\">GitHub</a> 获取。</p>\n</li>\n<li><p>通过 npm 获取 echarts,<code class=\"codespan\">npm install echarts --save</code>,详见“<a href=\"tutorial.html#%E5%9C%A8%20webpack%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20ECharts\" target=\"_blank\">在 webpack 中使用 echarts</a>”</p>\n</li>\n<li><p>通过 <a href=\"https://www.jsdelivr.com/package/npm/echarts\" target=\"_blank\">jsDelivr</a> 等 CDN 引入</p>\n</li>\n</ul>\n<h2 id=\"-echarts\">引入 ECharts</h2>\n<p>通过标签方式直接引入构建好的 echarts 文件</p>\n<pre><code class=\"lang-html\">&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n    &lt;meta charset=&quot;utf-8&quot;&gt;\n    &lt;!-- 引入 ECharts 文件 --&gt;\n    &lt;script src=&quot;echarts.min.js&quot;&gt;&lt;/script&gt;\n&lt;/head&gt;\n&lt;/html&gt;\n</code></pre>\n<h2 id=\"-\">绘制一个简单的图表</h2>\n<p>在绘图前我们需要为 ECharts 准备一个具备高宽的 DOM 容器。</p>\n<pre><code>&lt;body&gt;\n    &lt;!-- 为 ECharts 准备一个具备大小(宽高)的 DOM --&gt;\n    &lt;div id=&quot;main&quot; style=&quot;width: 600px;height:400px;&quot;&gt;&lt;/div&gt;\n&lt;/body&gt;\n</code></pre><p>然后就可以通过 <a href=\"api.html#echarts.init\" target=\"_blank\">echarts.init</a> 方法初始化一个 echarts 实例并通过 <a href=\"api.html#echartsInstance.setOption\" target=\"_blank\">setOption</a> 方法生成一个简单的柱状图,下面是完整代码。</p>\n<pre><code class=\"lang-html\">&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n    &lt;meta charset=&quot;utf-8&quot;&gt;\n    &lt;title&gt;ECharts&lt;/title&gt;\n    &lt;!-- 引入 echarts.js --&gt;\n    &lt;script src=&quot;echarts.min.js&quot;&gt;&lt;/script&gt;\n&lt;/head&gt;\n&lt;body&gt;\n    &lt;!-- 为ECharts准备一个具备大小(宽高)的Dom --&gt;\n    &lt;div id=&quot;main&quot; style=&quot;width: 600px;height:400px;&quot;&gt;&lt;/div&gt;\n    &lt;script type=&quot;text/javascript&quot;&gt;\n        // 基于准备好的dom,初始化echarts实例\n        var myChart = echarts.init(document.getElementById(&#39;main&#39;));\n\n        // 指定图表的配置项和数据\n        var option = {\n            title: {\n                text: &#39;ECharts 入门示例&#39;\n            },\n            tooltip: {},\n            legend: {\n                data:[&#39;销量&#39;]\n            },\n            xAxis: {\n                data: [&quot;衬衫&quot;,&quot;羊毛衫&quot;,&quot;雪纺衫&quot;,&quot;裤子&quot;,&quot;高跟鞋&quot;,&quot;袜子&quot;]\n            },\n            yAxis: {},\n            series: [{\n                name: &#39;销量&#39;,\n                type: &#39;bar&#39;,\n                data: [5, 20, 36, 10, 10, 20]\n            }]\n        };\n\n        // 使用刚指定的配置项和数据显示图表。\n        myChart.setOption(option);\n    &lt;/script&gt;\n&lt;/body&gt;\n&lt;/html&gt;\n</code></pre>\n<p>这样你的第一个图表就诞生了!</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/getting-started&reset=1&edit=1\" width=\"600\" height=\"300\" ></iframe>\n\n\n<p>你也可以直接进入 <a href=\"https://echarts.apache.org/examples/zh/editor.html?c=doc-example/getting-started\" target=\"_blank\">ECharts Gallery</a> 中查看编辑示例</p>\n"},"ECharts 5 新特性":{"type":["*"],"description":"<p>数据可视化在过去的几年中得到了长足的发展。开发者对于可视化产品的期待不再是简单的图表创建工具,而在交互、性能、数据处理等方面有了更高级的需求。</p>\n<p>Apache ECharts 始终致力于让开发者以更方便的方式创造灵活丰富的可视化作品。在最新推出的 Apache ECharts 5,我们着力加强了图表的叙事能力,让开发者可以以更简单的方式,讲述数据背后的故事。</p>\n<p><img src=\"documents/asset/img/feature-v5/echarts-5.png\" width=\"800px\" /></p>\n<p>“表·达”是 Apache ECharts 5 的核心,通过五大模块、十五项特性的全面升级,围绕可视化作品的叙事表达能力,让图“表”更能传“达”数据背后的故事,帮助开发者更轻松地创造满足各种场景需求的可视化作品。</p>\n<h2 id=\"-\">动态叙事</h2>\n<p>动画对于人类认知的重要性不言而喻。在之前的作品中,我们会通过初始化动画和过渡动画帮助用户理解数据变换之间的联系,让图表的出现和变换显得不那么生硬。这次,我们更是大幅度增强了我们的动画叙事能力,。希望能够进一步发挥动画对于用户认知的帮助作用,借助图表的动态叙事功能,帮助用户更容易理解图表背后表达的故事。</p>\n<h4 id=\"-\">动态排序图</h4>\n<p>Apache ECharts 5 新增支持动态排序柱状图(bar-racing)以及动态排序折线图(line-racing),帮助开发者方便地创建带有时序性的图表,展现数据随着时间维度上的变化,讲述数据的演变过程。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=bar-race-country&edit=1&reset=1\" width=\"700\" height=\"400\" ></iframe>\n\n\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=line-race&edit=1&reset=1\" width=\"700\" height=\"400\" ></iframe>\n\n\n<p>动态排序图展现了不同的类目随着时间在排名上的衍变。而开发者只需要通过几行简单的配置项就可以在 ECharts 中开启这样的效果。</p>\n<h4 id=\"-\">自定义系列动画</h4>\n<p>除了动态排序图,Apache ECharts 5 在自定义系列中提供了更加丰富强大的动画效果,支持标签数值文本的插值动画,图形的形变(morph)、分裂(separate)、合并(combine)等效果的过渡动画。</p>\n<p>想象一下,用这些动态效果,你可以创造出多么令人称奇的可视化作品!</p>\n<h2 id=\"-\">视觉设计</h2>\n<p>视觉设计的作用并不仅仅是为了让图表更好看,更重要的是,符合可视化原理的设计可以帮用户更快速地理解图表想表达的内容,并且尽可能消除不良设计带来的误解。</p>\n<h4 id=\"-\">默认设计</h4>\n<p>我们发现,有很大一部分开发者使用了 ECharts 默认的主题样式,因而设计优雅、符合可视化原理的默认主题设计是非常重要的。在 Apache ECharts 5 中,我们重新设计了默认的主题样式,针对不同的系列和组件分别做了优化调整。以主题色为例,我们考量了颜色之间的区分度、与背景色的对比度、相邻颜色的和谐度等因素,并且确保色觉辨识障碍人士也能清楚地区分数据。</p>\n<p><img src=\"documents/asset/img/feature-v5/theme-color.png\" width=\"400px\" /></p>\n<p>我们以最常用的柱状图为例,来看看新版本浅色主题和深色主题的样式:</p>\n<p><img src=\"documents/asset/img/feature-v5/new-theme-light.png\" width=\"500px\" />\n<img src=\"documents/asset/img/feature-v5/new-theme-dark.png\" width=\"500px\" /></p>\n<p>对于数据区域缩放,时间轴等交互组件,我们也设计了全新的样式并且提供了更好的交互体验:</p>\n<p><img src=\"documents/asset/img/feature-v5/dataZoom.png\" width=\"500px\" /></p>\n<p><img src=\"documents/asset/img/feature-v5/timeline.png\" width=\"500px\" /></p>\n<h4 id=\"-\">标签</h4>\n<p>标签是图表中的核心元素之一,清晰而明确的标签可以帮助用户对数据有更准确的理解。Apache ECharts 5 提供了多种新的标签功能,让密集的标签能清晰显示、准确表意。</p>\n<p>Apache ECharts 5 可以通过一个配置项开启自动隐藏重叠的标签。对于超出显示区域的标签,可以选择自动截断或者换行。密集的饼图标签,现在有了更美观的自动排布。</p>\n<p>这些功能可以帮助避免文字过于密集影响可读性。并且,无需开发者编写额外的代码就能默认生效,大大简化了开发者的开发成本。</p>\n<p>我们也提供了多个配置项来让开发者主动控制标签的布局策略,例如标签拖动、整体显示在画布边缘,用引导线和图形元素连接,并且仍可联动高亮表达关联关系。</p>\n<p>新的标签功能可以让你在移动端这样局限的空间内也可以有很优雅的标签展示:</p>\n<p><img src=\"documents/asset/img/feature-v5/pie-label.png\" height=\"150px\" />\n<img src=\"documents/asset/img/feature-v5/pie-label-2.png\" height=\"150px\" /></p>\n<h4 id=\"-\">时间轴</h4>\n<p>Apache ECharts 5 带来了适于表达时间标签刻度的时间轴。时间轴的默认设计更突出重要的信息,并且提供了更灵活的定制化能力,让开发者根据不同的需求定制时间轴的标签内容。</p>\n<p>首先,时间轴不再如之前般绝对平均分割,而是选取年、月、日、整点这类更有意义的点来展示,并且能同时显示不同层级的刻度。标签的 <code class=\"codespan\">formatter</code> 支持了时间模版(例如 <code class=\"codespan\">{yyyy}-{MM}-{dd}</code>),并且可以为不同时间粒度的标签指定不同的 <code class=\"codespan\">formatter</code>,结合已有的富文本标签,可以定制出醒目而多样的时间效果。</p>\n<p>不同的 dataZoom 粒度下时间刻度的显示:</p>\n<p><img src=\"documents/asset/img/feature-v5/time-axis.png\" width=\"600px\" /></p>\n<p><img src=\"documents/asset/img/feature-v5/time-axis-2.png\" width=\"600px\" /></p>\n<h4 id=\"-\">提示框</h4>\n<p>提示框(Tooltip)是一种最常用的可视化组件,可以帮助用户交互式地了解数据的详细信息。在 Apache ECharts 5 中,我们对提示框的样式进行了优化,通过对字体样式,颜色的调整,指向图形的箭头,跟随图形颜色的边框色等功能,让提示框的默认展示优雅又清晰。并且改进了富文本的渲染逻辑,确保显示效果与 HTML 方式一致,让用户在不同场景下可以选择不同的技术方案实现同样的效果。</p>\n<p><img src=\"documents/asset/img/feature-v5/new-tooltip.png\" height=\"200px\" />\n<img src=\"documents/asset/img/feature-v5/new-tooltip-2.png\" height=\"200px\" /></p>\n<p>除此之外,我们这次也加上了提示框内的列表按照数值大小或者类目顺序排序的功能。</p>\n<h4 id=\"-\">仪表盘</h4>\n<p>我们看到社区用户创建了很多酷炫的仪表盘图表,但是他们的配置方式往往比较复杂而取巧。因此,我们对仪表盘的功能作了全面升级,支持了图片或者矢量路径绘制指针、也支持了锚点(anchor)配置项、进度条(progress)、圆角效果等等配置项。</p>\n<p>不同样式的仪表盘指针:</p>\n<p><img src=\"documents/asset/img/feature-v5/gauge-pointer.png\" width=\"600px\" /></p>\n<p>这些升级,不仅可以让开发者用更简单的配置项实现酷炫的效果,而且带来了更丰富的定制能力。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=gauge-clock&edit=1&reset=1\" width=\"600\" height=\"600\" ></iframe>\n\n\n<h4 id=\"-\">扇形圆角</h4>\n<p>圆角可以带来更美观而柔和的视觉,也能够赋予更多的创造力。Apache ECharts 5 支持了饼图、旭日图、矩形树图的扇形圆角。可不要小看了简单的圆角配置项,合理地搭配其他的效果,就可以形成更具个性的的可视化作品。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=sunburst-borderRadius&edit=1&reset=1\" width=\"400\" height=\"400\" ></iframe>\n\n\n\n\n<h2 id=\"-\">交互能力</h2>\n<p>可视化作品的交互能力帮助用户探索了解作品,加深对于图表主旨的理解。</p>\n<h4 id=\"-\">状态管理</h4>\n<p>在 ECharts 4 中有高亮(emphasis)和普通(normal)两个交互的状态,在鼠标移到图形上的时候会进入高亮状态以区分该数据,开发者可以分别设置这两个状态的颜色,阴影等样式。</p>\n<p>这次在 Apache ECharts 5 中,我们在原先的鼠标 hover 高亮的基础上,新增加了<strong>淡出</strong>其它非相关元素的效果,从而可以达到聚焦目标数据的目的。</p>\n<p>比如在这个<a href=\"https://echarts.apache.org/examples/zh/editor.html?c=bar-y-category-stack\" target=\"_blank\">柱状图</a>的例子中,鼠标移到一个系列上的时候,其它非相关的系列就会淡出,从而可以更清晰的突出聚焦系列中数据的对比。在关系图,树图,旭日图,桑基等更复杂数据结构的图上,也可以通过淡出非相关元素来观察数据之间的联系。而且颜色,阴影等在高亮(emphasis)中可以设置的样式,现在也可以在淡出(blur)状态中设置了。</p>\n<p>除此之外,我们为所有系列还添加了<strong>点击选中</strong>这个之前只有在饼图、地图等少数系列中才能开启的交互,开发者可以设置为单选或多选模式,并且通过监听 <code class=\"codespan\">selectchanged</code> 事件获取到选中的所有图形然后进行更进一步的处理。与高亮和淡出一样,选中的样式也可以在 <code class=\"codespan\">select</code> 中配置。</p>\n<h4 id=\"-\">性能提升</h4>\n<h5 id=\"-\">脏矩形渲染</h5>\n<p>Apache ECharts 5 新支持了脏矩形渲染,解决只有局部变化的场景下的性能瓶颈。在使用 Canvas 渲染器时,脏矩形渲染技术探测并只更新视图变化的部分,而不是任何变动都引起画布完全重绘。这能在一些特殊场景下帮助提高渲染帧率,例如在图形很多时候,鼠标频繁触发一些图形高亮的场景。以往这类场景,会使用额外的 Canvas 层以优化性能,但是这种方式不是所有场景都通用,而且对于复杂的样式的效果并不理想。脏矩形渲染很好地同时满足了性能和显示正确。</p>\n<p>脏矩形的可视化演示,红色框选部分为该帧重绘区域:</p>\n<p><img src=\"documents/asset/img/feature-v5/dirty-rect.gif\" width=\"500px\" /></p>\n<p>大家在新的示例页面选择开启脏矩形优化就可以看到该效果。</p>\n<h5 id=\"-\">实时时序数据的折线图性能优化</h5>\n<p>除此之外,海量数据下折线图的性能也有了大幅度的性能提升。我们经常碰到大量的实时时序数据的高性能绘制的需求,这些数据可能需要几百或者几十毫秒更新一次。</p>\n<p>Apache ECharts 5 对这些场景下的 CPU 消耗、内存占用、初始化时间都进行了深度的优化,使得百万量级的数据也能做到实时的更新(每次更新耗时少于 30ms),甚至对于千万级的数据,也可以在 1s 内渲染完,并且保持很小的内存占用以及流畅的提示框(tooltip)等交互。</p>\n<h2 id=\"-\">开发体验</h2>\n<p>我们希望如此强大的可视化工具可以被更多开发者以更简单的方式使用,因而开发者的开发体验也是我们非常关注的方面。</p>\n<h4 id=\"-\">数据集</h4>\n<p>ECharts 5 加强了数据集的数据转换能力,让开发者可以使用简单的方式实现常用的数据处理,如:数据过滤(filter)、排序(sort)、聚合(aggregate)、直方图(histogram)、简单聚类(clustering)、回归线计算(regression)等。开发者可以用统一的声明式方式来使用这些功能,可以方便地实现常用的数据操作。</p>\n<h4 id=\"-\">国际化</h4>\n<p>ECharts 原有的国际化方案,采用的是根据不同的语言参数打包出不同的部署文件的形式。​这种方式,使动态的语言和静态的代码包绑定在一起,使用的时候只能通过重新加载不同语言版本的 ECharts 代码来达到切换语言的目的。</p>\n<p>因此,从 Apache ECharts 5 开始,动态的语言包和静态的代码包分离开。切换语言的时候,只需要加载相应语言包​,通过类似挂载主题的方式,使用 <code class=\"codespan\">registerLocale</code> 函数挂载语言包对象​,重新初始化后就完成了语言的切换​。</p>\n<pre><code class=\"lang-js\">// import the lang object and set when init​\necharts.registerLocale(&#39;DE&#39;, lang);​\necharts.init(DomElement, null, {​\n   locale: &#39;DE&#39;​\n});\n</code></pre>\n<h4 id=\"typescript-\">TypeScript 重构</h4>\n<p>在近 8 年的时间里,Apache ECharts 已经发展成一个非常复杂的可视化库了,为了续可以更安全高效的进行重构和新功能的开发,我们在 Apache ECharts 5 的开发之初,使用 TypeScript 对代码进行了重写,TypeScript 所带来的强类型让我们更有信心地在 ECharts 5 开发的时候对代码进行大刀阔斧的重构以实现更多令人激动人心的特性。</p>\n<p>对于开发者,我们也可以从 TypeScript 代码直接生成更好更符合代码的<code class=\"codespan\">DTS</code>类型描述文件。在此之前,ECharts 的类型描述文件一直是由社区开发者帮我们维护并发布到<a href=\"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/echarts\" target=\"_blank\">DefinityTyped</a>,这个有着不小的工作量,非常感谢大家的贡献。</p>\n<p>除此之外,如果开发者的组件是按需引入的,我们还提供了一个 <code class=\"codespan\">ComposeOption</code> 类型方法,可以组合出一个只包含了引入组件的配置项类型,可以带来更严格的类型检查,帮助你提前检测到未引入的组件类型。</p>\n<h2 id=\"-\">可访问性</h2>\n<p>Apache ECharts 一直非常重视无障碍设计,我们希望让视觉障碍人士也能平等了解图表传递的信息。并且也希望图表的开发者能以极低的开发成本实现这一点,因而有利于让开发者更愿意为视觉障碍人士提供支持。</p>\n<p>在上一个大版本中,我们支持了根据不同的图表类型和数据自动一键智能生成图表描述的功能,帮助开发者非常方便地支持图表的 DOM 描述信息。在 ECharts 5 中,我们也做了更多提高可访问性的设计,帮助视觉障碍人士更好地理解图表内容。</p>\n<h4 id=\"-\">主题配色</h4>\n<p>我们在设计新版默认主题样式的时候,将无障碍设计作为一个重要的考量依据,对颜色的明度和色值都进行反复测试,帮助视觉辨识障碍用户清楚地识别图表数据。​</p>\n<p>并且,针对有更进一步无障碍需求的开发者,我们还提供了特殊的高对比度主题,以更高对比度颜色的主题将数据作进一步区分。</p>\n<h4 id=\"-\">贴花图案</h4>\n<p>ECharts 5 还新增提供了贴花的功能,用图案辅助颜色表达,进一步帮助用户区分数据。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/aria-decal-simple&edit=1&reset=1\" width=\"600\" height=\"350\" ></iframe>\n\n\n<p>此外,贴花图案还能在一些其他的场景下提供帮助,比如:在报纸、书籍之类只有单色或者非常少的颜色的印刷品中,帮助更好地区分数据;用图形元素方便用户对数据产生更直观的理解等。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/aria-decal-newspaper&edit=1&reset=1\" width=\"600\" height=\"350\" ></iframe>\n\n\n\n\n<h2 id=\"-\">小结</h2>\n<p>除了以上介绍的功能,Apache ECharts 还在非常多的细节中做了改进,帮助开发者更轻松地创建默认好用、配置灵活的图表,用图表讲述数据背后的故事。</p>\n<p>感谢所有使用过 ECharts,甚至参与过社区贡献的开发者,正是你们才使得 Apache ECharts 5 成为可能。我们会以更大的热情投入到未来的开发中,Apache ECharts 也会以更大的诚意和大家在 6 相见!</p>\n"},"ECharts 5 升级指南":{"type":["*"],"description":"<p>本指南面向那些希望将 echarts 4.x(以下简称 <code class=\"codespan\">v4</code>)升级到 echarts 5.x(以下简称 <code class=\"codespan\">v5</code>)的用户。大家可以在 <a href=\"tutorial.html#ECharts%205%20新特性\" target=\"_blank\">ECharts 5 新特性</a> 中了解这次<code class=\"codespan\">v5</code>带来了哪些值得升级的新特性。在绝大多数情况下,开发者用不着为这个升级做什么额外的事,因为 echarts 一直尽可能地保持 API 的稳定和向后兼容。但是,<code class=\"codespan\">v5</code> 仍然带来了一些非兼容改动,需要特别关注。此外,在一些情况下,<code class=\"codespan\">v5</code> 提供了更好的 API 用来取代之前的 API,这些被取代的 API 将不再被推荐使用(当然,我们尽量兼容了这些改动)。我们会在这篇文档里尽量详尽得解释这些改动。</p>\n<p>因为我们在 <code class=\"codespan\">v5.0.1</code> 增加了新的<a href=\"tutorial.html#%E5%9C%A8%E6%89%93%E5%8C%85%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8%20ECharts\" target=\"_blank\">按需引入接口</a>,所以本文档基于 <code class=\"codespan\">v5.0.1</code> 或者更高的版本。</p>\n<h2 id=\"-\">非兼容性改变</h2>\n<h4 id=\"-theme-\">默认主题(theme)</h4>\n<p>首先是默认主题的改动,<code class=\"codespan\">v5</code> 在配色等主题设计上做了很多的优化来达到更好的视觉效果。如果大家依旧想保留旧版本的颜色,可以手动声明颜色,如下:</p>\n<pre><code class=\"lang-js\">chart.setOption({\n    color: [\n        &#39;#c23531&#39;, &#39;#2f4554&#39;, &#39;#61a0a8&#39;, &#39;#d48265&#39;, &#39;#91c7ae&#39;, &#39;#749f83&#39;,\n        &#39;#ca8622&#39;, &#39;#bda29a&#39;, &#39;#6e7074&#39;, &#39;#546570&#39;, &#39;#c4ccd3&#39;\n    ],\n    // ...\n});\n</code></pre>\n<p>或者,做一个简单的 <code class=\"codespan\">v4</code> 主题:</p>\n<pre><code class=\"lang-js\">var themeEC4 = {\n    color: [\n        &#39;#c23531&#39;, &#39;#2f4554&#39;, &#39;#61a0a8&#39;, &#39;#d48265&#39;, &#39;#91c7ae&#39;, &#39;#749f83&#39;,\n        &#39;#ca8622&#39;, &#39;#bda29a&#39;, &#39;#6e7074&#39;, &#39;#546570&#39;, &#39;#c4ccd3&#39;\n    ]\n};\nvar chart = echarts.init(dom, themeEC4);\nchart.setOption(/* ... */);\n</code></pre>\n<h4 id=\"-echarts\">引用 ECharts</h4>\n<h5 id=\"-default-exports-\">去除 default exports 的支持</h5>\n<p>如果使用者在 <code class=\"codespan\">v4</code> 中这样引用了 echarts:</p>\n<pre><code class=\"lang-js\">import echarts from &#39;echarts&#39;;\n// 或者按需引入\nimport echarts from &#39;echarts/lib/echarts&#39;;\n</code></pre>\n<p>这两种方式,<code class=\"codespan\">v5</code> 中不再支持了。</p>\n<p>使用者需要如下更改代码解决这个问题:</p>\n<pre><code class=\"lang-js\">import * as echarts from &#39;echarts&#39;;\n// 按需引入\nimport * as echarts from &#39;echarts/lib/echarts&#39;;\n</code></pre>\n<h5 id=\"-\">按需引入</h5>\n<p>在 5.0.1 中,我们引入了新的<a href=\"tutorial.html#%E5%9C%A8%E6%89%93%E5%8C%85%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8%20ECharts\" target=\"_blank\">按需引入接口</a></p>\n<pre><code class=\"lang-js\">import * as echarts from &#39;echarts/core&#39;;\nimport { BarChart } from &#39;echarts/charts&#39;;\nimport { GridComponent } from &#39;echarts/components&#39;;\n// 注意,新的接口中默认不再包含 Canvas 渲染器,需要显示引入,如果需要使用 SVG 渲染模式则使用 SVGRenderer\nimport { CanvasRenderer } from &#39;echarts/renderers&#39;;\n\necharts.use([BarChart, GridComponent, CanvasRenderer]);\n</code></pre>\n<p>为了方便大家了解自己的配置项需要引入哪些模块,我们新的示例编辑页面添加了生成按需引入代码的功能,大家可以在示例编辑页的<code class=\"codespan\">完整代码</code>标签下选中按需引入后查看需要引入的模块以及相关代码。</p>\n<p>在大部分情况下,我们都推荐大家尽可能用这套新的按需引入接口,它可以最大程度的利用打包工具 tree-shaking 的能力,并且可以有效解决命名空间冲突的问题而且防止了内部结构的暴露。如果你依旧在使用 CommonJS 的模块写法,之前的方式我们也依旧是支持的:</p>\n<pre><code class=\"lang-js\">const echarts = require(&#39;echarts/lib/echarts&#39;);\nrequire(&#39;echarts/lib/chart/bar&#39;);\nrequire(&#39;echarts/lib/component/grid&#39;);\n</code></pre>\n<p>其次,因为我们的源代码已使用 TypeScript 重写,<code class=\"codespan\">v5</code> 将不再支持从 <code class=\"codespan\">echarts/src</code> 引用文件,需要改为从<code class=\"codespan\">echarts/lib</code>引入。</p>\n<h5 id=\"-\">依赖调整</h5>\n<blockquote>\n<p>注意:该部分只针对为了保证较小的打包体积而是用按需引入接口的开发者,如果是全量引入的不需要关注</p>\n</blockquote>\n<p>为了保证 tree-shaking 后的体积足够小,我们去除了一些之前会默认被打包进来的依赖。比如前面提到的在使用新的按需引入接口的时候,<code class=\"codespan\">CanvasRenderer</code>将不再被默认引入,这样可以保证只需要使用 SVG 渲染模式的时候不会把不需要的 Canvas 渲染代码也一起打包进来,除此之外,还有下面这些依赖的改动:</p>\n<ul>\n<li>在使用折线图,柱状图中不再默认引入直角坐标系组件,因此之前使用下面的引入方式<pre><code class=\"lang-js\">const echarts = require(&#39;echarts/lib/echarts&#39;);\nrequire(&#39;echarts/lib/chart/bar&#39;);\nrequire(&#39;echarts/lib/chart/line&#39;);\n</code></pre>\n需要再单独引入<code class=\"codespan\">grid</code>组件<pre><code class=\"lang-js\">require(&#39;echarts/lib/component/grid&#39;);\n</code></pre>\n</li>\n</ul>\n<p>参考 issue:<a href=\"https://github.com/apache/echarts/issues/14080\" target=\"_blank\">#14080</a>, <a href=\"https://github.com/apache/echarts/issues/13764\" target=\"_blank\">#13764</a></p>\n<ul>\n<li>默认不再引入<code class=\"codespan\">aria</code>组件,如果需要的话可以手动引入。<pre><code class=\"lang-js\">import { AriaComponent } from &#39;echarts/components&#39;;\necharts.use(AriaComponent);\n</code></pre>\n或者:<pre><code class=\"lang-js\">require(&#39;echarts/lib/component/aria&#39;);\n</code></pre>\n</li>\n</ul>\n<h4 id=\"-geojson\">去除内置的 geoJSON</h4>\n<p><code class=\"codespan\">v5</code> 移除了内置的 geoJSON(原先在 <code class=\"codespan\">echarts/map</code> 文件夹下)。这些 geoJSON 文件本就一直来源于第三方。如果使用者仍然需要他们,可以去从老版本中得到,或者自己寻找更合适的数据然后通过 registerMap 接口注册到 ECharts 中。</p>\n<h4 id=\"-\">浏览器兼容性</h4>\n<p><code class=\"codespan\">v5</code> 不再支持 IE8 浏览器。我们不再继续维护和升级之前的 <a href=\"https://github.com/ecomfe/zrender/tree/4.3.2/src/vml\" target=\"_blank\">VML 渲染器</a> 来着实现 IE8 的兼容。如果使用者确实有很强的需求,那么欢迎提 pull request 来升级 VML 渲染器,或者单独维护一个第三方 VML 渲染器,我们从 <code class=\"codespan\">v5.0.1</code> 开始支持注册独立的渲染器了。</p>\n<h4 id=\"echarts-\">ECharts 配置项调整</h4>\n<h5 id=\"-\">视觉样式设置的优先级改变</h5>\n<p><code class=\"codespan\">v5</code> 对调了 <a href=\"option.html#visualMap\" target=\"_blank\">visualMap 组件</a> 和 <a href=\"option.html#series-scatter.itemStyle\" target=\"_blank\">itemStyle</a> | <a href=\"option.html#series-scatter.lineStyle\" target=\"_blank\">lineStyle</a> | <a href=\"option.html#series-scatter.areaStyle\" target=\"_blank\">areaStyle</a> 的视觉样式优先级。</p>\n<p>具体来说,<code class=\"codespan\">v4</code> 中,<a href=\"option.html#visualMap\" target=\"_blank\">visualMap 组件</a> 中生成的视觉样式(如,颜色、图形类型、图形尺寸等)的优先级,比开发者在 <a href=\"option.html#series-scatter.itemStyle\" target=\"_blank\">itemStyle</a> | <a href=\"option.html#series-scatter.lineStyle\" target=\"_blank\">lineStyle</a> | <a href=\"option.html#series-scatter.areaStyle\" target=\"_blank\">areaStyle</a> 中设置的样式的优先级高,也就是说如果他们同时设置的话,前者会生效而后者不会生效。这带来了些麻烦:假如使用者在使用 <a href=\"option.html#visualMap\" target=\"_blank\">visualMap 组件</a> 时,又想针对某个数据项对应的图形,设置 <a href=\"option.html#series-scatter.itemStyle\" target=\"_blank\">itemStyle</a> 样式,则做不到。<code class=\"codespan\">v5</code> 中于是提高了 <a href=\"option.html#series-scatter.itemStyle\" target=\"_blank\">itemStyle</a> | <a href=\"option.html#series-scatter.lineStyle\" target=\"_blank\">lineStyle</a> | <a href=\"option.html#series-scatter.areaStyle\" target=\"_blank\">areaStyle</a> 的优先级,使他们能生效。</p>\n<p>在绝大多处情况下,这个变化并不会带来什么影响。但是为保险起见,使用者在升级 <code class=\"codespan\">v4</code> 到 <code class=\"codespan\">v5</code> 时,还是可以检查下,是否有同时使用 <a href=\"option.html#visualMap\" target=\"_blank\">visualMap</a> 和 <a href=\"option.html#series-scatter.itemStyle\" target=\"_blank\">itemStyle</a> | <a href=\"option.html#series-scatter.lineStyle\" target=\"_blank\">lineStyle</a> | <a href=\"option.html#series-scatter.areaStyle\" target=\"_blank\">areaStyle</a> 的情况。</p>\n<h5 id=\"-padding\">富文本的 <code class=\"codespan\">padding</code></h5>\n<p><code class=\"codespan\">v5</code> 调整了 <a href=\"option.html#series-scatter.label.rich.&lt;style_name&gt;.padding\" target=\"_blank\">rich.?.padding</a> 的格式使其更符合 CSS 的规范。<code class=\"codespan\">v4</code> 里,例如 <code class=\"codespan\">rich.?.padding: [11, 22, 33, 44]</code> 表示 <code class=\"codespan\">padding-top</code> 是 <code class=\"codespan\">33</code> 且 <code class=\"codespan\">padding-bottom</code> 是 <code class=\"codespan\">11</code>。在 <code class=\"codespan\">v5</code> 中调整了上下的位置,<code class=\"codespan\">rich.?.padding: [11, 22, 33, 44]</code> 表示  <code class=\"codespan\">padding-top</code> 是 <code class=\"codespan\">11</code> 且 <code class=\"codespan\">padding-bottom</code> 是 <code class=\"codespan\">33</code>。</p>\n<p>如果使用者有在使用 <a href=\"option.html#series-scatter.label.rich.&lt;style_name&gt;.padding\" target=\"_blank\">rich.?.padding</a>,需要注意调整下这个顺序。</p>\n<h2 id=\"echarts-\">ECharts 的相关扩展</h2>\n<p>如果想要升级到 <code class=\"codespan\">v5</code> ,下面这些扩展需要升级到最新的版本实现兼容。</p>\n<ul>\n<li><a href=\"https://github.com/ecomfe/echarts-gl\" target=\"_blank\">echarts-gl</a></li>\n<li><a href=\"https://github.com/ecomfe/echarts-wordcloud\" target=\"_blank\">echarts-wordcloud</a></li>\n<li><a href=\"https://github.com/ecomfe/echarts-liquidfill\" target=\"_blank\">echarts-liquidfill</a></li>\n</ul>\n<h2 id=\"-api\">不再推荐使用的 API</h2>\n<p>一些 API(包括接口调用,事件监听和配置项)在 <code class=\"codespan\">v5</code> 中不再推荐使用。当然,使用者仍然可以用他们,只是会在 dev 模式下,在 console 中打印一些 warning,并不会影响功能。但是从长远维护考虑,我们还是推荐升级成新的 API。</p>\n<p>下面是不再推荐使用的 API 以及推荐的新 API:</p>\n<ul>\n<li>图形元素 transform 相关的属性被改变了:<ul>\n<li>变更点:<ul>\n<li><code class=\"codespan\">position: [number, number]</code> 改为 <code class=\"codespan\">x: number</code> / <code class=\"codespan\">y: number</code>。</li>\n<li><code class=\"codespan\">scale: [number, number]</code> 改为 <code class=\"codespan\">scaleX: number</code> / <code class=\"codespan\">scaleY: number</code>。</li>\n<li><code class=\"codespan\">origin: [number, number]</code> 改为 <code class=\"codespan\">originX: number</code> / <code class=\"codespan\">originY: number</code>。</li>\n</ul>\n</li>\n<li><code class=\"codespan\">position</code>、<code class=\"codespan\">scale</code> 和 <code class=\"codespan\">origin</code> 仍然支持,但已不推荐使用。</li>\n<li>它影响到这些地方:<ul>\n<li>在<code class=\"codespan\">graphic</code>组件中:每个元素的声明。</li>\n<li>在 <code class=\"codespan\">custom series</code> 中:<code class=\"codespan\">renderItem</code> 返回的每个元素的声明。</li>\n<li>直接使用 zrender 图形元素时。</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>Text 相关的属性被改变:<ul>\n<li>变更点:<ul>\n<li>图形元素附带的文本的声明方式被改变:<ul>\n<li>除了 <code class=\"codespan\">Text</code> 元素之外,其他元素中的属性 <code class=\"codespan\">style.text</code> 都不推荐使用了。取而代之的是新属性 <code class=\"codespan\">textContent</code> 和 <code class=\"codespan\">textConfig</code>,他们能带来更丰富的功能。</li>\n<li>其中,下面左边部分的这些属性已不推荐使用或废弃。请使用下面的右边部分的属性:<ul>\n<li>textPosition =&gt; textConfig.position</li>\n<li>textOffset =&gt; textConfig.offset</li>\n<li>textRotation =&gt; textConfig.rotation</li>\n<li>textDistance =&gt; textConfig.distance</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>下面左边部分的属性在 <code class=\"codespan\">style</code> 和 <code class=\"codespan\">style.rich.?</code> 中已不推荐使用或废弃。请使用下面右边的属性:<ul>\n<li>textFill =&gt; fill</li>\n<li>textStroke =&gt; stroke</li>\n<li>textFont =&gt; font</li>\n<li>textStrokeWidth =&gt; lineWidth</li>\n<li>textAlign =&gt; align</li>\n<li>textVerticalAlign =&gt; verticalAlign</li>\n<li>textLineHeight =&gt;</li>\n<li>textWidth =&gt; width</li>\n<li>textHeight =&gt; hight</li>\n<li>textBackgroundColor =&gt; backgroundColor</li>\n<li>textPadding =&gt; padding</li>\n<li>textBorderColor =&gt; borderColor</li>\n<li>textBorderWidth =&gt; borderWidth</li>\n<li>textBorderRadius =&gt; borderRadius</li>\n<li>textBoxShadowColor =&gt; shadowColor</li>\n<li>textBoxShadowBlur =&gt; shadowBlur</li>\n<li>textBoxShadowOffsetX =&gt; shadowOffsetX</li>\n<li>textBoxShadowOffsetY =&gt; shadowOffsetY</li>\n</ul>\n</li>\n<li>注:这些属性并没有变化:<ul>\n<li>textShadowColor</li>\n<li>textShadowBlur</li>\n<li>textShadowOffsetX</li>\n<li>textShadowOffsetY</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>它影响到这些地方:<ul>\n<li>在 <code class=\"codespan\">graphic</code> 组件中:每个元素的声明。(原来的写法仍兼容,但在一些很复杂的情况下,可能效果不完全一致。)</li>\n<li>在自定义系列(<code class=\"codespan\">custom series</code>)中:<code class=\"codespan\">renderItem</code> 返回中的每个元素的声明。(原来的写法仍兼容,但在一些很复杂的情况下,可能效果不完全一致。)</li>\n<li>直接使用 zrender API 创建图形元素。(不再兼容,原写法被废弃。)</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>图表实例上的 API:<ul>\n<li><code class=\"codespan\">chart.one(...)</code> 已不推荐使用。</li>\n</ul>\n</li>\n<li><code class=\"codespan\">label</code>。<ul>\n<li>属性 <code class=\"codespan\">color</code>、<code class=\"codespan\">textBorderColor</code>、<code class=\"codespan\">backgroundColor</code>、<code class=\"codespan\">borderColor</code> 中,值 <code class=\"codespan\">auto</code> 已不推荐使用,而推荐使用 <code class=\"codespan\">&#39;inherit&#39;</code> 代替。</li>\n</ul>\n</li>\n<li><code class=\"codespan\">hoverAnimation</code>:<ul>\n<li>选项 <code class=\"codespan\">series.hoverAnimation</code> 已不推荐使用,使用 <code class=\"codespan\">series.emphasis.scale</code> 代替之。</li>\n</ul>\n</li>\n<li>折线图(<code class=\"codespan\">line series</code>):<ul>\n<li>选项 <code class=\"codespan\">series.clipOverflow</code> 已不推荐使用,使用 <code class=\"codespan\">series.clip</code> 代替之。</li>\n</ul>\n</li>\n<li>自定义系列(<code class=\"codespan\">custom series</code>)。<ul>\n<li>在 <code class=\"codespan\">renderItem</code> 中,<code class=\"codespan\">api.style(...)</code> 和 <code class=\"codespan\">api.styleEmphasis(...)</code> 已不推荐使用。因为这两个接口其实并不真正必要,也很难保证向后兼容。用户可以通过 <code class=\"codespan\">api.visual(...)</code> 获取系统自动分配的视觉信息。</li>\n</ul>\n</li>\n<li>旭日图(<code class=\"codespan\">sunburst</code>):<ul>\n<li>动作类型 <code class=\"codespan\">highlight</code> 已被弃用,请使用 <code class=\"codespan\">sunburstHighlight</code> 代替。</li>\n<li>动作类型 <code class=\"codespan\">downplay</code> 已被弃用,请使用 <code class=\"codespan\">sunburstUnhighlight</code> 代替。</li>\n<li>选项 <code class=\"codespan\">series.downplay</code> 已被弃用,请使用 <code class=\"codespan\">series.blur</code> 代替。</li>\n<li>选项 <code class=\"codespan\">series.highlightPolicy</code> 已不适用,请使用 <code class=\"codespan\">series.emphasis.focus</code> 代替。</li>\n</ul>\n</li>\n<li>饼图(<code class=\"codespan\">pie</code>):<ul>\n<li>下面左边部分的 action 名已经不推荐使用。请使用右边的 action 名。<ul>\n<li><code class=\"codespan\">pieToggleSelect</code> =&gt; <code class=\"codespan\">toggleSelect</code>。</li>\n<li><code class=\"codespan\">pieSelect</code> =&gt; <code class=\"codespan\">select</code>。</li>\n<li><code class=\"codespan\">pieUnSelect</code> =&gt; <code class=\"codespan\">unselect</code>。</li>\n</ul>\n</li>\n<li>下面左边部分的事件名已经不推荐使用。请使用右边的事件名。<ul>\n<li><code class=\"codespan\">pieselectchanged</code> =&gt; <code class=\"codespan\">selectchanged</code>。</li>\n<li><code class=\"codespan\">pieselected</code> =&gt; <code class=\"codespan\">selected</code>。</li>\n<li><code class=\"codespan\">pieunselected</code> =&gt; <code class=\"codespan\">unselected</code>。</li>\n</ul>\n</li>\n<li>选项 <code class=\"codespan\">series.label.margin</code> 已经不推荐使用。使用 <code class=\"codespan\">series.label.edgeDistance</code> 代替。</li>\n<li>选项 <code class=\"codespan\">series.clockWise</code> 已经不推荐使用。使用 <code class=\"codespan\">series.clockwise</code> 代替。</li>\n<li>选项 <code class=\"codespan\">series.hoverOffset</code> 已经不推荐使用。使用 <code class=\"codespan\">series.emphasis.scaleSize</code> 代替。</li>\n</ul>\n</li>\n<li>地图(<code class=\"codespan\">map series</code>):<ul>\n<li>下文左边部分的 action 名已经不推荐使用。请使用右边的 action 名。<ul>\n<li><code class=\"codespan\">mapToggleSelect</code> =&gt; <code class=\"codespan\">toggleSelect</code>。</li>\n<li><code class=\"codespan\">mapSelect</code> =&gt; <code class=\"codespan\">select</code>。</li>\n<li><code class=\"codespan\">mapUnSelect</code> =&gt; <code class=\"codespan\">unselect</code>。</li>\n</ul>\n</li>\n<li>下面左边部分的事件名已经不推荐使用。请使用右边的事件名。<ul>\n<li><code class=\"codespan\">mapselectchanged</code> =&gt; <code class=\"codespan\">selectchanged</code>。</li>\n<li><code class=\"codespan\">mapselected</code> =&gt; <code class=\"codespan\">selected</code>。</li>\n<li><code class=\"codespan\">mapunselected</code> =&gt; <code class=\"codespan\">unselected</code>。</li>\n</ul>\n</li>\n<li>选项 <code class=\"codespan\">series.mapType</code> 已经不推荐使用。使用 <code class=\"codespan\">series.map</code> 代替。</li>\n<li>选项 <code class=\"codespan\">series.mapLocation</code> 已经不推荐使用。</li>\n</ul>\n</li>\n<li>关系图(<code class=\"codespan\">graph series</code>):<ul>\n<li>选项 <code class=\"codespan\">series.focusNodeAdjacency</code> 已经不推荐使用。使用 <code class=\"codespan\">series.emphasis: { focus: &#39;adjacency&#39;}</code> 代替。</li>\n</ul>\n</li>\n<li>仪表盘(<code class=\"codespan\">gauge series</code>):<ul>\n<li>选项 <code class=\"codespan\">series.clockWise</code> 已经不推荐使用。使用 <code class=\"codespan\">series.clockwise</code> 代替。</li>\n<li>选项 <code class=\"codespan\">series.hoverOffset</code> 已经不推荐使用。使用 <code class=\"codespan\">series.emphasis.scaleSize</code> 代替。</li>\n</ul>\n</li>\n<li><code class=\"codespan\">dataZoom</code> 组件:<ul>\n<li>选项 <code class=\"codespan\">dataZoom.handleIcon</code> 如果使用 <code class=\"codespan\">SVGPath</code>,需要前缀 <code class=\"codespan\">path://</code>。</li>\n</ul>\n</li>\n<li>雷达图(<code class=\"codespan\">radar</code>):<ul>\n<li>选项 <code class=\"codespan\">radar.name</code> 已经不推荐使用。使用 <code class=\"codespan\">radar.axisName</code> 代替。</li>\n<li>选项 <code class=\"codespan\">radar.nameGap</code> 已经不推荐使用。使用 <code class=\"codespan\">radar.axisNameGap</code> 代替。</li>\n</ul>\n</li>\n<li>Parse and format:<ul>\n<li><code class=\"codespan\">echarts.format.formatTime</code> 已经不推荐使用。使用 <code class=\"codespan\">echarts.time.format</code> 代替。</li>\n<li><code class=\"codespan\">echarts.number.parseDate</code> 已经不推荐使用。使用 <code class=\"codespan\">echarts.time.parse</code> 代替。</li>\n<li><code class=\"codespan\">echarts.format.getTextRect</code> 已经不推荐使用。</li>\n</ul>\n</li>\n</ul>\n"},"在打包环境中使用 ECharts":{"type":["*"],"description":"<p>假如你的开发环境使用了<code class=\"codespan\">npm</code>或者<code class=\"codespan\">yarn</code>等包管理工具,并且使用 Webpack 等打包工具进行构建,本文将会介绍如何引入 Apache ECharts<sup>TM</sup> 并通过 treeshaking 只打包需要的模块。</p>\n<h2 id=\"npm-echarts\">NPM 安装 ECharts</h2>\n<p>你可以使用如下命令通过 npm 安装 ECharts</p>\n<pre><code class=\"lang-shell\">npm install echarts --save\n</code></pre>\n<h2 id=\"-echarts\">引入 ECharts</h2>\n<pre><code class=\"lang-js\">import * as echarts from &#39;echarts&#39;;\n\n// 基于准备好的dom,初始化echarts实例\nvar myChart = echarts.init(document.getElementById(&#39;main&#39;));\n// 绘制图表\nmyChart.setOption({\n    title: {\n        text: &#39;ECharts 入门示例&#39;\n    },\n    tooltip: {},\n    xAxis: {\n        data: [&#39;衬衫&#39;, &#39;羊毛衫&#39;, &#39;雪纺衫&#39;, &#39;裤子&#39;, &#39;高跟鞋&#39;, &#39;袜子&#39;]\n    },\n    yAxis: {},\n    series: [{\n        name: &#39;销量&#39;,\n        type: &#39;bar&#39;,\n        data: [5, 20, 36, 10, 10, 20]\n    }]\n});\n</code></pre>\n<h2 id=\"-echarts-\">按需引入 ECharts 图表和组件</h2>\n<p>上面的代码会引入所有 ECharts 中所有的图表和组件,但是假如你不想引入所有组件,也可以使用 ECharts 提供的按需引入的接口来打包必须的组件。</p>\n<pre><code class=\"lang-js\">// 引入 echarts 核心模块,核心模块提供了 echarts 使用必须要的接口。\nimport * as echarts from &#39;echarts/core&#39;;\n// 引入柱状图图表,图表后缀都为 Chart\nimport {\n    BarChart\n} from &#39;echarts/charts&#39;;\n// 引入提示框,标题,直角坐标系组件,组件后缀都为 Component\nimport {\n    TitleComponent,\n    TooltipComponent,\n    GridComponent\n} from &#39;echarts/components&#39;;\n// 引入 Canvas 渲染器,注意引入 CanvasRenderer 或者 SVGRenderer 是必须的一步\nimport {\n    CanvasRenderer\n} from &#39;echarts/renderers&#39;;\n\n// 注册必须的组件\necharts.use(\n    [TitleComponent, TooltipComponent, GridComponent, BarChart, CanvasRenderer]\n);\n\n// 接下来的使用就跟之前一样,初始化图表,设置配置项\nvar myChart = echarts.init(document.getElementById(&#39;main&#39;));\nmyChart.setOption({\n    ...\n});\n</code></pre>\n<blockquote>\n<p>需要注意的是注意为了保证打包的体积是最小的,ECharts 按需引入的时候不再提供任何渲染器,所以需要选择引入<code class=\"codespan\">CanvasRenderer</code>或者<code class=\"codespan\">SVGRenderer</code>作为渲染器。这样的好处是假如你只需要使用 svg 渲染模式,打包的结果中就不会再包含无需使用的<code class=\"codespan\">CanvasRenderer</code>模块。</p>\n</blockquote>\n<p>我们在示例编辑页的“完整代码”标签提供了非常方便的生成按需引入代码的功能。这个功能会根据当前的配置项动态生成最小的按需引入的代码。你可以直接在你的项目中使用。</p>\n<h2 id=\"-typescript-\">在 TypeScript 中按需引入</h2>\n<p>对于使用了 TypeScript 来开发 ECharts 的开发者,我们提供了类型接口来组合出最小的<code class=\"codespan\">EChartsOption</code>类型。这个更严格的类型可以有效帮助你检查出是否少加载了组件或者图表。</p>\n<pre><code class=\"lang-ts\">import * as echarts from &#39;echarts/core&#39;;\nimport {\n    BarChart,\n    // 系列类型的定义后缀都为 SeriesOption\n    BarSeriesOption,\n    LineChart,\n    LineSeriesOption\n} from &#39;echarts/charts&#39;;\nimport {\n    TitleComponent,\n    // 组件类型的定义后缀都为 ComponentOption\n    TitleComponentOption,\n    GridComponent,\n    GridComponentOption\n} from &#39;echarts/components&#39;;\nimport {\n    CanvasRenderer\n} from &#39;echarts/renderers&#39;;\n\n// 通过 ComposeOption 来组合出一个只有必须组件和图表的 Option 类型\ntype ECOption = echarts.ComposeOption&lt;\n  BarSeriesOption | LineSeriesOption | TitleComponentOption | GridComponentOption\n&gt;;\n\nvar option: ECOption = {\n    ...\n}\n</code></pre>\n"},"ECharts 基础概念概览":{"type":["*"],"description":"<p>本文介绍 Apache ECharts<sup>TM</sup> 最基本的名词和概念。</p>\n<h2 id=\"echarts-\">echarts 实例</h2>\n<p>一个网页中可以创建多个 <code class=\"codespan\">echarts 实例</code>。每个 <code class=\"codespan\">echarts 实例</code> 中可以创建多个图表和坐标系等等(用 <code class=\"codespan\">option</code> 来描述)。准备一个 DOM 节点(作为 echarts 的渲染容器),就可以在上面创建一个 echarts 实例。每个 echarts 实例独占一个 DOM 节点。</p>\n<p><br></p>\n<p><img width=\"500\" height=\"auto\" src=\"documents/asset/img/basic-concepts-overview/multiple-ec-instance.jpg\"></p>\n<h2 id=\"-series-\">系列(series)</h2>\n<p><code class=\"codespan\">系列</code>(<a href=\"option.html#series\" target=\"_blank\">series</a>)是很常见的名词。在 echarts 里,<code class=\"codespan\">系列</code>(<a href=\"option.html#series\" target=\"_blank\">series</a>)是指:一组数值以及他们映射成的图。“系列”这个词原本可能来源于“一系列的数据”,而在 echarts 中取其扩展的概念,不仅表示数据,也表示数据映射成为的图。所以,一个 <code class=\"codespan\">系列</code> 包含的要素至少有:一组数值、图表类型(<code class=\"codespan\">series.type</code>)、以及其他的关于这些数据如何映射成图的参数。</p>\n<p>echarts 里系列类型(<code class=\"codespan\">series.type</code>)就是图表类型。系列类型(<code class=\"codespan\">series.type</code>)至少有:<a href=\"option.html#series-line\" target=\"_blank\">line</a>(折线图)、<a href=\"option.html#series-bar\" target=\"_blank\">bar</a>(柱状图)、<a href=\"option.html#series-pie\" target=\"_blank\">pie</a>(饼图)、<a href=\"option.html#series-scatter\" target=\"_blank\">scatter</a>(散点图)、<a href=\"option.html#series-graph\" target=\"_blank\">graph</a>(关系图)、<a href=\"option.html#series-tree\" target=\"_blank\">tree</a>(树图)、...</p>\n<p>如下图,右侧的 <code class=\"codespan\">option</code> 中声明了三个 <code class=\"codespan\">系列</code>(<a href=\"option.html#series\" target=\"_blank\">series</a>):<a href=\"option.html#series-pie\" target=\"_blank\">pie</a>(饼图系列)、<a href=\"option.html#series-line\" target=\"_blank\">line</a>(折线图系列)、<a href=\"option.html#series-bar\" target=\"_blank\">bar</a>(柱状图系列),每个系列中有他所需要的数据(<a href=\"option.html#series.data\" target=\"_blank\">series.data</a>)。</p>\n<p><br></p>\n<p><img width=\"700\" height=\"auto\" src=\"documents/asset/img/basic-concepts-overview/series-all-a.jpg\"></p>\n<p><br></p>\n<p>类同地,下图中是另一种配置方式,系列的数据从 <a href=\"option.html#dataset\" target=\"_blank\">dataset</a> 中取:</p>\n<p><br></p>\n<p><img width=\"600\" height=\"auto\" src=\"documents/asset/img/basic-concepts-overview/series-all-b.jpg\"></p>\n<h2 id=\"-component-\">组件(component)</h2>\n<p>在系列之上,echarts 中各种内容,被抽象为“组件”。例如,echarts 中至少有这些组件:<a href=\"option.html#xAxis\" target=\"_blank\">xAxis</a>(直角坐标系 X 轴)、<a href=\"option.html#yAxis\" target=\"_blank\">yAxis</a>(直角坐标系 Y 轴)、<a href=\"option.html#grid\" target=\"_blank\">grid</a>(直角坐标系底板)、<a href=\"option.html#angleAxis\" target=\"_blank\">angleAxis</a>(极坐标系角度轴)、<a href=\"option.html#radiusAxis\" target=\"_blank\">radiusAxis</a>(极坐标系半径轴)、<a href=\"option.html#polar\" target=\"_blank\">polar</a>(极坐标系底板)、<a href=\"option.html#geo\" target=\"_blank\">geo</a>(地理坐标系)、<a href=\"option.html#dataZoom\" target=\"_blank\">dataZoom</a>(数据区缩放组件)、<a href=\"option.html#visualMap\" target=\"_blank\">visualMap</a>(视觉映射组件)、<a href=\"option.html#tooltip\" target=\"_blank\">tooltip</a>(提示框组件)、<a href=\"option.html#toolbox\" target=\"_blank\">toolbox</a>(工具栏组件)、<a href=\"option.html#series\" target=\"_blank\">series</a>(系列)、...</p>\n<p>我们注意到,其实系列(<a href=\"option.html#series\" target=\"_blank\">series</a>)也是一种组件,可以理解为:系列是专门绘制“图”的组件。</p>\n<p>如下图,右侧的 <code class=\"codespan\">option</code> 中声明了各个组件(包括系列),各个组件就出现在图中。</p>\n<p><br></p>\n<p><img width=\"800\" height=\"auto\" src=\"documents/asset/img/basic-concepts-overview/components.jpg\"></p>\n<p><br></p>\n<p>注:因为系列是一种特殊的组件,所以有时候也会出现 “组件和系列” 这样的描述,这种语境下的 “组件” 是指:除了 “系列” 以外的其他组件。</p>\n<h2 id=\"-option-\">用 option 描述图表</h2>\n<p>上面已经出现了 <code class=\"codespan\">option</code> 这个概念。echarts 的使用者,使用 <code class=\"codespan\">option</code> 来描述其对图表的各种需求,包括:有什么数据、要画什么图表、图表长什么样子、含有什么组件、组件能操作什么事情等等。简而言之,<code class=\"codespan\">option</code> 表述了:<code class=\"codespan\">数据</code>、<code class=\"codespan\">数据如何映射成图形</code>、<code class=\"codespan\">交互行为</code>。</p>\n<pre><code class=\"lang-js\">// 创建 echarts 实例。\nvar dom = document.getElementById(&#39;dom-id&#39;);\nvar chart = echarts.init(dom);\n\n// 用 option 描述 `数据`、`数据如何映射成图形`、`交互行为` 等。\n// option 是个大的 JavaScript 对象。\nvar option = {\n    // option 每个属性是一类组件。\n    legend: {...},\n    grid: {...},\n    tooltip: {...},\n    toolbox: {...},\n    dataZoom: {...},\n    visualMap: {...},\n    // 如果有多个同类组件,那么就是个数组。例如这里有三个 X 轴。\n    xAxis: [\n        // 数组每项表示一个组件实例,用 type 描述“子类型”。\n        {type: &#39;category&#39;, ...},\n        {type: &#39;category&#39;, ...},\n        {type: &#39;value&#39;, ...}\n    ],\n    yAxis: [{...}, {...}],\n    // 这里有多个系列,也是构成一个数组。\n    series: [\n        // 每个系列,也有 type 描述“子类型”,即“图表类型”。\n        {type: &#39;line&#39;, data: [[&#39;AA&#39;, 332], [&#39;CC&#39;, 124], [&#39;FF&#39;, 412], ... ]},\n        {type: &#39;line&#39;, data: [2231, 1234, 552, ... ]},\n        {type: &#39;line&#39;, data: [[4, 51], [8, 12], ... ]}\n    }]\n};\n\n// 调用 setOption 将 option 输入 echarts,然后 echarts 渲染图表。\nchart.setOption(option);\n</code></pre>\n<p>系列里的 <a href=\"option.html#series.data\" target=\"_blank\">series.data</a> 是本系列的数据。而另一种描述方式,系列数据从 <a href=\"option.html#dataset\" target=\"_blank\">dataset</a> 中取:</p>\n<pre><code class=\"lang-js\">var option = {\n    dataset: {\n        source: [\n            [121, &#39;XX&#39;, 442, 43.11],\n            [663, &#39;ZZ&#39;, 311, 91.14],\n            [913, &#39;ZZ&#39;, 312, 92.12],\n            ...\n        ]\n    },\n    xAxis: {},\n    yAxis: {},\n    series: [\n        // 数据从 dataset 中取,encode 中的数值是 dataset.source 的维度 index (即第几列)\n        {type: &#39;bar&#39;, encode: {x: 1, y: 0}},\n        {type: &#39;bar&#39;, encode: {x: 1, y: 2}},\n        {type: &#39;scatter&#39;, encode: {x: 1, y: 3}},\n        ...\n    ]\n};\n</code></pre>\n<h2 id=\"-\">组件的定位</h2>\n<p>不同的组件、系列,常有不同的定位方式。</p>\n<p><br></p>\n<p><strong>[类 CSS 的绝对定位]</strong></p>\n<p><br></p>\n<p>多数组件和系列,都能够基于 <code class=\"codespan\">top</code> / <code class=\"codespan\">right</code> / <code class=\"codespan\">down</code> / <code class=\"codespan\">left</code> / <code class=\"codespan\">width</code> / <code class=\"codespan\">height</code> 绝对定位。\n这种绝对定位的方式,类似于 <code class=\"codespan\">CSS</code> 的绝对定位(<code class=\"codespan\">position: absolute</code>)。绝对定位基于的是 echarts 容器 DOM 节点。</p>\n<p>其中,他们每个值都可以是:</p>\n<ul>\n<li>绝对数值(例如 <code class=\"codespan\">bottom: 54</code> 表示:距离 echarts 容器底边界 <code class=\"codespan\">54</code> 像素)。</li>\n<li>或者基于 echarts 容器高宽的百分比(例如 <code class=\"codespan\">right: &#39;20%&#39;</code> 表示:距离 echarts 容器右边界的距离是 echarts 容器宽度的 <code class=\"codespan\">20%</code>)。</li>\n</ul>\n<p>如下图的例子,对 <a href=\"option.html#grid\" target=\"_blank\">grid</a> 组件(也就是直角坐标系的底板)设置 <code class=\"codespan\">left</code>、<code class=\"codespan\">right</code>、<code class=\"codespan\">height</code>、<code class=\"codespan\">bottom</code> 达到的效果。</p>\n<p><br></p>\n<p><img width=\"800\" height=\"auto\" src=\"documents/asset/img/basic-concepts-overview/locate.jpg\"></p>\n<p><br></p>\n<p>我们可以注意到,<code class=\"codespan\">left</code> <code class=\"codespan\">right</code> <code class=\"codespan\">width</code> 是一组(横向)、<code class=\"codespan\">top</code> <code class=\"codespan\">bottom</code> <code class=\"codespan\">height</code> 是另一组(纵向)。这两组没有什么关联。每组中,至多设置两项就可以了,第三项会被自动算出。例如,设置了 <code class=\"codespan\">left</code> 和 <code class=\"codespan\">right</code> 就可以了,<code class=\"codespan\">width</code> 会被自动算出。</p>\n<p><br></p>\n<p><strong>[中心半径定位]</strong></p>\n<p><br></p>\n<p>少数圆形的组件或系列,可以使用“中心半径定位”,例如,<a href=\"option.html#series-pie\" target=\"_blank\">pie</a>(饼图)、<a href=\"option.html#series-sunburst\" target=\"_blank\">sunburst</a>(旭日图)、<a href=\"option.html#polar\" target=\"_blank\">polar</a>(极坐标系)。</p>\n<p>中心半径定位,往往依据 <a href=\"option.html#series-pie.center\" target=\"_blank\">center</a>(中心)、<a href=\"option.html#series-pie.radius\" target=\"_blank\">radius</a>(半径)来决定位置。</p>\n<p><br></p>\n<p><strong>[其他定位]</strong></p>\n<p><br></p>\n<p>少数组件和系列可能有自己的特殊的定位方式。在他们的文档中会有说明。</p>\n<h2 id=\"-\">坐标系</h2>\n<p>很多系列,例如 <a href=\"option.html#series-line\" target=\"_blank\">line</a>(折线图)、<a href=\"option.html#series-bar\" target=\"_blank\">bar</a>(柱状图)、<a href=\"option.html#series-scatter\" target=\"_blank\">scatter</a>(散点图)、<a href=\"option.html#series-heatmap\" target=\"_blank\">heatmap</a>(热力图)等等,需要运行在 “坐标系” 上。坐标系用于布局这些图,以及显示数据的刻度等等。例如 echarts 中至少支持这些坐标系:<a href=\"option.html#grid\" target=\"_blank\">直角坐标系</a>、<a href=\"option.html#polar\" target=\"_blank\">极坐标系</a>、<a href=\"option.html#geo\" target=\"_blank\">地理坐标系(GEO)</a>、<a href=\"option.html#singleAxis\" target=\"_blank\">单轴坐标系</a>、<a href=\"option.html#calendar\" target=\"_blank\">日历坐标系</a> 等。其他一些系列,例如 <a href=\"option.html#series-pie\" target=\"_blank\">pie</a>(饼图)、<a href=\"option.html#series-tree\" target=\"_blank\">tree</a>(树图)等等,并不依赖坐标系,能独立存在。还有一些图,例如 <a href=\"option.html#series-graph\" target=\"_blank\">graph</a>(关系图)等,既能独立存在,也能布局在坐标系中,依据用户的设定而来。</p>\n<p>一个坐标系,可能由多个组件协作而成。我们以最常见的直角坐标系来举例。直角坐标系中,包括有 <a href=\"option.html#xAxis\" target=\"_blank\">xAxis</a>(直角坐标系 X 轴)、<a href=\"option.html#yAxis\" target=\"_blank\">yAxis</a>(直角坐标系 Y 轴)、<a href=\"option.html#grid\" target=\"_blank\">grid</a>(直角坐标系底板)三种组件。<code class=\"codespan\">xAxis</code>、<code class=\"codespan\">yAxis</code> 被 <code class=\"codespan\">grid</code> 自动引用并组织起来,共同工作。</p>\n<p>我们来看下图,这是最简单的使用直角坐标系的方式:只声明了 <code class=\"codespan\">xAxis</code>、<code class=\"codespan\">yAxis</code> 和一个 <code class=\"codespan\">scatter</code>(散点图系列),echarts 暗自为他们创建了 <code class=\"codespan\">grid</code> 并关联起他们:</p>\n<p><br></p>\n<p><img width=\"450\" height=\"auto\" src=\"documents/asset/img/basic-concepts-overview/coord-sys-0.jpg\"></p>\n<p><br></p>\n<p>再来看下图,两个 <code class=\"codespan\">yAxis</code>,共享了一个 <code class=\"codespan\">xAxis</code>。两个 <code class=\"codespan\">series</code>,也共享了这个 <code class=\"codespan\">xAxis</code>,但是分别使用不同的 <code class=\"codespan\">yAxis</code>,使用 <a href=\"option.html#series-line.yAxisIndex\" target=\"_blank\">yAxisIndex</a> 来指定它自己使用的是哪个 <code class=\"codespan\">yAxis</code>:</p>\n<p><br></p>\n<p><img width=\"600\" height=\"auto\" src=\"documents/asset/img/basic-concepts-overview/coord-sys-1.jpg\"></p>\n<p><br></p>\n<p>再来看下图,一个 echarts 实例中,有多个 <code class=\"codespan\">grid</code>,每个 <code class=\"codespan\">grid</code> 分别有 <code class=\"codespan\">xAxis</code>、<code class=\"codespan\">yAxis</code>,他们使用 <code class=\"codespan\">xAxisIndex</code>、<code class=\"codespan\">yAxisIndex</code>、<code class=\"codespan\">gridIndex</code> 来指定引用关系:</p>\n<p><br></p>\n<p><img width=\"600\" height=\"auto\" src=\"documents/asset/img/basic-concepts-overview/coord-sys-2.jpg\"></p>\n<p><br></p>\n<p>另外,一个系列,往往能运行在不同的坐标系中。例如,一个 <a href=\"option.html#series-scatter\" target=\"_blank\">scatter</a>(散点图)能运行在 <a href=\"option.html#grid\" target=\"_blank\">直角坐标系</a>、<a href=\"option.html#polar\" target=\"_blank\">极坐标系</a> 、<a href=\"option.html#geo\" target=\"_blank\">地理坐标系(GEO)</a> 等各种坐标系中。同样,一个坐标系,也能承载不同的系列,如上面出现的各种例子,<a href=\"option.html#grid\" target=\"_blank\">直角坐标系</a> 里承载了 <a href=\"option.html#series-line\" target=\"_blank\">line</a>(折线图)、<a href=\"option.html#series-bar\" target=\"_blank\">bar</a>(柱状图)等等。</p>\n"},"个性化图表的样式":{"type":["*"],"description":"<p>Apache ECharts<sup>TM</sup> 提供了丰富的自定义配置选项,并且能够从全局、系列、数据三个层级去设置数据图形的样式。下面我们来看如何使用 ECharts 实现下面这个南丁格尔图:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/tutorial-styling-step5&edit=1&reset=1\" width=\"500\" height=\"400\" ></iframe>\n\n\n<h2 id=\"-\">绘制南丁格尔图</h2>\n<p><a href=\"#5%20%E5%88%86%E9%92%9F%E4%B8%8A%E6%89%8B%20ECharts\">5分钟上手ECharts</a> 中讲了如何绘制一个简单的柱状图,这次要画的是饼图,饼图主要是通过扇形的弧度表现不同类目的数据在总和中的占比,它的数据格式比柱状图更简单,只有一维的数值,不需要给类目。因为不在直角坐标系上,所以也不需要<code class=\"codespan\">xAxis</code>,<code class=\"codespan\">yAxis</code>。</p>\n<pre><code class=\"lang-js\">myChart.setOption({\n    series : [\n        {\n            name: &#39;访问来源&#39;,\n            type: &#39;pie&#39;,\n            radius: &#39;55%&#39;,\n            data:[\n                {value:235, name:&#39;视频广告&#39;},\n                {value:274, name:&#39;联盟广告&#39;},\n                {value:310, name:&#39;邮件营销&#39;},\n                {value:335, name:&#39;直接访问&#39;},\n                {value:400, name:&#39;搜索引擎&#39;}\n            ]\n        }\n    ]\n})\n</code></pre>\n<p>上面代码就能画出一个简单的饼图:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/tutorial-styling-step0&edit=1&reset=1\" width=\"400\" height=\"300\" ></iframe>\n\n\n<p>这里<code class=\"codespan\">data</code>属性值不像入门教程里那样每一项都是单个数值,而是一个包含 <code class=\"codespan\">name</code> 和 <code class=\"codespan\">value</code> 属性的对象,ECharts 中的数据项都是既可以只设成数值,也可以设成一个包含有名称、该数据图形的样式配置、标签配置的对象,具体见 <a href=\"option.html#series-pie.data\" target=\"_blank\">data</a> 文档。</p>\n<p>ECharts 中的<a href=\"option.html#series-pie\" target=\"_blank\">饼图</a>也支持通过设置 <a href=\"option.html#series-pie.roseType\" target=\"_blank\">roseType</a> 显示成南丁格尔图。</p>\n<pre><code class=\"lang-js\">roseType: &#39;angle&#39;\n</code></pre>\n<p>南丁格尔图会通过半径表示数据的大小。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/tutorial-styling-step1&edit=1&reset=1\" width=\"400\" height=\"300\" ></iframe>\n\n\n<h2 id=\"-\">阴影的配置</h2>\n<p>ECharts 中有一些通用的样式,诸如阴影、透明度、颜色、边框颜色、边框宽度等,这些样式一般都会在系列的 <a href=\"#series-pie.itemStyle\">itemStyle</a> 里设置。例如阴影的样式可以通过下面几个配置项设置:</p>\n<pre><code class=\"lang-js\">itemStyle: {\n    // 阴影的大小\n    shadowBlur: 200,\n    // 阴影水平方向上的偏移\n    shadowOffsetX: 0,\n    // 阴影垂直方向上的偏移\n    shadowOffsetY: 0,\n    // 阴影颜色\n    shadowColor: &#39;rgba(0, 0, 0, 0.5)&#39;\n}\n</code></pre>\n<p>加上阴影后的效果:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/tutorial-styling-step2&edit=1&reset=1\" width=\"400\" height=\"300\" ></iframe>\n\n\n<p><code class=\"codespan\">itemStyle</code>的<code class=\"codespan\">emphasis</code>是鼠标 hover 时候的高亮样式。这个示例里是正常的样式下加阴影,但是可能更多的时候是 hover 的时候通过阴影突出。</p>\n<pre><code class=\"lang-js\">itemStyle: {\n    emphasis: {\n        shadowBlur: 200,\n        shadowColor: &#39;rgba(0, 0, 0, 0.5)&#39;\n    }\n}\n</code></pre>\n<h2 id=\"-\">深色背景和浅色标签</h2>\n<p>现在我们需要把整个主题改成开始的示例中那样的深色主题,这就需要改背景色和文本颜色。</p>\n<p>背景色是全局的,所以直接在 option 下设置 <a href=\"option.html#backgroundColor\" target=\"_blank\">backgroundColor</a></p>\n<pre><code class=\"lang-js\">setOption({\n    backgroundColor: &#39;#2c343c&#39;\n})\n</code></pre>\n<p>文本的样式可以设置全局的 <a href=\"option.html#textStyle\" target=\"_blank\">textStyle</a>。</p>\n<pre><code class=\"lang-js\">setOption({\n    textStyle: {\n        color: &#39;rgba(255, 255, 255, 0.3)&#39;\n    }\n})\n</code></pre>\n<p>也可以每个系列分别设置,每个系列的文本设置在 <a href=\"option.html#series-pie.label.textStyle\" target=\"_blank\">label.textStyle</a>。</p>\n<pre><code class=\"lang-js\">label: {\n    textStyle: {\n        color: &#39;rgba(255, 255, 255, 0.3)&#39;\n    }\n}\n</code></pre>\n<p>饼图的话还要将标签的视觉引导线的颜色设为浅色。</p>\n<pre><code class=\"lang-js\">labelLine: {\n    lineStyle: {\n        color: &#39;rgba(255, 255, 255, 0.3)&#39;\n    }\n}\n</code></pre>\n<p>如下:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/tutorial-styling-step3&edit=1&reset=1\" width=\"400\" height=\"300\" ></iframe>\n\n\n<p>跟<code class=\"codespan\">itemStyle</code>一样,<code class=\"codespan\">label</code>和<code class=\"codespan\">labelLine</code>的样式也有<code class=\"codespan\">emphasis</code>状态。</p>\n<h2 id=\"-\">设置扇形的颜色</h2>\n<p>扇形的颜色也是在 itemStyle 中设置:</p>\n<pre><code class=\"lang-js\">itemStyle: {\n    // 设置扇形的颜色\n    color: &#39;#c23531&#39;,\n    shadowBlur: 200,\n    shadowColor: &#39;rgba(0, 0, 0, 0.5)&#39;\n}\n</code></pre>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/tutorial-styling-step4&edit=1&reset=1\" width=\"400\" height=\"300\" ></iframe>\n\n\n<p>跟我们要实现的效果已经挺像了,除了每个扇形的颜色,效果中阴影下面的扇形颜色更深,有种光线被遮住的感觉,从而会出现层次感和空间感。</p>\n<p>ECharts 中每个扇形颜色的可以通过分别设置 data 下的数据项实现。</p>\n<pre><code class=\"lang-js\">data: [{\n    value:400,\n    name:&#39;搜索引擎&#39;,\n    itemStyle: {\n        color: &#39;#c23531&#39;\n    }\n}, ...]\n</code></pre>\n<p>但是这次因为只有明暗度的变化,所以有一种更快捷的方式是通过 <a href=\"option.html#visualMap\" target=\"_blank\">visualMap</a> 组件将数值的大小映射到明暗度。</p>\n<pre><code class=\"lang-js\">visualMap: {\n    // 不显示 visualMap 组件,只用于明暗度的映射\n    show: false,\n    // 映射的最小值为 80\n    min: 80,\n    // 映射的最大值为 600\n    max: 600,\n    inRange: {\n        // 明暗度的范围是 0 到 1\n        colorLightness: [0, 1]\n    }\n}\n</code></pre>\n<p>最终效果:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/tutorial-styling-step5&edit=1&reset=1\" width=\"500\" height=\"400\" ></iframe>\n\n\n\n\n\n"},"ECharts 中的样式简介":{"type":["*"],"description":"<p>本文主要是大略概述,用哪些方法,可以在 Apache ECharts<sup>TM</sup> 中设置样式,改变图形元素或者文字的颜色、明暗、大小等。</p>\n<blockquote>\n<p>之所以用“样式”这种可能不很符合数据可视化思维的词,是因为,比较通俗易懂。</p>\n</blockquote>\n<p>本文介绍这几种方式,他们的功能范畴可能会有交叉(即同一种细节的效果可能可以用不同的方式实现),但是他们各有各的场景偏好。</p>\n<ul>\n<li>颜色主题(Theme)</li>\n<li>调色盘</li>\n<li>直接样式设置(itemStyle、lineStyle、areaStyle、label、...)</li>\n<li>视觉映射(visualMap)</li>\n</ul>\n<p>其他关于样式的文章,参见:<a href=\"#%E4%B8%AA%E6%80%A7%E5%8C%96%E5%9B%BE%E8%A1%A8%E7%9A%84%E6%A0%B7%E5%BC%8F\">个性化图表的样式</a>,<a href=\"#%E6%95%B0%E6%8D%AE%E7%9A%84%E8%A7%86%E8%A7%89%E6%98%A0%E5%B0%84\">数据的视觉映射</a>。</p>\n<h2 id=\"-theme-\">颜色主题(Theme)</h2>\n<p>最简单的更改全局样式的方式,是直接采用颜色主题(theme)。例如,在 <a href=\"https://echarts.apache.org/examples/zh/index.html\" target=\"_blank\">示例集合</a> 中,可以选择 “Theme”,直接看到采用主题的效果。</p>\n<p>ECharts4 开始,除了一贯的默认主题外,新内置了两套主题,分别为 <code class=\"codespan\">&#39;light&#39;</code> 和 <code class=\"codespan\">&#39;dark&#39;</code>。可以这么来使用它们:</p>\n<pre><code class=\"lang-js\">var chart = echarts.init(dom, &#39;light&#39;);\n</code></pre>\n<p>或者</p>\n<pre><code class=\"lang-js\">var chart = echarts.init(dom, &#39;dark&#39;);\n</code></pre>\n<p>其他的主题,没有内置在 ECharts 中,需要自己加载。这些主题可以在 <a href=\"https://echarts.apache.org/zh/theme-builder.html\" target=\"_blank\">主题编辑器</a> 里访问到。也可以使用这个主题编辑器,自己编辑主题。下载下来的主题可以这样使用:</p>\n<p>如果主题保存为 JSON 文件,那么可以自行加载和注册,例如:</p>\n<pre><code class=\"lang-js\">// 假设主题名称是 &quot;vintage&quot;\n$.getJSON(&#39;xxx/xxx/vintage.json&#39;, function (themeJSON) {\n    echarts.registerTheme(&#39;vintage&#39;, JSON.parse(themeJSON))\n    var chart = echarts.init(dom, &#39;vintage&#39;);\n});\n</code></pre>\n<p>如果保存为 UMD 格式的 JS 文件,那么支持了自注册,直接引入 JS 文件即可:</p>\n<pre><code class=\"lang-js\">// HTML 引入 vintage.js 文件后(假设主题名称是 &quot;vintage&quot;)\nvar chart = echarts.init(dom, &#39;vintage&#39;);\n// ...\n</code></pre>\n<h2 id=\"-\">调色盘</h2>\n<p>调色盘,可以在 option 中设置。它给定了一组颜色,图形、系列会自动从其中选择颜色。\n可以设置全局的调色盘,也可以设置系列自己专属的调色盘。</p>\n<pre><code class=\"lang-js\">option = {\n    // 全局调色盘。\n    color: [&#39;#c23531&#39;,&#39;#2f4554&#39;, &#39;#61a0a8&#39;, &#39;#d48265&#39;, &#39;#91c7ae&#39;,&#39;#749f83&#39;,  &#39;#ca8622&#39;, &#39;#bda29a&#39;,&#39;#6e7074&#39;, &#39;#546570&#39;, &#39;#c4ccd3&#39;],\n\n    series: [{\n        type: &#39;bar&#39;,\n        // 此系列自己的调色盘。\n        color: [&#39;#dd6b66&#39;,&#39;#759aa0&#39;,&#39;#e69d87&#39;,&#39;#8dc1a9&#39;,&#39;#ea7e53&#39;,&#39;#eedd78&#39;,&#39;#73a373&#39;,&#39;#73b9bc&#39;,&#39;#7289ab&#39;, &#39;#91ca8c&#39;,&#39;#f49f42&#39;],\n        ...\n    }, {\n        type: &#39;pie&#39;,\n        // 此系列自己的调色盘。\n        color: [&#39;#37A2DA&#39;, &#39;#32C5E9&#39;, &#39;#67E0E3&#39;, &#39;#9FE6B8&#39;, &#39;#FFDB5C&#39;,&#39;#ff9f7f&#39;, &#39;#fb7293&#39;, &#39;#E062AE&#39;, &#39;#E690D1&#39;, &#39;#e7bcf3&#39;, &#39;#9d96f5&#39;, &#39;#8378EA&#39;, &#39;#96BFFF&#39;],\n        ...\n    }]\n}\n</code></pre>\n<h2 id=\"-itemstyle-linestyle-areastyle-label-\">直接的样式设置 itemStyle, lineStyle, areaStyle, label, ...</h2>\n<p>直接的样式设置是比较常用设置方式。纵观 ECharts 的 <a href=\"option.html\" target=\"_blank\">option</a> 中,很多地方可以设置 <a href=\"option.html#series.itemStyle\" target=\"_blank\">itemStyle</a>、<a href=\"option.html#series-line.lineStyle\" target=\"_blank\">lineStyle</a>、<a href=\"option.html#series-line.areaStyle\" target=\"_blank\">areaStyle</a>、<a href=\"option.html#series.label\" target=\"_blank\">label</a> 等等。这些的地方可以直接设置图形元素的颜色、线宽、点的大小、标签的文字、标签的样式等等。</p>\n<p>一般来说,ECharts 的各个系列和组件,都遵从这些命名习惯,虽然不同图表和组件中,<code class=\"codespan\">itemStyle</code>、<code class=\"codespan\">label</code> 等可能出现在不同的地方。</p>\n<p>直接样式设置的另一篇介绍,参见 <a href=\"#%E4%B8%AA%E6%80%A7%E5%8C%96%E5%9B%BE%E8%A1%A8%E7%9A%84%E6%A0%B7%E5%BC%8F\">个性化图表的样式</a>。</p>\n<h2 id=\"-emphasis\">高亮的样式:emphasis</h2>\n<p>在鼠标悬浮到图形元素上时,一般会出现高亮的样式。默认情况下,高亮的样式是根据普通样式自动生成的。但是高亮的样式也可以自己定义,主要是通过 <a href=\"option.html#series-scatter.emphasis\" target=\"_blank\">emphasis</a> 属性来定制。<a href=\"option.html#series-scatter.emphasis\" target=\"_blank\">emphsis</a> 中的结构,和普通样式的结构相同,例如:</p>\n<pre><code class=\"lang-js\">option = {\n    series: {\n        type: &#39;scatter&#39;,\n\n        // 普通样式。\n        itemStyle: {\n            // 点的颜色。\n            color: &#39;red&#39;\n        },\n        label: {\n            show: true,\n            // 标签的文字。\n            formatter: &#39;This is a normal label.&#39;\n        },\n\n        // 高亮样式。\n        emphasis: {\n            itemStyle: {\n                // 高亮时点的颜色。\n                color: &#39;blue&#39;\n            },\n            label: {\n                show: true,\n                // 高亮时标签的文字。\n                formatter: &#39;This is a emphasis label.&#39;\n            }\n        }\n    }\n}\n</code></pre>\n<p>注意:在 ECharts4 以前,高亮和普通样式的写法,是这样的:</p>\n<pre><code class=\"lang-js\">option = {\n    series: {\n        type: &#39;scatter&#39;,\n\n        itemStyle: {\n            // 普通样式。\n            normal: {\n                // 点的颜色。\n                color: &#39;red&#39;\n            },\n            // 高亮样式。\n            emphasis: {\n                // 高亮时点的颜色。\n                color: &#39;blue&#39;\n            }\n        },\n\n        label: {\n            // 普通样式。\n            normal: {\n                show: true,\n                // 标签的文字。\n                formatter: &#39;This is a normal label.&#39;\n            },\n            // 高亮样式。\n            emphasis: {\n                show: true,\n                // 高亮时标签的文字。\n                formatter: &#39;This is a emphasis label.&#39;\n            }\n        }\n    }\n}\n</code></pre>\n<p>这种写法 <strong>仍然被兼容</strong>,但是,不再推荐。事实上,多数情况下,使用者只会配置普通状态下的样式,而使用默认的高亮样式。所以在 ECharts4 中,支持不写 <code class=\"codespan\">normal</code> 的配置方法(即本文开头的那种写法),使得配置项更扁平简单。</p>\n<h2 id=\"-visualmap-\">通过 visualMap 组件设定样式</h2>\n<p><a href=\"option.html#visualMap\" target=\"_blank\">visualMap 组件</a> 能指定数据到颜色、图形尺寸的映射规则,详见 <a href=\"#%E6%95%B0%E6%8D%AE%E7%9A%84%E8%A7%86%E8%A7%89%E6%98%A0%E5%B0%84\">数据的视觉映射</a>。</p>\n"},"异步数据加载和更新":{"type":["*"],"description":"<h2 id=\"-\">异步加载</h2>\n<p><a href=\"#getting-started\">入门示例</a>中的数据是在初始化后 <code class=\"codespan\">setOption</code> 中直接填入的,但是很多时候可能数据需要异步加载后再填入。Apache ECharts<sup>TM</sup> 中实现异步数据的更新非常简单,在图表初始化后不管任何时候只要通过 jQuery 等工具异步获取数据后通过 <code class=\"codespan\">setOption</code> 填入数据和配置项就行。</p>\n<pre><code class=\"lang-js\">var myChart = echarts.init(document.getElementById(&#39;main&#39;));\n\n$.get(&#39;data.json&#39;).done(function (data) {\n    myChart.setOption({\n        title: {\n            text: &#39;异步数据加载示例&#39;\n        },\n        tooltip: {},\n        legend: {\n            data:[&#39;销量&#39;]\n        },\n        xAxis: {\n            data: data.categories\n        },\n        yAxis: {},\n        series: [{\n            name: &#39;销量&#39;,\n            type: &#39;bar&#39;,\n            data: data.data\n        }]\n    });\n});\n</code></pre>\n<p>或者先设置完其它的样式,显示一个空的直角坐标轴,然后获取数据后填入数据。</p>\n<pre><code class=\"lang-js\">var myChart = echarts.init(document.getElementById(&#39;main&#39;));\n// 显示标题,图例和空的坐标轴\nmyChart.setOption({\n    title: {\n        text: &#39;异步数据加载示例&#39;\n    },\n    tooltip: {},\n    legend: {\n        data:[&#39;销量&#39;]\n    },\n    xAxis: {\n        data: []\n    },\n    yAxis: {},\n    series: [{\n        name: &#39;销量&#39;,\n        type: &#39;bar&#39;,\n        data: []\n    }]\n});\n\n// 异步加载数据\n$.get(&#39;data.json&#39;).done(function (data) {\n    // 填入数据\n    myChart.setOption({\n        xAxis: {\n            data: data.categories\n        },\n        series: [{\n            // 根据名字对应到相应的系列\n            name: &#39;销量&#39;,\n            data: data.data\n        }]\n    });\n});\n</code></pre>\n<p>如下:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/tutorial-async&edit=1&reset=1\" width=\"400\" height=\"300\" ></iframe>\n\n\n<p>ECharts 中在更新数据的时候需要通过<code class=\"codespan\">name</code>属性对应到相应的系列,上面示例中如果<code class=\"codespan\">name</code>不存在也可以根据系列的顺序正常更新,但是更多时候推荐更新数据的时候加上系列的<code class=\"codespan\">name</code>数据。</p>\n<h2 id=\"loading-\">loading 动画</h2>\n<p>如果数据加载时间较长,一个空的坐标轴放在画布上也会让用户觉得是不是产生 bug 了,因此需要一个 loading 的动画来提示用户数据正在加载。</p>\n<p>ECharts 默认有提供了一个简单的加载动画。只需要调用 <a href=\"api.html#echartsInstance.showLoading\" target=\"_blank\">showLoading</a> 方法显示。数据加载完成后再调用 <a href=\"api.html#echartsInstance.hideLoading\" target=\"_blank\">hideLoading</a> 方法隐藏加载动画。</p>\n<pre><code class=\"lang-js\">myChart.showLoading();\n$.get(&#39;data.json&#39;).done(function (data) {\n    myChart.hideLoading();\n    myChart.setOption(...);\n});\n</code></pre>\n<p>效果如下:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/tutorial-loading&edit=1&reset=1\" width=\"400\" height=\"300\" ></iframe>\n\n\n<h2 id=\"-\">数据的动态更新</h2>\n<p>ECharts 由数据驱动,数据的改变驱动图表展现的改变,因此动态数据的实现也变得异常简单。</p>\n<p>所有数据的更新都通过 <a href=\"#api.html#echartsInstance.setOption\">setOption</a>实现,你只需要定时获取数据,<a href=\"#api.html#echartsInstance.setOption\">setOption</a> 填入数据,而不用考虑数据到底产生了那些变化,ECharts 会找到两组数据之间的差异然后通过合适的动画去表现数据的变化。</p>\n<blockquote>\n<p>ECharts 3 中移除了 ECharts 2 中的 addData 方法。如果只需要加入单个数据,可以先 data.push(value) 后 setOption</p>\n</blockquote>\n<p>具体可以看下面示例:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/tutorial-dynamic-data&edit=1&reset=1\" width=\"400\" height=\"300\" ></iframe>\n\n\n\n"},"使用 dataset 管理数据":{"type":["*"],"description":"<p>Apache ECharts<sup>TM</sup> 4 开始支持了 <code class=\"codespan\">dataset</code> 组件用于单独的数据集声明,从而数据可以单独管理,被多个组件复用,并且可以基于数据指定数据到视觉的映射。这在不少场景下能带来使用上的方便。</p>\n<p>ECharts 4 以前,数据只能声明在各个“系列(series)”中,例如:</p>\n<pre><code class=\"lang-js\">option = {\n    xAxis: {\n        type: &#39;category&#39;,\n        data: [&#39;Matcha Latte&#39;, &#39;Milk Tea&#39;, &#39;Cheese Cocoa&#39;, &#39;Walnut Brownie&#39;]\n    },\n    yAxis: {},\n    series: [\n        {\n            type: &#39;bar&#39;,\n            name: &#39;2015&#39;,\n            data: [89.3, 92.1, 94.4, 85.4]\n        },\n        {\n            type: &#39;bar&#39;,\n            name: &#39;2016&#39;,\n            data: [95.8, 89.4, 91.2, 76.9]\n        },\n        {\n            type: &#39;bar&#39;,\n            name: &#39;2017&#39;,\n            data: [97.7, 83.1, 92.5, 78.1]\n        }\n    ]\n}\n</code></pre>\n<p>这种方式的优点是,直观易理解,以及适于对一些特殊图表类型进行一定的数据类型定制。但是缺点是,为匹配这种数据输入形式,常需要有数据处理的过程,把数据分割设置到各个系列(和类目轴)中。此外,不利于多个系列共享一份数据,也不利于基于原始数据进行图表类型、系列的映射安排。</p>\n<p>于是,ECharts 4 提供了 <code class=\"codespan\">数据集</code>(<code class=\"codespan\">dataset</code>)组件来单独声明数据,它带来了这些效果:</p>\n<ul>\n<li>能够贴近这样的数据可视化常见思维方式:(I) 提供数据,(II) 指定数据到视觉的映射,从而形成图表。</li>\n<li>数据和其他配置可以被分离开来。数据常变,其他配置常不变。分开易于分别管理。</li>\n<li>数据可以被多个系列或者组件复用,对于大数据量的场景,不必为每个系列创建一份数据。</li>\n<li>支持更多的数据的常用格式,例如二维数组、对象数组等,一定程度上避免使用者为了数据格式而进行转换。</li>\n</ul>\n<h2 id=\"-\">入门例子</h2>\n<p>下面是一个最简单的 <code class=\"codespan\">dataset</code> 的例子:</p>\n<pre><code class=\"lang-js\">option = {\n    legend: {},\n    tooltip: {},\n    dataset: {\n        // 提供一份数据。\n        source: [\n            [&#39;product&#39;, &#39;2015&#39;, &#39;2016&#39;, &#39;2017&#39;],\n            [&#39;Matcha Latte&#39;, 43.3, 85.8, 93.7],\n            [&#39;Milk Tea&#39;, 83.1, 73.4, 55.1],\n            [&#39;Cheese Cocoa&#39;, 86.4, 65.2, 82.5],\n            [&#39;Walnut Brownie&#39;, 72.4, 53.9, 39.1]\n        ]\n    },\n    // 声明一个 X 轴,类目轴(category)。默认情况下,类目轴对应到 dataset 第一列。\n    xAxis: {type: &#39;category&#39;},\n    // 声明一个 Y 轴,数值轴。\n    yAxis: {},\n    // 声明多个 bar 系列,默认情况下,每个系列会自动对应到 dataset 的每一列。\n    series: [\n        {type: &#39;bar&#39;},\n        {type: &#39;bar&#39;},\n        {type: &#39;bar&#39;}\n    ]\n}\n</code></pre>\n<p>效果如下:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=dataset-simple0&edit=1&reset=1\" width=\"500\" height=\"300\" ></iframe>\n\n\n<p>或者也可以使用常见的对象数组的格式:</p>\n<pre><code class=\"lang-js\">option = {\n    legend: {},\n    tooltip: {},\n    dataset: {\n        // 用 dimensions 指定了维度的顺序。直角坐标系中,\n        // 默认把第一个维度映射到 X 轴上,第二个维度映射到 Y 轴上。\n        // 如果不指定 dimensions,也可以通过指定 series.encode\n        // 完成映射,参见后文。\n        dimensions: [&#39;product&#39;, &#39;2015&#39;, &#39;2016&#39;, &#39;2017&#39;],\n        source: [\n            {product: &#39;Matcha Latte&#39;, &#39;2015&#39;: 43.3, &#39;2016&#39;: 85.8, &#39;2017&#39;: 93.7},\n            {product: &#39;Milk Tea&#39;, &#39;2015&#39;: 83.1, &#39;2016&#39;: 73.4, &#39;2017&#39;: 55.1},\n            {product: &#39;Cheese Cocoa&#39;, &#39;2015&#39;: 86.4, &#39;2016&#39;: 65.2, &#39;2017&#39;: 82.5},\n            {product: &#39;Walnut Brownie&#39;, &#39;2015&#39;: 72.4, &#39;2016&#39;: 53.9, &#39;2017&#39;: 39.1}\n        ]\n    },\n    xAxis: {type: &#39;category&#39;},\n    yAxis: {},\n    series: [\n        {type: &#39;bar&#39;},\n        {type: &#39;bar&#39;},\n        {type: &#39;bar&#39;}\n    ]\n};\n</code></pre>\n<h2 id=\"-\">数据到图形的映射</h2>\n<p>本篇里,我们制作数据可视化图表的逻辑是这样的:基于数据,在配置项中指定如何映射到图形。</p>\n<p>概略而言,可以进行这些映射:</p>\n<ul>\n<li>指定 dataset 的列(column)还是行(row)映射为图形系列(series)。这件事可以使用 <a href=\"option.html#series.seriesLayoutBy\" target=\"_blank\">series.seriesLayoutBy</a> 属性来配置。默认是按照列(column)来映射。</li>\n<li>指定维度映射的规则:如何从 dataset 的维度(一个“维度”的意思是一行/列)映射到坐标轴(如 X、Y 轴)、提示框(tooltip)、标签(label)、图形元素大小颜色等(visualMap)。这件事可以使用 <a href=\"option.html#series.encode\" target=\"_blank\">series.encode</a> 属性,以及 <a href=\"option.html#visualMap\" target=\"_blank\">visualMap</a> 组件(如果有需要映射颜色大小等视觉维度的话)来配置。上面的例子中,没有给出这种映射配置,那么 ECharts 就按最常见的理解进行默认映射:X 坐标轴声明为类目轴,默认情况下会自动对应到 dataset.source 中的第一列;三个柱图系列,一一对应到 dataset.source 中后面每一列。</li>\n</ul>\n<p>下面详细解释。</p>\n<h2 id=\"-dataset-series-\">把数据集( dataset )的行或列映射为系列(series)</h2>\n<p>有了数据表之后,使用者可以灵活得配置:数据如何对应到轴和图形系列。</p>\n<p>用户可以使用 <code class=\"codespan\">seriesLayoutBy</code> 配置项,改变图表对于行列的理解。<code class=\"codespan\">seriesLayoutBy</code> 可取值:</p>\n<ul>\n<li>&#39;column&#39;: 默认值。系列被安放到 <code class=\"codespan\">dataset</code> 的列上面。</li>\n<li>&#39;row&#39;: 系列被安放到 <code class=\"codespan\">dataset</code> 的行上面。</li>\n</ul>\n<p>看这个例子:</p>\n<pre><code class=\"lang-js\">option = {\n    legend: {},\n    tooltip: {},\n    dataset: {\n        source: [\n            [&#39;product&#39;, &#39;2012&#39;, &#39;2013&#39;, &#39;2014&#39;, &#39;2015&#39;],\n            [&#39;Matcha Latte&#39;, 41.1, 30.4, 65.1, 53.3],\n            [&#39;Milk Tea&#39;, 86.5, 92.1, 85.7, 83.1],\n            [&#39;Cheese Cocoa&#39;, 24.1, 67.2, 79.5, 86.4]\n        ]\n    },\n    xAxis: [\n        {type: &#39;category&#39;, gridIndex: 0},\n        {type: &#39;category&#39;, gridIndex: 1}\n    ],\n    yAxis: [\n        {gridIndex: 0},\n        {gridIndex: 1}\n    ],\n    grid: [\n        {bottom: &#39;55%&#39;},\n        {top: &#39;55%&#39;}\n    ],\n    series: [\n        // 这几个系列会在第一个直角坐标系中,每个系列对应到 dataset 的每一行。\n        {type: &#39;bar&#39;, seriesLayoutBy: &#39;row&#39;},\n        {type: &#39;bar&#39;, seriesLayoutBy: &#39;row&#39;},\n        {type: &#39;bar&#39;, seriesLayoutBy: &#39;row&#39;},\n        // 这几个系列会在第二个直角坐标系中,每个系列对应到 dataset 的每一列。\n        {type: &#39;bar&#39;, xAxisIndex: 1, yAxisIndex: 1},\n        {type: &#39;bar&#39;, xAxisIndex: 1, yAxisIndex: 1},\n        {type: &#39;bar&#39;, xAxisIndex: 1, yAxisIndex: 1},\n        {type: &#39;bar&#39;, xAxisIndex: 1, yAxisIndex: 1}\n    ]\n}\n</code></pre>\n<p>效果如下:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=dataset-series-layout-by&edit=1&reset=1\" width=\"800\" height=\"600\" ></iframe>\n\n\n\n<h2 id=\"-dimension-\">维度(dimension)</h2>\n<p>介绍 <code class=\"codespan\">encode</code> 之前,首先要介绍“维度(dimension)”的概念。</p>\n<p>常用图表所描述的数据大部分是“二维表”结构,上述的例子中,我们都使用二维数组来容纳二维表。现在,当我们把系列(series)对应到“列”的时候,那么每一列就称为一个“维度(dimension)”,而每一行称为数据项(item)。反之,如果我们把系列(series)对应到表行,那么每一行就是“维度(dimension)”,每一列就是数据项(item)。</p>\n<p>维度可以有单独的名字,便于在图表中显示。维度名(dimension name)可以在定义在 dataset 的第一行(或者第一列)。例如上面的例子中,<code class=\"codespan\">&#39;score&#39;</code>、<code class=\"codespan\">&#39;amount&#39;</code>、<code class=\"codespan\">&#39;product&#39;</code> 就是维度名。从第二行开始,才是正式的数据。<code class=\"codespan\">dataset.source</code> 中第一行(列)到底包含不包含维度名,ECharts 默认会自动探测。当然也可以设置 <code class=\"codespan\">dataset.sourceHeader: true</code> 显示声明第一行(列)就是维度,或者 <code class=\"codespan\">dataset.sourceHeader: false</code> 表明第一行(列)开始就直接是数据。</p>\n<p>维度的定义,也可以使用单独的 <code class=\"codespan\">dataset.dimensions</code> 或者 <code class=\"codespan\">series.dimensions</code> 来定义,这样可以同时指定维度名,和维度的类型(dimension type):</p>\n<pre><code class=\"lang-js\">var option1 = {\n    dataset: {\n        dimensions: [\n            {name: &#39;score&#39;},\n            // 可以简写为 string,表示维度名。\n            &#39;amount&#39;,\n            // 可以在 type 中指定维度类型。\n            {name: &#39;product&#39;, type: &#39;ordinal&#39;}\n        ],\n        source: [...]\n    },\n    ...\n};\n\nvar option2 = {\n    dataset: {\n        source: [...]\n    },\n    series: {\n        type: &#39;line&#39;,\n        // 在系列中设置的 dimensions 会更优先采纳。\n        dimensions: [\n            null, // 可以设置为 null 表示不想设置维度名\n            &#39;amount&#39;,\n            {name: &#39;product&#39;, type: &#39;ordinal&#39;}\n        ]\n    },\n    ...\n};\n</code></pre>\n<p>大多数情况下,我们并不需要去设置维度类型,因为会自动判断。但是如果因为数据为空之类原因导致判断不足够准确时,可以手动设置维度类型。</p>\n<p>维度类型(dimension type)可以取这些值:</p>\n<ul>\n<li><code class=\"codespan\">&#39;number&#39;</code>: 默认,表示普通数据。</li>\n<li><code class=\"codespan\">&#39;ordinal&#39;</code>: 对于类目、文本这些 string 类型的数据,如果需要能在数轴上使用,须是 &#39;ordinal&#39; 类型。ECharts 默认会自动判断这个类型。但是自动判断也是不可能很完备的,所以使用者也可以手动强制指定。</li>\n<li><code class=\"codespan\">&#39;time&#39;</code>: 表示时间数据。设置成 <code class=\"codespan\">&#39;time&#39;</code> 则能支持自动解析数据成时间戳(timestamp),比如该维度的数据是 &#39;2017-05-10&#39;,会自动被解析。如果这个维度被用在时间数轴(<a href=\"option.html#xAxis.type\" target=\"_blank\">axis.type</a> 为 <code class=\"codespan\">&#39;time&#39;</code>)上,那么会被自动设置为 <code class=\"codespan\">&#39;time&#39;</code> 类型。时间类型的支持参见 <a href=\"option.html#series.data\" target=\"_blank\">data</a>。</li>\n<li><code class=\"codespan\">&#39;float&#39;</code>: 如果设置成 <code class=\"codespan\">&#39;float&#39;</code>,在存储时候会使用 <code class=\"codespan\">TypedArray</code>,对性能优化有好处。</li>\n<li><code class=\"codespan\">&#39;int&#39;</code>: 如果设置成 <code class=\"codespan\">&#39;int&#39;</code>,在存储时候会使用 <code class=\"codespan\">TypedArray</code>,对性能优化有好处。</li>\n</ul>\n<h2 id=\"-series-encode-\">数据到图形的映射( series.encode )</h2>\n<p>了解了维度的概念后,我们就可以使用 <a href=\"option.html#series.encode\" target=\"_blank\">encode</a> 来做映射。总体是这样的感觉:</p>\n<pre><code class=\"lang-js\">var option = {\n    dataset: {\n        source: [\n            [&#39;score&#39;, &#39;amount&#39;, &#39;product&#39;],\n            [89.3, 58212, &#39;Matcha Latte&#39;],\n            [57.1, 78254, &#39;Milk Tea&#39;],\n            [74.4, 41032, &#39;Cheese Cocoa&#39;],\n            [50.1, 12755, &#39;Cheese Brownie&#39;],\n            [89.7, 20145, &#39;Matcha Cocoa&#39;],\n            [68.1, 79146, &#39;Tea&#39;],\n            [19.6, 91852, &#39;Orange Juice&#39;],\n            [10.6, 101852, &#39;Lemon Juice&#39;],\n            [32.7, 20112, &#39;Walnut Brownie&#39;]\n        ]\n    },\n    xAxis: {},\n    yAxis: {type: &#39;category&#39;},\n    series: [\n        {\n            type: &#39;bar&#39;,\n            encode: {\n                // 将 &quot;amount&quot; 列映射到 X 轴。\n                x: &#39;amount&#39;,\n                // 将 &quot;product&quot; 列映射到 Y 轴。\n                y: &#39;product&#39;\n            }\n        }\n    ]\n};\n</code></pre>\n<p>效果如下:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/dataset-encode-simple0&edit=1&reset=1\" width=\"500\" height=\"300\" ></iframe>\n\n\n\n<p><code class=\"codespan\">series.encode</code> 声明的基本结构如下,其中冒号左边是坐标系、标签等特定名称,如 <code class=\"codespan\">&#39;x&#39;</code>, <code class=\"codespan\">&#39;y&#39;</code>, <code class=\"codespan\">&#39;tooltip&#39;</code> 等,冒号右边是数据中的维度名(string 格式)或者维度的序号(number 格式,从 0 开始计数),可以指定一个或多个维度(使用数组)。通常情况下,下面各种信息不需要所有的都写,按需写即可。</p>\n<p>下面是 <code class=\"codespan\">series.encode</code> 支持的属性:</p>\n<pre><code class=\"lang-js\">// 在任何坐标系和系列中,都支持:\nencode: {\n    // 使用 “名为 product 的维度” 和 “名为 score 的维度” 的值在 tooltip 中显示\n    tooltip: [&#39;product&#39;, &#39;score&#39;]\n    // 使用 “维度 1” 和 “维度 3” 的维度名连起来作为系列名。(有时候名字比较长,这可以避免在 series.name 重复输入这些名字)\n    seriesName: [1, 3],\n    // 表示使用 “维度2” 中的值作为 id。这在使用 setOption 动态更新数据时有用处,可以使新老数据用 id 对应起来,从而能够产生合适的数据更新动画。\n    itemId: 2,\n    // 指定数据项的名称使用 “维度3” 在饼图等图表中有用,可以使这个名字显示在图例(legend)中。\n    itemName: 3\n}\n\n// 直角坐标系(grid/cartesian)特有的属性:\nencode: {\n    // 把 “维度1”、“维度5”、“名为 score 的维度” 映射到 X 轴:\n    x: [1, 5, &#39;score&#39;],\n    // 把“维度0”映射到 Y 轴。\n    y: 0\n}\n\n// 单轴(singleAxis)特有的属性:\nencode: {\n    single: 3\n}\n\n// 极坐标系(polar)特有的属性:\nencode: {\n    radius: 3,\n    angle: 2\n}\n\n// 地理坐标系(geo)特有的属性:\nencode: {\n    lng: 3,\n    lat: 2\n}\n\n// 对于一些没有坐标系的图表,例如饼图、漏斗图等,可以是:\nencode: {\n    value: 3\n}\n</code></pre>\n<p>下面给出个更丰富的 <code class=\"codespan\">series.encode</code> 的示例:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=dataset-encode1&edit=1&reset=1\" width=\"800\" height=\"600\" ></iframe>\n\n\n\n<h2 id=\"-\">视觉通道(颜色、尺寸等)的映射</h2>\n<p>我们可以使用 <a href=\"option.html#visualMap\" target=\"_blank\">visualMap</a> 组件进行视觉通道的映射。详见 <code class=\"codespan\">visualMap</code> 文档的介绍。这是一个示例:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=dataset-encode0&edit=1&reset=1\" width=\"500\" height=\"400\" ></iframe>\n\n\n\n<h2 id=\"-encode\">默认的 encode</h2>\n<p>值得一提的是,当 <code class=\"codespan\">series.encode</code> 并没有指定时,ECharts 针对最常见直角坐标系中的图表(折线图、柱状图、散点图、K线图等)、饼图、漏斗图,会采用一些默认的映射规则。默认的映射规则比较简单,大体是:</p>\n<ul>\n<li>在坐标系中(如直角坐标系、极坐标系等)<ul>\n<li>如果有类目轴(axis.type 为 &#39;category&#39;),则将第一列(行)映射到这个轴上,后续每一列(行)对应一个系列。</li>\n<li>如果没有类目轴,假如坐标系有两个轴(例如直角坐标系的 X Y 轴),则每两列对应一个系列,这两列分别映射到这两个轴上。</li>\n</ul>\n</li>\n<li>如果没有坐标系(如饼图)<ul>\n<li>取第一列(行)为名字,第二列(行)为数值(如果只有一列,则取第一列为数值)。</li>\n</ul>\n</li>\n</ul>\n<p>默认的规则不能满足要求时,就可以自己来配置 <code class=\"codespan\">encode</code>,也并不复杂。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=dataset-default&edit=1&reset=1\" width=\"800\" height=\"400\" ></iframe>\n\n\n\n<h2 id=\"-series-encode-\">几个常见的 series.encode 设置方式举例</h2>\n<p>问:如何把第三列设置为 X 轴,第五列设置为 Y 轴?</p>\n<p>答:</p>\n<pre><code class=\"lang-js\">series: {\n    // 注意维度序号(dimensionIndex)从 0 开始计数,第三列是 dimensions[2]。\n    encode: {x: 2, y: 4},\n    ...\n}\n</code></pre>\n<p>问:如何把第三行设置为 X 轴,第五行设置为 Y 轴?</p>\n<p>答:</p>\n<pre><code class=\"lang-js\">series: {\n    encode: {x: 2, y: 4},\n    seriesLayoutBy: &#39;row&#39;,\n    ...\n}\n</code></pre>\n<p>问:如何把第二列设置为标签?</p>\n<p>答:\n关于标签的显示 <a href=\"option.html#series.label.formatter\" target=\"_blank\">label.formatter</a>,现在支持引用特定维度的值,例如:</p>\n<pre><code class=\"lang-js\">series: {\n    label: {\n        // `&#39;{@score}&#39;` 表示 “名为 score” 的维度里的值。\n        // `&#39;{@[4]}&#39;` 表示引用序号为 4 的维度里的值。\n        formatter: &#39;aaa{@product}bbb{@score}ccc{@[4]}ddd&#39;\n    }\n}\n</code></pre>\n<p>问:如何让第 2 列和第 3 列显示在提示框(tooltip)中?</p>\n<p>答:</p>\n<pre><code class=\"lang-js\">series: {\n    encode: {\n        tooltip: [1, 2]\n        ...\n    },\n    ...\n}\n</code></pre>\n<p>问:数据里没有维度名,那么怎么给出维度名?</p>\n<p>答:</p>\n<pre><code class=\"lang-js\">dataset: {\n    dimensions: [&#39;score&#39;, &#39;amount&#39;],\n    source: [\n        [89.3, 3371],\n        [92.1, 8123],\n        [94.4, 1954],\n        [85.4, 829]\n    ]\n}\n</code></pre>\n<p>问:如何把第三列映射为气泡图的点的大小?</p>\n<p>答:</p>\n<pre><code class=\"lang-js\">var option = {\n    dataset: {\n        source: [\n            [12, 323, 11.2],\n            [23, 167, 8.3],\n            [81, 284, 12],\n            [91, 413, 4.1],\n            [13, 287, 13.5]\n        ]\n    },\n    visualMap: {\n        show: false,\n        dimension: 2, // 指向第三列(列序号从 0 开始记,所以设置为 2)。\n        min: 2, // 需要给出数值范围,最小数值。\n        max: 15, // 需要给出数值范围,最大数值。\n        inRange: {\n            // 气泡尺寸:5 像素到 60 像素。\n            symbolSize: [5, 60]\n        }\n    },\n    xAxis: {},\n    yAxis: {},\n    series: {\n        type: &#39;scatter&#39;\n    }\n};\n</code></pre>\n<p>问:encode 里指定了映射,但是不管用?</p>\n<p>答:可以查查有没有拼错,比如,维度名是:<code class=\"codespan\">&#39;Life Expectancy&#39;</code>,encode 中拼成了 <code class=\"codespan\">&#39;Life Expectency&#39;</code>。</p>\n<h2 id=\"-\">数据的各种格式</h2>\n<p>多数常见图表中,数据适于用二维表的形式描述。广为使用的数据表格软件(如 MS Excel、Numbers)或者关系数据数据库都是二维表。他们的数据可以导出成 JSON 格式,输入到 <code class=\"codespan\">dataset.source</code> 中,在不少情况下可以免去一些数据处理的步骤。</p>\n<blockquote>\n<p>假如数据导出成 csv 文件,那么可以使用一些 csv 工具如 <a href=\"https://github.com/d3/d3-dsv\" target=\"_blank\">dsv</a> 或者 <a href=\"https://github.com/mholt/PapaParse\" target=\"_blank\">PapaParse</a> 将 csv 转成 JSON。</p>\n</blockquote>\n<p>在 JavaScript 常用的数据传输格式中,二维数组可以比较直观的存储二维表。前面的示例都是使用二维数组表示。</p>\n<p>除了二维数组以外,dataset 也支持例如下面 key-value 方式的数据格式,这类格式也非常常见。但是这类格式中,目前并不支持 <a href=\"option.html#series.seriesLayoutBy\" target=\"_blank\">seriesLayoutBy</a> 参数。</p>\n<pre><code class=\"lang-js\">dataset: [{\n    // 按行的 key-value 形式(对象数组),这是个比较常见的格式。\n    source: [\n        {product: &#39;Matcha Latte&#39;, count: 823, score: 95.8},\n        {product: &#39;Milk Tea&#39;, count: 235, score: 81.4},\n        {product: &#39;Cheese Cocoa&#39;, count: 1042, score: 91.2},\n        {product: &#39;Walnut Brownie&#39;, count: 988, score: 76.9}\n    ]\n}, {\n    // 按列的 key-value 形式。\n    source: {\n        &#39;product&#39;: [&#39;Matcha Latte&#39;, &#39;Milk Tea&#39;, &#39;Cheese Cocoa&#39;, &#39;Walnut Brownie&#39;],\n        &#39;count&#39;: [823, 235, 1042, 988],\n        &#39;score&#39;: [95.8, 81.4, 91.2, 76.9]\n    }\n}]\n</code></pre>\n<h2 id=\"-dataset-\">多个 dataset 以及如何引用他们</h2>\n<p>可以同时定义多个 dataset。系列可以通过 <a href=\"option.html#series.datasetIndex\" target=\"_blank\">series.datasetIndex</a> 来指定引用哪个 dataset。例如:</p>\n<pre><code class=\"lang-js\">var option = {\n    dataset: [{\n        // 序号为 0 的 dataset。\n        source: [...],\n    }, {\n        // 序号为 1 的 dataset。\n        source: [...]\n    }, {\n        // 序号为 2 的 dataset。\n        source: [...]\n    }],\n    series: [{\n        // 使用序号为 2 的 dataset。\n        datasetIndex: 2\n    }, {\n        // 使用序号为 1 的 dataset。\n        datasetIndex: 1\n    }]\n}\n</code></pre>\n<h2 id=\"echarts-3-series-data-\">ECharts 3 的数据设置方式(series.data)仍正常使用</h2>\n<p>ECharts 4 之前一直以来的数据声明方式仍然被正常支持,如果系列已经声明了 <a href=\"option.html#series.data\" target=\"_blank\">series.data</a>, 那么就会使用 <a href=\"option.html#series.data\" target=\"_blank\">series.data</a> 而非 <code class=\"codespan\">dataset</code>。</p>\n<pre><code class=\"lang-js\">{\n    xAxis: {\n        type: &#39;category&#39;\n        data: [&#39;Matcha Latte&#39;, &#39;Milk Tea&#39;, &#39;Cheese Cocoa&#39;, &#39;Walnut Brownie&#39;]\n    },\n    yAxis: {},\n    series: [{\n        type: &#39;bar&#39;,\n        name: &#39;2015&#39;,\n        data: [89.3, 92.1, 94.4, 85.4]\n    }, {\n        type: &#39;bar&#39;,\n        name: &#39;2016&#39;,\n        data: [95.8, 89.4, 91.2, 76.9]\n    }, {\n        type: &#39;bar&#39;,\n        name: &#39;2017&#39;,\n        data: [97.7, 83.1, 92.5, 78.1]\n    }]\n}\n</code></pre>\n<p>其实,<a href=\"option.html#series.data\" target=\"_blank\">series.data</a> 也是种会一直存在的重要设置方式。一些特殊的非 table 格式的图表,如 <a href=\"option.html#series-treemap\" target=\"_blank\">treemap</a>、<a href=\"option.html#series-graph\" target=\"_blank\">graph</a>、<a href=\"option.html#series-lines\" target=\"_blank\">lines</a> 等,现在仍不支持在 dataset 中设置,仍然需要使用 <a href=\"option.html#series.data\" target=\"_blank\">series.data</a>。另外,对于巨大数据量的渲染(如百万以上的数据量),需要使用 <a href=\"api.html#echartsInstance.appendData\" target=\"_blank\">appendData</a> 进行增量加载,这种情况不支持使用 <code class=\"codespan\">dataset</code>。</p>\n<h2 id=\"-data-transform-\">数据转换器( data transform )</h2>\n<p>参见 <a href=\"#%E4%BD%BF%E7%94%A8%20transform%20%E8%BF%9B%E8%A1%8C%E6%95%B0%E6%8D%AE%E8%BD%AC%E6%8D%A2\">data transform</a>。</p>\n<h2 id=\"-\">其他</h2>\n<p>目前并非所有图表都支持 dataset。支持 dataset 的图表有:\n<code class=\"codespan\">line</code>、<code class=\"codespan\">bar</code>、<code class=\"codespan\">pie</code>、<code class=\"codespan\">scatter</code>、<code class=\"codespan\">effectScatter</code>、<code class=\"codespan\">parallel</code>、<code class=\"codespan\">candlestick</code>、<code class=\"codespan\">map</code>、<code class=\"codespan\">funnel</code>、<code class=\"codespan\">custom</code>。\n后续会有更多的图表进行支持。</p>\n<p>最后,给出一个示例,多个图表共享一个 <code class=\"codespan\">dataset</code>,并带有联动交互:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=dataset-link&edit=1&reset=1\" width=\"800\" height=\"500\" ></iframe>\n\n\n\n\n"},"使用 transform 进行数据转换":{"type":["*"],"description":"<p>Apache ECharts<sup>TM</sup> 5 开始支持了“数据转换”( data transform )功能。在 echarts 中,“数据转换” 这个词指的是,给定一个已有的“数据集”(<a href=\"option.html#dataset\" target=\"_blank\">dataset</a>)和一个“转换方法”(<a href=\"option.html#dataset.transform\" target=\"_blank\">transform</a>),echarts 能生成一个新的“数据集”,然后可以使用这个新的“数据集”绘制图表。这些工作都可以声明式地完成。</p>\n<p>抽象地来说,数据转换是这样一种公式:<code class=\"codespan\">outData = f(inputData)</code>。<code class=\"codespan\">f</code> 是转换方法,例如:<code class=\"codespan\">filter</code>、<code class=\"codespan\">sort</code>、<code class=\"codespan\">regression</code>、<code class=\"codespan\">boxplot</code>、<code class=\"codespan\">cluster</code>、<code class=\"codespan\">aggregate</code>(todo) 等等。有了数据转换能力后,我们就至少可以做到这些事情:</p>\n<ul>\n<li>把数据分成多份用不同的饼图展现。</li>\n<li>进行一些数据统计运算,并展示结果。</li>\n<li>用某些数据可视化算法处理数据,并展示结果。</li>\n<li>数据排序。</li>\n<li>去除或直选择数据项。</li>\n<li>...</li>\n</ul>\n<h2 id=\"-\">数据转换基础使用</h2>\n<p>在 echarts 中,数据转换是依托于数据集(<a href=\"#dataset\">dataset</a>)来实现的. 我们可以设置 <a href=\"option.html#dataset.transform\" target=\"_blank\">dataset.transform</a> 来表示,此 dataset 的数据,来自于此 transform 的结果。例如。</p>\n<pre><code class=\"lang-js\">var option = {\n    dataset: [{\n        // 这个 dataset 的 index 是 `0`。\n        source: [\n            [&#39;Product&#39;, &#39;Sales&#39;, &#39;Price&#39;, &#39;Year&#39;],\n            [&#39;Cake&#39;, 123, 32, 2011],\n            [&#39;Cereal&#39;, 231, 14, 2011],\n            [&#39;Tofu&#39;, 235, 5, 2011],\n            [&#39;Dumpling&#39;, 341, 25, 2011],\n            [&#39;Biscuit&#39;, 122, 29, 2011],\n            [&#39;Cake&#39;, 143, 30, 2012],\n            [&#39;Cereal&#39;, 201, 19, 2012],\n            [&#39;Tofu&#39;, 255, 7, 2012],\n            [&#39;Dumpling&#39;, 241, 27, 2012],\n            [&#39;Biscuit&#39;, 102, 34, 2012],\n            [&#39;Cake&#39;, 153, 28, 2013],\n            [&#39;Cereal&#39;, 181, 21, 2013],\n            [&#39;Tofu&#39;, 395, 4, 2013],\n            [&#39;Dumpling&#39;, 281, 31, 2013],\n            [&#39;Biscuit&#39;, 92, 39, 2013],\n            [&#39;Cake&#39;, 223, 29, 2014],\n            [&#39;Cereal&#39;, 211, 17, 2014],\n            [&#39;Tofu&#39;, 345, 3, 2014],\n            [&#39;Dumpling&#39;, 211, 35, 2014],\n            [&#39;Biscuit&#39;, 72, 24, 2014],\n        ],\n        // id: &#39;a&#39;\n    }, {\n        // 这个 dataset 的 index 是 `1`。\n        // 这个 `transform` 配置,表示,此 dataset 的数据,来自于此 transform 的结果。\n        transform: {\n            type: &#39;filter&#39;,\n            config: { dimension: &#39;Year&#39;, value: 2011 }\n        },\n        // 我们还可以设置这些可选的属性: `fromDatasetIndex` 或 `fromDatasetId`。\n        // 这些属性,指定了,transform 的输入,来自于哪个 dataset。例如,\n        // `fromDatasetIndex: 0` 表示输入来自于 index 为 `0` 的 dataset 。又例如,\n        // `fromDatasetId: &#39;a&#39;` 表示输入来自于 `id: &#39;a&#39;` 的 dataset。\n        // 当这些属性都不指定时,默认认为,输入来自于 index 为 `0` 的 dataset 。\n    }, {\n        // 这个 dataset 的 index 是 `2`。\n        // 同样,这里因为 `fromDatasetIndex` 和 `fromDatasetId` 都没有被指定,\n        // 那么输入默认来自于 index 为 `0` 的 dataset 。\n        transform: {\n            // 这个类型为 &quot;filter&quot; 的 transform 能够遍历并筛选出满足条件的数据项。\n            type: &#39;filter&#39;,\n            // 每个 transform 如果需要有配置参数的话,都须配置在 `config` 里。\n            // 在这个 &quot;filter&quot; transform 中,`config` 用于指定筛选条件。\n            // 下面这个筛选条件是:选出维度( dimension )&#39;Year&#39; 中值为 2012 的所有\n            // 数据项。\n            config: { dimension: &#39;Year&#39;, value: 2012 }\n        }\n    }, {\n        // 这个 dataset 的 index 是 `3`。\n        transform: {\n            type: &#39;filter&#39;,\n            config: { dimension: &#39;Year&#39;, value: 2013 }\n        }\n    }],\n    series: [{\n        type: &#39;pie&#39;, radius: 50, center: [&#39;25%&#39;, &#39;50%&#39;],\n        // 这个饼图系列,引用了 index 为 `1` 的 dataset 。也就是,引用了上述\n        // 2011 年那个 &quot;filter&quot; transform 的结果。\n        datasetIndex: 1\n    }, {\n        type: &#39;pie&#39;, radius: 50, center: [&#39;50%&#39;, &#39;50%&#39;],\n        datasetIndex: 2\n    }, {\n        type: &#39;pie&#39;, radius: 50, center: [&#39;75%&#39;, &#39;50%&#39;],\n        datasetIndex: 3\n    }]\n};\n</code></pre>\n<p>下面是上述例子的效果,三个饼图分别显示了 2011、2012、2013 年的数据。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=data-transform-multiple-pie&reset=1&edit=1\" width=\"800\" height=\"300\" ></iframe>\n\n\n<p>现在我们简单总结下,使用 transform 时的几个要点:</p>\n<ul>\n<li>在一个空的 dataset 中声明 <code class=\"codespan\">transform</code>, <code class=\"codespan\">fromDatasetIndex</code>/<code class=\"codespan\">fromDatasetId</code> 来表示我们要生成新的数据。</li>\n<li>系列引用这个 dataset 。</li>\n</ul>\n<h2 id=\"-\">数据转换的进阶使用</h2>\n<h4 id=\"-transform\">链式声明 transform</h4>\n<p><code class=\"codespan\">transform</code> 可以被链式声明,这是一个语法糖。</p>\n<pre><code class=\"lang-js\">option: {\n    dataset: [{\n        source: [ ... ] // 原始数据\n    }, {\n        // 几个 transform 被声明成 array ,他们构成了一个链,\n        // 前一个 transform 的输出是后一个 transform 的输入。\n        transform: [{\n            type: &#39;filter&#39;,\n            config: { dimension: &#39;Product&#39;, value: &#39;Tofu&#39; }\n        }, {\n            type: &#39;sort&#39;,\n            config: { dimension: &#39;Year&#39;, order: &#39;desc&#39; }\n        }]\n    }],\n    series: {\n        type: &#39;pie&#39;,\n        // 这个系列引用上述 transform 的结果。\n        datasetIndex: 1\n    }\n}\n</code></pre>\n<blockquote>\n<p>注意:理论上,任何 transform 都可能有多个输入或多个输出。但是,如果一个 transform 被链式声明,它只能获取前一个 transform 的第一个输出作为输入(第一个 transform 除外),以及它只能把自己的第一个输出给到后一个 transform (最后一个 transform 除外)。</p>\n</blockquote>\n<h4 id=\"-transform-data\">一个 transform 输出多个 data</h4>\n<p>在大多数场景下,transform 只需输出一个 data 。但是也有一些场景,需要输出多个 data ,每个 data 可以被不同的 series 或者 dataset 所使用。</p>\n<p>例如,在内置的 &quot;boxplot&quot; transform 中,除了 boxplot 系列所需要的 data 外,离群点( outlier )也会被生成,并且可以用例如散点图系列显示出来。例如,<a href=\"https://echarts.apache.org/examples/zh/editor.html?c=boxplot-light-velocity&amp;edit=1&amp;reset=1\" target=\"_blank\">example</a>。</p>\n<p>我们提供配置 <a href=\"option.html#dataset.fromTransformResult\" target=\"_blank\">dataset.fromTransformResult</a> 来满足这种情况,例如:</p>\n<pre><code class=\"lang-js\">option = {\n    dataset: [{\n        // 这个 dataset 的 index 为 `0`。\n        source: [...] // 原始数据\n    }, {\n        // 这个 dataset 的 index 为 `1`。\n        transform: {\n            type: &#39;boxplot&#39;\n        }\n        // 这个 &quot;boxplot&quot; transform 生成了两个数据:\n        // result[0]: boxplot series 所需的数据。\n        // result[1]: 离群点数据。\n        // 当其他 series 或者 dataset 引用这个 dataset 时,他们默认只能得到\n        // result[0] 。\n        // 如果想要他们得到 result[1] ,需要额外声明如下这样一个 dataset :\n    }, {\n        // 这个 dataset 的 index 为 `2`。\n        // 这个额外的 dataset 指定了数据来源于 index 为 `1` 的 dataset。\n        fromDatasetIndex: 1,\n        // 并且指定了获取 transform result[1] 。\n        fromTransformResult: 1\n    }],\n    xAxis: {\n        type: &#39;category&#39;\n    },\n    yAxis: {\n    },\n    series: [{\n        name: &#39;boxplot&#39;,\n        type: &#39;boxplot&#39;,\n        // Reference the data from result[0].\n        // 这个 series 引用 index 为 `1` 的 dataset 。\n        datasetIndex: 1\n    }, {\n        name: &#39;outlier&#39;,\n        type: &#39;scatter&#39;,\n        // 这个 series 引用 index 为 `2` 的 dataset 。\n        // 从而也就得到了上述的 transform result[1] (即离群点数据)\n        datasetIndex: 2\n    }]\n};\n</code></pre>\n<p>另外,<a href=\"option.html#dataset.fromTransformResult\" target=\"_blank\">dataset.fromTransformResult</a> 和 <a href=\"option.html#dataset.transform\" target=\"_blank\">dataset.transform</a> 能同时出现在一个 dataset 中,这表示,这个 transform 的输入,是上游的结果中以 <code class=\"codespan\">fromTransformResult</code> 获取的结果。例如:</p>\n<pre><code class=\"lang-js\">{\n    fromDatasetIndex: 1,\n    fromTransformResult: 1,\n    transform: {\n        type: &#39;sort&#39;,\n        config: { dimension: 2, order: &#39;desc&#39; }\n    }\n}\n</code></pre>\n<h4 id=\"-debug\">在开发环境中 debug</h4>\n<p>使用 transform 时,有时候我们会配不对,显示不出来结果,并且不知道哪里错了。所以,这里提供了一个配置项 <code class=\"codespan\">transform.print</code> 方便 debug 。这个配置项只在开发环境中生效。如下例:</p>\n<pre><code class=\"lang-js\">option = {\n    dataset: [{\n        source: [ ... ]\n    }, {\n        transform: {\n            type: &#39;filter&#39;,\n            config: { ... }\n            // 配置为 `true` 后, transform 的结果\n            // 会被 console.log 打印出来。\n            print: true\n        }\n    }],\n    ...\n}\n</code></pre>\n<h2 id=\"-filter\">数据转换器 &quot;filter&quot;</h2>\n<p>echarts 内置提供了能起过滤作用的数据转换器。我们只需声明 <code class=\"codespan\">transform.type: &quot;filter&quot;</code>,以及给出数据筛选条件。如下例:</p>\n<pre><code class=\"lang-js\">option = {\n    dataset: [{\n        source: [\n            [&#39;Product&#39;, &#39;Sales&#39;, &#39;Price&#39;, &#39;Year&#39;],\n            [&#39;Cake&#39;, 123, 32, 2011],\n            [&#39;Latte&#39;, 231, 14, 2011],\n            [&#39;Tofu&#39;, 235, 5, 2011],\n            [&#39;Milk Tee&#39;, 341, 25, 2011],\n            [&#39;Porridge&#39;, 122, 29, 2011],\n            [&#39;Cake&#39;, 143, 30, 2012],\n            [&#39;Latte&#39;, 201, 19, 2012],\n            [&#39;Tofu&#39;, 255, 7, 2012],\n            [&#39;Milk Tee&#39;, 241, 27, 2012],\n            [&#39;Porridge&#39;, 102, 34, 2012],\n            [&#39;Cake&#39;, 153, 28, 2013],\n            [&#39;Latte&#39;, 181, 21, 2013],\n            [&#39;Tofu&#39;, 395, 4, 2013],\n            [&#39;Milk Tee&#39;, 281, 31, 2013],\n            [&#39;Porridge&#39;, 92, 39, 2013],\n            [&#39;Cake&#39;, 223, 29, 2014],\n            [&#39;Latte&#39;, 211, 17, 2014],\n            [&#39;Tofu&#39;, 345, 3, 2014],\n            [&#39;Milk Tee&#39;, 211, 35, 2014],\n            [&#39;Porridge&#39;, 72, 24, 2014]\n        ]\n    }, {\n        transform: {\n            type: &#39;filter&#39;,\n            config: { dimension: &#39;Year&#39;, &#39;=&#39;: 2011 }\n            // 这个筛选条件表示,遍历数据,筛选出维度( dimension )\n            // &#39;Year&#39; 上值为 2011 的所有数据项。\n        }\n    }],\n    series: {\n        type: &#39;pie&#39;,\n        datasetIndex: 1\n    }\n};\n</code></pre>\n<p><br>\n<br>\n这是 filter 的另一个例子的效果:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=data-transform-filter&reset=1&edit=1\" width=\"600\" height=\"350\" ></iframe>\n\n\n\n<p>在 &quot;filter&quot; transform 中,有这些要素:</p>\n<p><strong>关于维度( dimension ):</strong></p>\n<p><code class=\"codespan\">config.dimension</code> 指定了维度,能设成这样的值:</p>\n<ul>\n<li>设定成声明在 dataset 中的维度名,例如 <code class=\"codespan\">config: { dimension: &#39;Year&#39;, &#39;=&#39;: 2011 }</code>。不过, dataset 中维度名的声明并非强制,所以我们也可以</li>\n<li>设定成 dataset 中的维度 index (index 值从 0 开始)例如 <code class=\"codespan\">config: { dimension: 3, &#39;=&#39;: 2011 }</code>。</li>\n</ul>\n<p><strong>关于关系比较操作符:</strong></p>\n<p>关系操作符,可以设定这些:\n<code class=\"codespan\">&gt;</code>(<code class=\"codespan\">gt</code>)、<code class=\"codespan\">&gt;=</code>(<code class=\"codespan\">gte</code>)、<code class=\"codespan\">&lt;</code>(<code class=\"codespan\">lt</code>)、<code class=\"codespan\">&lt;=</code>(<code class=\"codespan\">lte</code>)、<code class=\"codespan\">=</code>(<code class=\"codespan\">eq</code>)、<code class=\"codespan\">!=</code>(<code class=\"codespan\">ne</code>、<code class=\"codespan\">&lt;&gt;</code>)、<code class=\"codespan\">reg</code>。(小括号中的符号或名字,是别名,设置起来作用相同)。他们首先基本地能基于数值大小进行比较,然后也有些额外的功能特性:</p>\n<ul>\n<li>多个关系操作符能声明在一个 {} 中,例如 <code class=\"codespan\">{ dimension: &#39;Price&#39;, &#39;&gt;=&#39;: 20, &#39;&lt;&#39;: 30 }</code>。这表示“与”的关系,即,筛选出价格大于等于 20 小雨 30 的数据项。</li>\n<li>data 里的值,不仅可以是数值( number ),也可以是“类数值的字符串”(“ numeric string ”)。“类数值的字符串”本身是一个字符串,但是可以被转换为字面所描述的数值,例如 <code class=\"codespan\">&#39; 123 &#39;</code>。转换过程中,空格(全角半角空格)和换行符都能被消除( trim )。</li>\n<li>如果我们需要对日期对象(JS <code class=\"codespan\">Date</code>)或者日期字符串(如 &#39;2012-05-12&#39;)进行比较,我们需要手动指定 <code class=\"codespan\">parser: &#39;time&#39;</code>,例如 <code class=\"codespan\">config: { dimension: 3, lt: &#39;2012-05-12&#39;, parser: &#39;time&#39; }</code>。</li>\n<li>纯字符串比较也被支持,但是只能用在 <code class=\"codespan\">=</code> 或 <code class=\"codespan\">!=</code> 上。而 <code class=\"codespan\">&gt;</code>, <code class=\"codespan\">&gt;=</code>, <code class=\"codespan\">&lt;</code>, <code class=\"codespan\">&lt;=</code> 并不支持纯字符串比较,也就是说,这四个操作符的右值,不能是字符串。</li>\n<li><code class=\"codespan\">reg</code> 操作符能提供正则表达式比较。例如, <code class=\"codespan\">{ dimension: &#39;Name&#39;, reg: /\\s+Müller\\s*$/ }</code> 能在 <code class=\"codespan\">&#39;Name&#39;</code> 维度上选出姓 <code class=\"codespan\">&#39;Müller&#39;</code> 的数据项。</li>\n</ul>\n<p><strong>关于逻辑比较:</strong></p>\n<p>我们也支持了逻辑比较操作符 <strong>与或非</strong>( <code class=\"codespan\">and</code> | <code class=\"codespan\">or</code> | <code class=\"codespan\">not</code> ):</p>\n<pre><code class=\"lang-js\">option = {\n    dataset: [{\n        source: [...]\n    }, {\n        transform: {\n            type: &#39;filter&#39;,\n            config: {\n                // 使用 and 操作符。\n                // 类似地,同样的位置也可以使用 “or” 或 “not”。\n                // 但是注意 “not” 后应该跟一个 {...} 而非 [...] 。\n                and: [\n                    { dimension: &#39;Year&#39;, &#39;=&#39;: 2011 },\n                    { dimension: &#39;Price&#39;, &#39;&gt;=&#39;: 20, &#39;&lt;&#39;: 30 }\n                ]\n            }\n            // 这个表达的是,选出 2011 年价格大于等于 20 但小于 30 的数据项。\n        }\n    }],\n    series: {\n        type: &#39;pie&#39;,\n        datasetIndex: 1\n    }\n};\n</code></pre>\n<p><code class=\"codespan\">and</code>/<code class=\"codespan\">or</code>/<code class=\"codespan\">not</code> 自然可以被嵌套,例如:</p>\n<pre><code class=\"lang-js\">transform: {\n    type: &#39;filter&#39;,\n    config: {\n        or: [{\n            and: [{\n                dimension: &#39;Price&#39;, &#39;&gt;=&#39;: 10, &#39;&lt;&#39;: 20\n            }, {\n                dimension: &#39;Sales&#39;, &#39;&lt;&#39;: 100\n            }, {\n                not: { dimension: &#39;Product&#39;, &#39;=&#39;: &#39;Tofu&#39; }\n            }]\n        }, {\n            and: [{\n                dimension: &#39;Price&#39;, &#39;&gt;=&#39;: 10, &#39;&lt;&#39;: 20\n            }, {\n                dimension: &#39;Sales&#39;, &#39;&lt;&#39;: 100\n            }, {\n                not: { dimension: &#39;Product&#39;, &#39;=&#39;: &#39;Cake&#39; }\n            }]\n        }]\n    }\n}\n</code></pre>\n<p><strong>关于解析器( parser ):</strong></p>\n<p>还可以指定“解析器”( parser )来对值进行解析后再做比较。现在支持的解析器有:</p>\n<ul>\n<li><code class=\"codespan\">parser: &#39;time&#39;</code>:把原始值解析成时间戳( timestamp )后再做比较。这个解析器的行为,和 <code class=\"codespan\">echarts.time.parse</code> 相同,即,当原始值为时间对象( JS <code class=\"codespan\">Date</code> 实例),或者是时间戳,或者是描述时间的字符串(例如 <code class=\"codespan\">&#39;2012-05-12 03:11:22&#39;</code> ),都可以被解析为时间戳,然后就可以基于数值大小进行比较。如果原始数据是其他不可解析为时间戳的值,那么会被解析为 NaN。</li>\n<li><code class=\"codespan\">parser: &#39;trim&#39;</code>:如果原始数据是字符串,则把字符串两端的空格(全角半角)和换行符去掉。如果不是字符串,还保持为原始数据。</li>\n<li><code class=\"codespan\">parser: &#39;number&#39;</code>:强制把原始数据转成数值。如果不能转成有意义的数值,那么转成 <code class=\"codespan\">NaN</code>。在大多数场景下,我们并不需要这个解析器,因为按默认策略,“像数值的字符串”就会被转成数值。但是默认策略比较严格,这个解析器比较宽松,如果我们遇到含有尾缀的字符串(例如 <code class=\"codespan\">&#39;33%&#39;</code>, <code class=\"codespan\">12px</code>),我们需要手动指定 <code class=\"codespan\">parser: &#39;number&#39;</code>,从而去掉尾缀转为数值才能比较。</li>\n</ul>\n<p>这个例子显示了如何使用 <code class=\"codespan\">parser: &#39;time&#39;</code>:</p>\n<pre><code class=\"lang-js\">option = {\n    dataset: [{\n        source: [\n            [&#39;Product&#39;, &#39;Sales&#39;, &#39;Price&#39;, &#39;Date&#39;],\n            [&#39;Milk Tee&#39;, 311, 21, &#39;2012-05-12&#39;],\n            [&#39;Cake&#39;, 135, 28, &#39;2012-05-22&#39;],\n            [&#39;Latte&#39;, 262, 36, &#39;2012-06-02&#39;],\n            [&#39;Milk Tee&#39;, 359, 21, &#39;2012-06-22&#39;],\n            [&#39;Cake&#39;, 121, 28, &#39;2012-07-02&#39;],\n            [&#39;Latte&#39;, 271, 36, &#39;2012-06-22&#39;],\n            ...\n        ]\n    }, {\n        transform: {\n            type: &#39;filter&#39;,\n            config: {\n                { dimension: &#39;Date&#39;, &#39;&gt;=&#39;: &#39;2012-05&#39;, &#39;&lt;&#39;: &#39;2012-06&#39;, parser: &#39;time&#39; }\n            }\n        }\n    }]\n}\n</code></pre>\n<p><strong>形式化定义:</strong></p>\n<p>最后,我们给出,数据转换器 &quot;filter&quot; 的 config 的形式化定义:</p>\n<pre><code class=\"lang-ts\">type FilterTransform = {\n    type: &#39;filter&#39;;\n    config: ConditionalExpressionOption;\n};\ntype ConditionalExpressionOption =\n    true | false | RelationalExpressionOption | LogicalExpressionOption;\ntype RelationalExpressionOption = {\n    dimension: DimensionName | DimensionIndex;\n    parser?: &#39;time&#39; | &#39;trim&#39; | &#39;number&#39;;\n    lt?: DataValue; // less than\n    lte?: DataValue; // less than or equal\n    gt?: DataValue; // greater than\n    gte?: DataValue; // greater than or equal\n    eq?: DataValue; // equal\n    ne?: DataValue; // not equal\n    &#39;&lt;&#39;?: DataValue; // lt\n    &#39;&lt;=&#39;?: DataValue; // lte\n    &#39;&gt;&#39;?: DataValue; // gt\n    &#39;&gt;=&#39;?: DataValue; // gte\n    &#39;=&#39;?: DataValue; // eq\n    &#39;!=&#39;?: DataValue; // ne\n    &#39;&lt;&gt;&#39;?: DataValue; // ne (SQL style)\n    reg?: RegExp | string; // RegExp\n};\ntype LogicalExpressionOption = {\n    and?: ConditionalExpressionOption[];\n    or?: ConditionalExpressionOption[];\n    not?: ConditionalExpressionOption;\n};\ntype DataValue = string | number | Date;\ntype DimensionName = string;\ntype DimensionIndex = number;\n</code></pre>\n<h2 id=\"-sort\">数据转换器 &quot;sort&quot;</h2>\n<p>&quot;sort&quot; 是另一个内置的数据转换器,用于排序数据。目前主要能用于在类目轴( <code class=\"codespan\">axis.type: &#39;category&#39;</code> )中显示排过序的数据。例如:</p>\n<pre><code class=\"lang-js\">option = {\n    dataset: [{\n        dimensions: [&#39;name&#39;, &#39;age&#39;, &#39;profession&#39;, &#39;score&#39;, &#39;date&#39;],\n        source: [\n            [&#39; Hannah Krause &#39;, 41, &#39;Engineer&#39;, 314, &#39;2011-02-12&#39;],\n            [&#39;Zhao Qian &#39;, 20, &#39;Teacher&#39;, 351, &#39;2011-03-01&#39;],\n            [&#39; Jasmin Krause &#39;, 52, &#39;Musician&#39;, 287, &#39;2011-02-14&#39;],\n            [&#39;Li Lei&#39;, 37, &#39;Teacher&#39;, 219, &#39;2011-02-18&#39;],\n            [&#39; Karle Neumann &#39;, 25, &#39;Engineer&#39;, 253, &#39;2011-04-02&#39;],\n            [&#39; Adrian Groß&#39;, 19, &#39;Teacher&#39;, null, &#39;2011-01-16&#39;],\n            [&#39;Mia Neumann&#39;, 71, &#39;Engineer&#39;, 165, &#39;2011-03-19&#39;],\n            [&#39; Böhm Fuchs&#39;, 36, &#39;Musician&#39;, 318, &#39;2011-02-24&#39;],\n            [&#39;Han Meimei &#39;, 67, &#39;Engineer&#39;, 366, &#39;2011-03-12&#39;],\n        ]\n    }, {\n        transform: {\n            type: &#39;sort&#39;,\n            // 按分数排序\n            config: { dimension: &#39;score&#39;, order: &#39;asc&#39; }\n        }\n    }],\n    series: {\n        type: &#39;bar&#39;,\n        datasetIndex: 1\n    },\n    ...\n};\n</code></pre>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=data-transform-sort-bar&reset=1&edit=1\" width=\"600\" height=\"350\" ></iframe>\n\n\n\n<p>数据转换器 &quot;sort&quot; 还有一些额外的功能:</p>\n<ul>\n<li>可以多重排序,多个维度一起排序。见下面的例子。</li>\n<li>排序规则是这样的:<ul>\n<li>默认按照数值大小排序。其中,“可转为数值的字符串”也被转换成数值,和其他数值一起按大小排序。</li>\n<li>对于其他“不能转为数值的字符串”,也能在它们之间按字符串进行排序。这个特性有助于这种场景:把相同标签的数据项排到一起,尤其是当多个维度共同排序时。见下面的例子。</li>\n<li>当“数值及可转为数值的字符串”和“不能转为数值的字符串”进行排序时,或者它们和“其他类型的值”进行比较时,它们本身是不知如何进行比较的。那么我们称呼“后者”为“incomparable”,并且可以设置 <code class=\"codespan\">incomparable: &#39;min&#39; | &#39;max&#39;</code> 来指定一个“incomparable”在这个比较中是最大还是最小,从而能使它们能产生比较结果。这个设定的用途,比如可以是,决定空值(例如 <code class=\"codespan\">null</code>, <code class=\"codespan\">undefined</code>, <code class=\"codespan\">NaN</code>, <code class=\"codespan\">&#39;&#39;</code>, <code class=\"codespan\">&#39;-&#39;</code>)在排序的头还是尾。</li>\n</ul>\n</li>\n<li>过滤器 <code class=\"codespan\">filter: &#39;time&#39; | &#39;trim&#39; | &#39;number&#39;</code> 可以被使用,和数据转换器 &quot;filter&quot; 中的情况一样。<ul>\n<li>如果要对时间进行排序(例如,值为 JS <code class=\"codespan\">Date</code> 实例或者时间字符串如 <code class=\"codespan\">&#39;2012-03-12 11:13:54&#39;</code>),我们需要声明 <code class=\"codespan\">parser: &#39;time&#39;</code>。</li>\n<li>如果需要对有后缀的数值进行排序(如 <code class=\"codespan\">&#39;33%&#39;</code>, <code class=\"codespan\">&#39;16px&#39;</code>)我们需要声明 <code class=\"codespan\">parser: &#39;number&#39;</code>。</li>\n</ul>\n</li>\n</ul>\n<p>这是一个“多维度排序”的例子。</p>\n<pre><code class=\"lang-js\">option = {\n    dataset: [{\n        dimensions: [&#39;name&#39;, &#39;age&#39;, &#39;profession&#39;, &#39;score&#39;, &#39;date&#39;],\n        source: [\n            [&#39; Hannah Krause &#39;, 41, &#39;Engineer&#39;, 314, &#39;2011-02-12&#39;],\n            [&#39;Zhao Qian &#39;, 20, &#39;Teacher&#39;, 351, &#39;2011-03-01&#39;],\n            [&#39; Jasmin Krause &#39;, 52, &#39;Musician&#39;, 287, &#39;2011-02-14&#39;],\n            [&#39;Li Lei&#39;, 37, &#39;Teacher&#39;, 219, &#39;2011-02-18&#39;],\n            [&#39; Karle Neumann &#39;, 25, &#39;Engineer&#39;, 253, &#39;2011-04-02&#39;],\n            [&#39; Adrian Groß&#39;, 19, &#39;Teacher&#39;, null, &#39;2011-01-16&#39;],\n            [&#39;Mia Neumann&#39;, 71, &#39;Engineer&#39;, 165, &#39;2011-03-19&#39;],\n            [&#39; Böhm Fuchs&#39;, 36, &#39;Musician&#39;, 318, &#39;2011-02-24&#39;],\n            [&#39;Han Meimei &#39;, 67, &#39;Engineer&#39;, 366, &#39;2011-03-12&#39;],\n        ]\n    }, {\n        transform: {\n            type: &#39;sort&#39;,\n            config: [\n                // 对两个维度按声明的优先级分别排序。\n                { dimension: &#39;profession&#39;, order: &#39;desc&#39; },\n                { dimension: &#39;score&#39;, order: &#39;desc&#39; }\n            ]\n        }\n    }],\n    series: {\n        type: &#39;bar&#39;,\n        datasetIndex: 1\n    },\n    ...\n};\n</code></pre>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/data-transform-multiple-sort-bar&reset=1&edit=1\" width=\"600\" height=\"350\" ></iframe>\n\n\n\n<p>最后,我们给出数据转换器 &quot;sort&quot; 的 config 的形式化定义。</p>\n<pre><code class=\"lang-ts\">type SortTransform = {\n    type: &#39;filter&#39;;\n    config: OrderExpression | OrderExpression[];\n};\ntype OrderExpression = {\n    dimension: DimensionName | DimensionIndex;\n    order: &#39;asc&#39; | &#39;desc&#39;;\n    incomparable?: &#39;min&#39; | &#39;max&#39;;\n    parser?: &#39;time&#39; | &#39;trim&#39; | &#39;number&#39;;\n};\ntype DimensionName = string;\ntype DimensionIndex = number;\n</code></pre>\n<h2 id=\"-\">使用外部的数据转换器</h2>\n<p>除了上述的内置的数据转换器外,我们也可以使用外部的数据转换器。外部数据转换器能提供或自己定制更丰富的功能。下面的例子中,我们使用第三方库 <a href=\"https://github.com/ecomfe/echarts-stat\" target=\"_blank\">ecStat</a> 提供的数据转换器。</p>\n<p>生成数据的回归线:</p>\n<pre><code class=\"lang-js\">// 首先要注册外部数据转换器。\necharts.registerTransform(ecStatTransform(ecStat).regression);\n</code></pre>\n<pre><code class=\"lang-js\">option = {\n    dataset: [{\n        source: rawData\n    }, {\n        transform: {\n            // 引用注册的数据转换器。\n            // 注意,每个外部的数据转换器,都有名空间(如 &#39;ecStat:xxx&#39;,&#39;ecStat&#39; 是名空间)。\n            // 而内置数据转换器(如 &#39;filter&#39;, &#39;sort&#39;)没有名空间。\n            type: &#39;ecStat:regression&#39;,\n            config: {\n                // 这里是此外部数据转换器所需的参数。\n                method: &#39;exponential&#39;\n            }\n        }\n    }],\n    xAxis: { type: &#39;category&#39; },\n    yAxis: {},\n    series: [{\n        name: &#39;scatter&#39;,\n        type: &#39;scatter&#39;,\n        datasetIndex: 0\n    }, {\n        name: &#39;regression&#39;,\n        type: &#39;line&#39;,\n        symbol: &#39;none&#39;,\n        datasetIndex: 1\n    }]\n};\n</code></pre>\n<p>一些使用外部转换器的例子:</p>\n<ul>\n<li><a href=\"https://echarts.apache.org/examples/zh/editor.html?c=data-transform-aggregate&amp;edit=1&amp;reset=1\" target=\"_blank\">聚集</a></li>\n<li><a href=\"https://echarts.apache.org/examples/zh/editor.html?c=bar-histogram&amp;edit=1&amp;reset=1\" target=\"_blank\">直方图</a></li>\n<li><a href=\"https://echarts.apache.org/examples/zh/editor.html?c=scatter-clustering&amp;edit=1&amp;reset=1\" target=\"_blank\">简单聚类</a></li>\n<li><a href=\"https://echarts.apache.org/examples/zh/editor.html?c=scatter-linear-regression&amp;edit=1&amp;reset=1\" target=\"_blank\">线性回归线</a></li>\n<li><a href=\"https://echarts.apache.org/examples/zh/editor.html?c=scatter-exponential-regression&amp;edit=1&amp;reset=1\" target=\"_blank\">指数回归线</a></li>\n<li><a href=\"https://echarts.apache.org/examples/zh/editor.html?c=scatter-logarithmic-regression&amp;edit=1&amp;reset=1\" target=\"_blank\">对数回归线</a></li>\n<li><a href=\"https://echarts.apache.org/examples/zh/editor.html?c=scatter-polynomial-regression&amp;edit=1&amp;reset=1\" target=\"_blank\">多项式回归线</a></li>\n</ul>\n"},"在图表中加入交互组件":{"type":["*"],"description":"<p>除了图表外 Apache ECharts<sup>TM</sup> 中,提供了很多交互组件。例如:</p>\n<p><code class=\"codespan\">图例组件</code> <a href=\"option.html#legend\" target=\"_blank\">legend</a>、<code class=\"codespan\">标题组件</code> <a href=\"option.html#title\" target=\"_blank\">title</a>、<code class=\"codespan\">视觉映射组件</code> <a href=\"option.html#visualMap\" target=\"_blank\">visualMap</a>、<code class=\"codespan\">数据区域缩放组件</code> <a href=\"option.html#dataZoom\" target=\"_blank\">dataZoom</a>、<code class=\"codespan\">时间线组件</code> <a href=\"option.html#timeline\" target=\"_blank\">timeline</a></p>\n<p>下面以 <code class=\"codespan\">数据区域缩放组件</code> <a href=\"option.html#dataZoom\" target=\"_blank\">dataZoom</a> 为例,介绍如何加入这种组件。</p>\n<h2 id=\"-datazoom-\">数据区域缩放组件(dataZoom)介绍</h2>\n<p>『概览数据整体,按需关注数据细节』是数据可视化的基本交互需求。<code class=\"codespan\">dataZoom</code> 组件能够在直角坐标系(<a href=\"option.html#grid\" target=\"_blank\">grid</a>)、极坐标系(<a href=\"option.html#polar\" target=\"_blank\">polar</a>)中实现这一功能。</p>\n<p><strong>如下例子:</strong></p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/scatter-dataZoom-all&edit=1&reset=1\" width=\"600\" height=\"400\" ></iframe>\n\n\n<p><br></p>\n<ul>\n<li><code class=\"codespan\">dataZoom</code> 组件是对 <code class=\"codespan\">数轴(axis)</code> 进行『数据窗口缩放』『数据窗口平移』操作。</li>\n</ul>\n<blockquote>\n<p>可以通过 <a href=\"option.html#dataZoom.xAxisIndex\" target=\"_blank\">dataZoom.xAxisIndex</a> 或 <a href=\"option.html#dataZoom.yAxisIndex\" target=\"_blank\">dataZoom.yAxisIndex</a> 来指定 <code class=\"codespan\">dataZoom</code> 控制哪个或哪些数轴。</p>\n</blockquote>\n<ul>\n<li><p><code class=\"codespan\">dataZoom</code> 组件可同时存在多个,起到共同控制的作用。控制同一个数轴的组件,会自动联动。下面例子中会详细说明。</p>\n</li>\n<li><p><code class=\"codespan\">dataZoom</code> 的运行原理是通过『数据过滤』来达到『数据窗口缩放』的效果。</p>\n<p>  数据过滤模式的设置不同,效果也不同,参见:<a href=\"option.html#dataZoom.filterMode\" target=\"_blank\">dataZoom.filterMode</a>。</p>\n</li>\n<li><p><code class=\"codespan\">dataZoom</code> 的数据窗口范围的设置,目前支持两种形式:</p>\n<ul>\n<li><p>百分比形式:参见 <a href=\"option.html#dataZoom.start\" target=\"_blank\">dataZoom.start</a> 和 <a href=\"option.html#dataZoom.end\" target=\"_blank\">dataZoom.end</a>。</p>\n</li>\n<li><p>绝对数值形式:参见 <a href=\"option.html#dataZoom.startValue\" target=\"_blank\">dataZoom.startValue</a> 和 <a href=\"option.html#dataZoom.endValue\" target=\"_blank\">dataZoom.endValue</a>。</p>\n</li>\n</ul>\n</li>\n</ul>\n<p><strong>dataZoom 组件现在支持几种子组件:</strong></p>\n<ul>\n<li><p><a href=\"option.html#dataZoom-inside\" target=\"_blank\">内置型数据区域缩放组件(dataZoomInside)</a>:内置于坐标系中。</p>\n</li>\n<li><p><a href=\"option.html#dataZoom-slider\" target=\"_blank\">滑动条型数据区域缩放组件(dataZoomSlider)</a>:有单独的滑动条操作。</p>\n</li>\n<li><p><a href=\"option.html#toolbox.feature.dataZoom\" target=\"_blank\">框选型数据区域缩放组件(dataZoomSelect)</a>:全屏的选框进行数据区域缩放。入口和配置项均在 <code class=\"codespan\">toolbox</code>中。</p>\n</li>\n</ul>\n<h2 id=\"-datazoom-\">在代码加入 dataZoom 组件</h2>\n<p>先只在对单独一个横轴,加上 dataZoom 组件,代码示例如下:</p>\n<pre><code class=\"lang-javascript\">\noption = {\n    xAxis: {\n        type: &#39;value&#39;\n    },\n    yAxis: {\n        type: &#39;value&#39;\n    },\n    dataZoom: [\n        {   // 这个dataZoom组件,默认控制x轴。\n            type: &#39;slider&#39;, // 这个 dataZoom 组件是 slider 型 dataZoom 组件\n            start: 10,      // 左边在 10% 的位置。\n            end: 60         // 右边在 60% 的位置。\n        }\n    ],\n    series: [\n        {\n            type: &#39;scatter&#39;, // 这是个『散点图』\n            itemStyle: {\n                opacity: 0.8\n            },\n            symbolSize: function (val) {\n                return val[2] * 40;\n            },\n            data: [[&quot;14.616&quot;,&quot;7.241&quot;,&quot;0.896&quot;],[&quot;3.958&quot;,&quot;5.701&quot;,&quot;0.955&quot;],[&quot;2.768&quot;,&quot;8.971&quot;,&quot;0.669&quot;],[&quot;9.051&quot;,&quot;9.710&quot;,&quot;0.171&quot;],[&quot;14.046&quot;,&quot;4.182&quot;,&quot;0.536&quot;],[&quot;12.295&quot;,&quot;1.429&quot;,&quot;0.962&quot;],[&quot;4.417&quot;,&quot;8.167&quot;,&quot;0.113&quot;],[&quot;0.492&quot;,&quot;4.771&quot;,&quot;0.785&quot;],[&quot;7.632&quot;,&quot;2.605&quot;,&quot;0.645&quot;],[&quot;14.242&quot;,&quot;5.042&quot;,&quot;0.368&quot;]]\n        }\n    ]\n}\n</code></pre>\n<p>可以看到如下结果:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/scatter-tutorial-dataZoom-1&edit=1&reset=1\" width=\"600\" height=\"300\" ></iframe>\n\n\n<p><br></p>\n<p>上面的图只能拖动 dataZoom 组件导致窗口变化。如果想在坐标系内进行拖动,以及用滚轮(或移动触屏上的两指滑动)进行缩放,那么要再加上一个 inside 型的 dataZoom组件。直接在上面的 <code class=\"codespan\">option.dataZoom</code> 中增加即可:</p>\n<pre><code class=\"lang-javascript\">option = {\n    ...,\n    dataZoom: [\n        {   // 这个dataZoom组件,默认控制x轴。\n            type: &#39;slider&#39;, // 这个 dataZoom 组件是 slider 型 dataZoom 组件\n            start: 10,      // 左边在 10% 的位置。\n            end: 60         // 右边在 60% 的位置。\n        },\n        {   // 这个dataZoom组件,也控制x轴。\n            type: &#39;inside&#39;, // 这个 dataZoom 组件是 inside 型 dataZoom 组件\n            start: 10,      // 左边在 10% 的位置。\n            end: 60         // 右边在 60% 的位置。\n        }\n    ],\n    ...\n}\n</code></pre>\n<p>可以看到如下结果(能在坐标系中进行滑动,以及使用滚轮缩放了):</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/scatter-tutorial-dataZoom-2&edit=1&reset=1\" width=\"600\" height=\"300\" ></iframe>\n\n\n\n<p><br></p>\n<p>如果想 y 轴也能够缩放,那么在 y 轴上也加上 dataZoom 组件:</p>\n<pre><code class=\"lang-javascript\">option = {\n    ...,\n    dataZoom: [\n        {\n            type: &#39;slider&#39;,\n            xAxisIndex: 0,\n            start: 10,\n            end: 60\n        },\n        {\n            type: &#39;inside&#39;,\n            xAxisIndex: 0,\n            start: 10,\n            end: 60\n        },\n        {\n            type: &#39;slider&#39;,\n            yAxisIndex: 0,\n            start: 30,\n            end: 80\n        },\n        {\n            type: &#39;inside&#39;,\n            yAxisIndex: 0,\n            start: 30,\n            end: 80\n        }\n    ],\n    ...\n}\n</code></pre>\n<p>可以看到如下结果:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/scatter-tutorial-dataZoom-3&edit=1&reset=1\" width=\"600\" height=\"300\" ></iframe>\n\n\n\n\n\n\n\n"},"移动端自适应":{"type":["*"],"description":"<p>Apache ECharts<sup>TM</sup> 工作在用户指定高宽的 DOM 节点(容器)中。ECharts 的『组件』和『系列』都在这个 DOM 节点中,每个节点都可以由用户指定位置。图表库内部并不适宜实现 DOM 文档流布局,因此采用类似绝对布局的简单容易理解的布局方式。但是有时候容器尺寸极端时,这种方式并不能自动避免组件重叠的情况,尤其在移动端小屏的情况下。</p>\n<p>另外,有时会出现一个图表需要同时在PC、移动端上展现的场景。这需要 ECharts 内部组件随着容器尺寸变化而变化的能力。</p>\n<p>为了解决这个问题,ECharts 完善了组件的定位设置,并且实现了类似 <a href=\"https://www.w3.org/TR/css3-mediaqueries/\" target=\"_blank\">CSS Media Query</a> 的自适应能力。</p>\n<h2 id=\"echarts-\">ECharts组件的定位和布局</h2>\n<p>大部分『组件』和『系列』会遵循两种定位方式:</p>\n<p><br>\n<strong>left/right/top/bottom/width/height 定位方式:</strong></p>\n<p>这六个量中,每个量都可以是『绝对值』或者『百分比』或者『位置描述』。</p>\n<ul>\n<li><p>绝对值</p>\n<p>  单位是浏览器像素(px),用 <code class=\"codespan\">number</code> 形式书写(不写单位)。例如 <code class=\"codespan\">{left: 23, height: 400}</code>。</p>\n</li>\n<li><p>百分比</p>\n<p>  表示占 DOM 容器高宽的百分之多少,用 <code class=\"codespan\">string</code> 形式书写。例如 <code class=\"codespan\">{right: &#39;30%&#39;, bottom: &#39;40%&#39;}</code>。</p>\n</li>\n<li><p>位置描述</p>\n<ul>\n<li>可以设置 <code class=\"codespan\">left: &#39;center&#39;</code>,表示水平居中。</li>\n<li>可以设置 <code class=\"codespan\">top: &#39;middle&#39;</code>,表示垂直居中。</li>\n</ul>\n</li>\n</ul>\n<p>这六个量的概念,和 CSS 中六个量的概念类似:</p>\n<ul>\n<li>left:距离 DOM 容器左边界的距离。</li>\n<li>right:距离 DOM 容器右边界的距离。</li>\n<li>top:距离 DOM 容器上边界的距离。</li>\n<li>bottom:距离 DOM 容器下边界的距离。</li>\n<li>width:宽度。</li>\n<li>height:高度。</li>\n</ul>\n<p>在横向,<code class=\"codespan\">left</code>、<code class=\"codespan\">right</code>、<code class=\"codespan\">width</code> 三个量中,只需两个量有值即可,因为任两个量可以决定组件的位置和大小,例如 <code class=\"codespan\">left</code> 和 <code class=\"codespan\">right</code> 或者 <code class=\"codespan\">right</code> 和 <code class=\"codespan\">width</code> 都可以决定组件的位置和大小。\n纵向,<code class=\"codespan\">top</code>、<code class=\"codespan\">bottom</code>、<code class=\"codespan\">height</code> 三个量,和横向类同不赘述。</p>\n<p><br>\n<strong><code class=\"codespan\">center</code> / <code class=\"codespan\">radius</code> 定位方式:</strong></p>\n<ul>\n<li><p><code class=\"codespan\">center</code></p>\n<p>  是一个数组,表示 <code class=\"codespan\">[x, y]</code>,其中,<code class=\"codespan\">x</code>、<code class=\"codespan\">y</code>可以是『绝对值』或者『百分比』,含义和前述相同。</p>\n</li>\n<li><p><code class=\"codespan\">radius</code></p>\n<p>  是一个数组,表示 <code class=\"codespan\">[内半径, 外半径]</code>,其中,内外半径可以是『绝对值』或者『百分比』,含义和前述相同。</p>\n<p>  在自适应容器大小时,百分比设置是很有用的。</p>\n</li>\n</ul>\n<p><br>\n<strong>横向(horizontal)和纵向(vertical)</strong></p>\n<p>ECharts的『外观狭长』型的组件(如 <code class=\"codespan\">legend</code>、<code class=\"codespan\">visualMap</code>、<code class=\"codespan\">dataZoom</code>、<code class=\"codespan\">timeline</code>等),大多提供了『横向布局』『纵向布局』的选择。例如,在细长的移动端屏幕上,可能适合使用『纵向布局』;在PC宽屏上,可能适合使用『横向布局』。</p>\n<p>横纵向布局的设置,一般在『组件』或者『系列』的 <code class=\"codespan\">orient</code> 或者 <code class=\"codespan\">layout</code> 配置项上,设置为 <code class=\"codespan\">&#39;horizontal&#39;</code> 或者 <code class=\"codespan\">&#39;vertical&#39;</code>。</p>\n<p><br>\n<strong>与 ECharts2 的兼容:</strong></p>\n<p>ECharts2 中的 <code class=\"codespan\">x/x2/y/y2</code> 的命名方式仍被兼容,对应于 <code class=\"codespan\">left/right/top/bottom</code>。但是建议写 <code class=\"codespan\">left/right/top/bottom</code>。</p>\n<p>位置描述中,为兼容 ECharts2,可以支持一些看起来略奇怪的设置:<code class=\"codespan\">left: &#39;right&#39;</code>、<code class=\"codespan\">left: &#39;left&#39;</code>、<code class=\"codespan\">top: &#39;bottom&#39;</code>、<code class=\"codespan\">top: &#39;top&#39;</code>。这些语句分别等效于:<code class=\"codespan\">right: 0</code>、<code class=\"codespan\">left: 0</code>、<code class=\"codespan\">bottom: 0</code>、<code class=\"codespan\">top: 0</code>,写成后者就不奇怪了。</p>\n<h2 id=\"media-query\">Media Query</h2>\n<p><a href=\"https://www.w3.org/TR/css3-mediaqueries/#media1\" target=\"_blank\">Media Query</a> 提供了『随着容器尺寸改变而改变』的能力。</p>\n<p>如下例子,可尝试拖动<strong>右下角的圆点</strong>,随着尺寸变化,legend 和 系列会自动改变布局位置和方式。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/pie-media&edit=1&reset=1\" width=\"750\" height=\"600\" ></iframe>\n\n\n<p>要在 option 中设置 Media Query 须遵循如下格式:</p>\n<pre><code class=\"lang-javascript\">option = {\n    // 这里是基本的『原子option』。\n    title: {...},\n    legend: {...},\n    series: [{...}, {...}, ...],\n    ...,\n    media: [ // 这里定义了 media query 的逐条规则。\n        {\n            query: {...},   // 这里写规则。\n            option: {       // 这里写此规则满足下的option。\n                legend: {...},\n                ...\n            }\n        },\n        {\n            query: {...},   // 第二个规则。\n            option: {       // 第二个规则对应的option。\n                legend: {...},\n                ...\n            }\n        },\n        {                   // 这条里没有写规则,表示『默认』,\n            option: {       // 即所有规则都不满足时,采纳这个option。\n                legend: {...},\n                ...\n            }\n        }\n    ]\n};\n</code></pre>\n<p>上面的例子中,<code class=\"codespan\">baseOption</code>、以及 <code class=\"codespan\">media</code> 每个 option 都是『原子 option』,即普通的含有各组件、系列定义的 option。而由『原子option』组合成的整个 option,我们称为『复合 option』。<code class=\"codespan\">baseOption</code> 是必然被使用的,此外,满足了某个 <code class=\"codespan\">query</code> 条件时,对应的 option 会被使用 <code class=\"codespan\">chart.mergeOption()</code> 来 merge 进去。</p>\n<p><strong>query:</strong></p>\n<p>每个 <code class=\"codespan\">query</code> 类似于这样:</p>\n<pre><code class=\"lang-javascript\">{\n    minWidth: 200,\n    maxHeight: 300,\n    minAspectRatio: 1.3\n}\n</code></pre>\n<p>现在支持三个属性:<code class=\"codespan\">width</code>、<code class=\"codespan\">height</code>、<code class=\"codespan\">aspectRatio</code>(长宽比)。每个属性都可以加上 <code class=\"codespan\">min</code> 或 <code class=\"codespan\">max</code> 前缀。比如,<code class=\"codespan\">minWidth: 200</code> 表示『大于等于200px宽度』。两个属性一起写表示『并且』,比如:<code class=\"codespan\">{minWidth: 200, maxHeight: 300}</code> 表示『大于等于200px宽度,并且小于等于300px高度』。</p>\n<p><strong>option:</strong></p>\n<p><code class=\"codespan\">media</code>中的 option 既然是『原子 option』,理论上可以写任何 option 的配置项。但是一般我们只写跟布局定位相关的,例如截取上面例子中的一部分 query option:</p>\n<pre><code class=\"lang-javascript\">media: [\n    ...,\n    {\n        query: {\n            maxAspectRatio: 1           // 当长宽比小于1时。\n        },\n        option: {\n            legend: {                   // legend 放在底部中间。\n                right: &#39;center&#39;,\n                bottom: 0,\n                orient: &#39;horizontal&#39;    // legend 横向布局。\n            },\n            series: [                   // 两个饼图左右布局。\n                {\n                    radius: [20, &#39;50%&#39;],\n                    center: [&#39;50%&#39;, &#39;30%&#39;]\n                },\n                {\n                    radius: [30, &#39;50%&#39;],\n                    center: [&#39;50%&#39;, &#39;70%&#39;]\n                }\n            ]\n        }\n    },\n    {\n        query: {\n            maxWidth: 500               // 当容器宽度小于 500 时。\n        },\n        option: {\n            legend: {\n                right: 10,              // legend 放置在右侧中间。\n                top: &#39;15%&#39;,\n                orient: &#39;vertical&#39;      // 纵向布局。\n            },\n            series: [                   // 两个饼图上下布局。\n                {\n                    radius: [20, &#39;50%&#39;],\n                    center: [&#39;50%&#39;, &#39;30%&#39;]\n                },\n                {\n                    radius: [30, &#39;50%&#39;],\n                    center: [&#39;50%&#39;, &#39;75%&#39;]\n                }\n            ]\n        }\n    },\n    ...\n]\n</code></pre>\n<p><strong>多个 query 被满足时的优先级:</strong></p>\n<p>注意,可以有多个 <code class=\"codespan\">query</code> 同时被满足,会都被 <code class=\"codespan\">mergeOption</code>,定义在后的后被 merge(即优先级更高)。</p>\n<p><strong>默认 query:</strong></p>\n<p>如果 <code class=\"codespan\">media</code> 中有某项不写 <code class=\"codespan\">query</code>,则表示『默认值』,即所有规则都不满足时,采纳这个option。</p>\n<p><strong>容器大小实时变化时的注意事项:</strong></p>\n<p>在不少情况下,并不需要容器DOM节点任意随着拖拽变化大小,而是只是根据不同终端设置几个典型尺寸。</p>\n<p>但是如果容器DOM节点需要能任意随着拖拽变化大小,那么目前使用时需要注意这件事:某个配置项,如果在某一个 <code class=\"codespan\">query option</code> 中出现,那么在其他 <code class=\"codespan\">query option</code> 中也必须出现,否则不能够回归到原来的状态。(<code class=\"codespan\">left/right/top/bottom/width/height</code> 不受这个限制。)</p>\n<p><strong>『复合 option』 中的 <code class=\"codespan\">media</code> 不支持 merge</strong></p>\n<p>也就是说,当第二(或三、四、五 ...)次 <code class=\"codespan\">chart.setOption(rawOption)</code> 时,如果 <code class=\"codespan\">rawOption</code> 是 <code class=\"codespan\">复合option</code>(即包含 <code class=\"codespan\">media</code> 列表),那么新的 <code class=\"codespan\">rawOption.media</code> 列表不会和老的 <code class=\"codespan\">media</code> 列表进行 merge,而是简单替代。当然,<code class=\"codespan\">baseOption</code> 仍然会正常和老的 option 进行merge。</p>\n<p>其实,很少有场景需要使用『复合 option』来多次 <code class=\"codespan\">setOption</code>,而我们推荐的做法是,使用 mediaQuery 时,第一次setOption使用『复合 option』,后面 <code class=\"codespan\">setOption</code> 时仅使用 『原子 option』,也就是仅仅用 setOption 来改变 <code class=\"codespan\">baseOption</code>。</p>\n<p><br>\n最后看一个和时间轴结合的例子:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/bar-media-timeline&edit=1&reset=1\" width=\"750\" height=\"700\" ></iframe>\n\n\n\n\n"},"数据的视觉映射":{"type":["*"],"description":"<p>数据可视化是 <strong>数据</strong> 到 <strong>视觉元素</strong> 的映射过程(这个过程也可称为视觉编码,视觉元素也可称为视觉通道)。</p>\n<p>Apache ECharts<sup>TM</sup> 的每种图表本身就内置了这种映射过程,比如折线图把数据映射到『线』,柱状图把数据映射到『长度』。一些更复杂的图表,如 <code class=\"codespan\">graph</code>、<code class=\"codespan\">事件河流图</code>、<code class=\"codespan\">treemap</code> 也都会做出他们内置的映射。</p>\n<p>此外,ECharts 还提供了 <a href=\"option.html#visualMap\" target=\"_blank\">visualMap 组件</a> 来提供通用的视觉映射。<code class=\"codespan\">visualMap</code> 组件中可以使用的视觉元素有:<br>\n<code class=\"codespan\">图形类别(symbol)</code>、<code class=\"codespan\">图形大小(symbolSize)</code><br>\n<code class=\"codespan\">颜色(color)</code>、<code class=\"codespan\">透明度(opacity)</code>、<code class=\"codespan\">颜色透明度(colorAlpha)</code>、<br>\n<code class=\"codespan\">颜色明暗度(colorLightness)</code>、<code class=\"codespan\">颜色饱和度(colorSaturation)</code>、<code class=\"codespan\">色调(colorHue)</code></p>\n<p>下面对 <code class=\"codespan\">visualMap</code> 组件的使用方式进行简要的介绍。</p>\n<h2 id=\"-\">数据和维度</h2>\n<p>ECharts中的数据,一般存放于 <a href=\"option.html#series.data\" target=\"_blank\">series.data</a> 中。根据图表类型不同,数据的具体形式也可能有些许差异。比如可能是『线性表』、『树』、『图』等。但他们都有个共性:都是『数据项(dataItem)』的集合。每个数据项含有『数据值(value)』和其他信息(如果需要的话)。每个数据值,可以是单一的数值(一维)或者一个数组(多维)。</p>\n<p>例如,<a href=\"option.html#series.data\" target=\"_blank\">series.data</a> 最常见的形式,是『线性表』,即一个普通数组:</p>\n<pre><code class=\"lang-javascript\">series: {\n    data: [\n        {       // 这里每一个项就是数据项(dataItem)\n            value: 2323, // 这是数据项的数据值(value)\n            itemStyle: {...}\n        },\n        1212,   // 也可以直接是 dataItem 的 value,这更常见。\n        2323,   // 每个 value 都是『一维』的。\n        4343,\n        3434\n    ]\n}\n</code></pre>\n<pre><code class=\"lang-javascript\">series: {\n    data: [\n        {                        // 这里每一个项就是数据项(dataItem)\n            value: [3434, 129,  &#39;圣马力诺&#39;], // 这是数据项的数据值(value)\n            itemStyle: {...}\n        },\n        [1212, 5454, &#39;梵蒂冈&#39;],   // 也可以直接是 dataItem 的 value,这更常见。\n        [2323, 3223, &#39;瑙鲁&#39;],     // 每个 value 都是『三维』的,每列是一个维度。\n        [4343, 23,   &#39;图瓦卢&#39;]    // 假如是『气泡图』,常见第一维度映射到x轴,\n                                 // 第二维度映射到y轴,\n                                 // 第三维度映射到气泡半径(symbolSize)\n    ]\n}\n</code></pre>\n<p>在图表中,往往默认把 value 的前一两个维度进行映射,比如取第一个维度映射到x轴,取第二个维度映射到y轴。如果想要把更多的维度展现出来,可以借助 <code class=\"codespan\">visualMap</code> 。最常见的情况,<a href=\"option.html#series-scatter\" target=\"_blank\">气泡图(scatter)</a> 使用半径展现了第三个维度。</p>\n<h2 id=\"visualmap-\">visualMap 组件</h2>\n<p>visualMap 组件定义了把数据的『哪个维度』映射到『什么视觉元素上』。</p>\n<p>现在提供如下两种类型的visualMap组件,通过 <a href=\"option.html#visualMap.type\" target=\"_blank\">visualMap.type</a> 来区分。</p>\n<p>其定义结构例如:</p>\n<pre><code class=\"lang-javascript\">option = {\n    visualMap: [ // 可以同时定义多个 visualMap 组件。\n        { // 第一个 visualMap 组件\n            type: &#39;continuous&#39;, // 定义为连续型 visualMap\n            ...\n        },\n        { // 第二个 visualMap 组件\n            type: &#39;piecewise&#39;, // 定义为分段型 visualMap\n            ...\n        }\n    ],\n    ...\n};\n</code></pre>\n<p><a href=\"option.html#visualMap-continuous\" target=\"_blank\">连续型(visualMapContinuous)</a></p>\n<p><a href=\"option.html#visualMap-piecewise\" target=\"_blank\">分段型(visualMapPiecewise)</a>:</p>\n<p>分段型视觉映射组件(visualMapPiecewise),有三种模式:</p>\n<ul>\n<li>连续型数据平均分段: 依据 <a href=\"option.html#visualMap-piecewise.splitNumber\" target=\"_blank\">visualMap-piecewise.splitNumber</a> 来自动平均分割成若干块。</li>\n<li>连续型数据自定义分段: 依据 <a href=\"option.html#visualMap-piecewise.pieces\" target=\"_blank\">visualMap-piecewise.pieces</a> 来定义每块范围。</li>\n<li>离散数据(类别性数据): 类别定义在 <a href=\"option.html#visualMap-piecewise.categories\" target=\"_blank\">visualMap-piecewise.categories</a> 中。</li>\n</ul>\n<p><br>\n<strong>视觉映射方式的配置</strong></p>\n<p>既然是『数据』到『视觉元素』的映射,<code class=\"codespan\">visualMap</code> 中可以指定数据的『哪个维度』(参见<a href=\"#visualMap.dimension\">visualMap.dimension</a>)映射到哪些『视觉元素』(参见 <a href=\"option.html#visualMap.inRange\" target=\"_blank\">visualMap.inRange</a> 和 <a href=\"option.html#visualMap.outOfRange\" target=\"_blank\">visualMap.outOfRange</a>)中。</p>\n<p>例一:</p>\n<pre><code class=\"lang-javascript\">option = {\n    visualMap: [\n        {\n            type: &#39;piecewise&#39;,\n            min: 0,\n            max: 5000,\n            dimension: 3,       // series.data 的第四个维度(即 value[3])被映射\n            seriesIndex: 4,     // 对第四个系列进行映射。\n            inRange: {          // 选中范围中的视觉配置\n                color: [&#39;blue&#39;, &#39;#121122&#39;, &#39;red&#39;], // 定义了图形颜色映射的颜色列表,\n                                                    // 数据最小值映射到&#39;blue&#39;上,\n                                                    // 最大值映射到&#39;red&#39;上,\n                                                    // 其余自动线性计算。\n                symbolSize: [30, 100]               // 定义了图形尺寸的映射范围,\n                                                    // 数据最小值映射到30上,\n                                                    // 最大值映射到100上,\n                                                    // 其余自动线性计算。\n            },\n            outOfRange: {       // 选中范围外的视觉配置\n                symbolSize: [30, 100]\n            }\n        },\n        ...\n    ]\n};\n</code></pre>\n<p>例二:</p>\n<pre><code class=\"lang-javascript\">option = {\n    visualMap: [\n        {\n            ...,\n            inRange: {          // 选中范围中的视觉配置\n                colorLightness: [0.2, 1], // 映射到明暗度上。也就是对本来的颜色进行明暗度处理。\n                                          // 本来的颜色可能是从全局色板中选取的颜色,visualMap组件并不关心。\n                symbolSize: [30, 100]\n            },\n            ...\n        },\n        ...\n    ]\n};\n</code></pre>\n<p>更多详情,参见 <a href=\"option.html#visualMap.inRange\" target=\"_blank\">visualMap.inRange</a> 和 <a href=\"option.html#visualMap.outOfRange\" target=\"_blank\">visualMap.outOfRange</a>。</p>\n"},"ECharts 中的事件和行为":{"type":["*"],"description":"<p>在 Apache ECharts<sup>TM</sup> 的图表中用户的操作将会触发相应的事件。开发者可以监听这些事件,然后通过回调函数做相应的处理,比如跳转到一个地址,或者弹出对话框,或者做数据下钻等等。</p>\n<p>在 ECharts 3 中绑定事件跟 2 一样都是通过 <a href=\"api.html#EChartsInstance.on\" target=\"_blank\">on</a> 方法,但是事件名称比 2 更加简单了。ECharts 3 中,事件名称对应 DOM 事件名称,均为小写的字符串,如下是一个绑定点击操作的示例。</p>\n<pre><code class=\"lang-js\">myChart.on(&#39;click&#39;, function (params) {\n    // 控制台打印数据的名称\n    console.log(params.name);\n});\n</code></pre>\n<p>在 ECharts 中事件分为两种类型,一种是用户鼠标操作点击,或者 hover 图表的图形时触发的事件,还有一种是用户在使用可以交互的组件后触发的行为事件,例如在切换图例开关时触发的 <a href=\"api.html#events.legendselectchanged\" target=\"_blank\">&#39;legendselectchanged&#39;</a> 事件(这里需要注意切换图例开关是不会触发<code class=\"codespan\">&#39;legendselected&#39;</code>事件的),数据区域缩放时触发的 <a href=\"api.html#events.legendselectchanged\" target=\"_blank\">&#39;datazoom&#39;</a> 事件等等。</p>\n<h2 id=\"-\">鼠标事件的处理</h2>\n<p>ECharts 支持常规的鼠标事件类型,包括 <code class=\"codespan\">&#39;click&#39;</code>、<code class=\"codespan\">&#39;dblclick&#39;</code>、<code class=\"codespan\">&#39;mousedown&#39;</code>、<code class=\"codespan\">&#39;mousemove&#39;</code>、<code class=\"codespan\">&#39;mouseup&#39;</code>、<code class=\"codespan\">&#39;mouseover&#39;</code>、<code class=\"codespan\">&#39;mouseout&#39;</code>、<code class=\"codespan\">&#39;globalout&#39;</code>、<code class=\"codespan\">&#39;contextmenu&#39;</code> 事件。下面先来看一个简单的点击柱状图后打开相应的百度搜索页面的示例。</p>\n<pre><code class=\"lang-js\">// 基于准备好的dom,初始化ECharts实例\nvar myChart = echarts.init(document.getElementById(&#39;main&#39;));\n\n// 指定图表的配置项和数据\nvar option = {\n    xAxis: {\n        data: [&quot;衬衫&quot;,&quot;羊毛衫&quot;,&quot;雪纺衫&quot;,&quot;裤子&quot;,&quot;高跟鞋&quot;,&quot;袜子&quot;]\n    },\n    yAxis: {},\n    series: [{\n        name: &#39;销量&#39;,\n        type: &#39;bar&#39;,\n        data: [5, 20, 36, 10, 10, 20]\n    }]\n};\n// 使用刚指定的配置项和数据显示图表。\nmyChart.setOption(option);\n// 处理点击事件并且跳转到相应的百度搜索页面\nmyChart.on(&#39;click&#39;, function (params) {\n    window.open(&#39;https://www.baidu.com/s?wd=&#39; + encodeURIComponent(params.name));\n});\n</code></pre>\n<p>所有的鼠标事件包含参数 <code class=\"codespan\">params</code>,这是一个包含点击图形的数据信息的对象,如下格式:</p>\n<pre><code class=\"lang-js\">{\n    // 当前点击的图形元素所属的组件名称,\n    // 其值如 &#39;series&#39;、&#39;markLine&#39;、&#39;markPoint&#39;、&#39;timeLine&#39; 等。\n    componentType: string,\n    // 系列类型。值可能为:&#39;line&#39;、&#39;bar&#39;、&#39;pie&#39; 等。当 componentType 为 &#39;series&#39; 时有意义。\n    seriesType: string,\n    // 系列在传入的 option.series 中的 index。当 componentType 为 &#39;series&#39; 时有意义。\n    seriesIndex: number,\n    // 系列名称。当 componentType 为 &#39;series&#39; 时有意义。\n    seriesName: string,\n    // 数据名,类目名\n    name: string,\n    // 数据在传入的 data 数组中的 index\n    dataIndex: number,\n    // 传入的原始数据项\n    data: Object,\n    // sankey、graph 等图表同时含有 nodeData 和 edgeData 两种 data,\n    // dataType 的值会是 &#39;node&#39; 或者 &#39;edge&#39;,表示当前点击在 node 还是 edge 上。\n    // 其他大部分图表中只有一种 data,dataType 无意义。\n    dataType: string,\n    // 传入的数据值\n    value: number|Array\n    // 数据图形的颜色。当 componentType 为 &#39;series&#39; 时有意义。\n    color: string\n}\n</code></pre>\n<p>如何区分鼠标点击到了哪里:</p>\n<pre><code class=\"lang-js\">myChart.on(&#39;click&#39;, function (params) {\n    if (params.componentType === &#39;markPoint&#39;) {\n        // 点击到了 markPoint 上\n        if (params.seriesIndex === 5) {\n            // 点击到了 index 为 5 的 series 的 markPoint 上。\n        }\n    }\n    else if (params.componentType === &#39;series&#39;) {\n        if (params.seriesType === &#39;graph&#39;) {\n            if (params.dataType === &#39;edge&#39;) {\n                // 点击到了 graph 的 edge(边)上。\n            }\n            else {\n                // 点击到了 graph 的 node(节点)上。\n            }\n        }\n    }\n});\n</code></pre>\n<p>使用 <code class=\"codespan\">query</code> 只对指定的组件的图形元素的触发回调:</p>\n<pre><code class=\"lang-js\">chart.on(eventName, query, handler);\n</code></pre>\n<p><code class=\"codespan\">query</code> 可为 <code class=\"codespan\">string</code> 或者 <code class=\"codespan\">Object</code>。</p>\n<p>如果为 <code class=\"codespan\">string</code> 表示组件类型。格式可以是 &#39;mainType&#39; 或者 &#39;mainType.subType&#39;。例如:</p>\n<pre><code class=\"lang-js\">chart.on(&#39;click&#39;, &#39;series&#39;, function () {...});\nchart.on(&#39;click&#39;, &#39;series.line&#39;, function () {...});\nchart.on(&#39;click&#39;, &#39;dataZoom&#39;, function () {...});\nchart.on(&#39;click&#39;, &#39;xAxis.category&#39;, function () {...});\n</code></pre>\n<p>如果为 <code class=\"codespan\">Object</code>,可以包含以下一个或多个属性,每个属性都是可选的:</p>\n<pre><code class=\"lang-js\">{\n    &lt;mainType&gt;Index: number // 组件 index\n    &lt;mainType&gt;Name: string // 组件 name\n    &lt;mainType&gt;Id: string // 组件 id\n    dataIndex: number // 数据项 index\n    name: string // 数据项 name\n    dataType: string // 数据项 type,如关系图中的 &#39;node&#39;, &#39;edge&#39;\n    element: string // 自定义系列中的 el 的 name\n}\n</code></pre>\n<p>例如:</p>\n<pre><code class=\"lang-js\">chart.setOption({\n    // ...\n    series: [{\n        name: &#39;uuu&#39;\n        // ...\n    }]\n});\nchart.on(&#39;mouseover&#39;, {seriesName: &#39;uuu&#39;}, function () {\n    // series name 为 &#39;uuu&#39; 的系列中的图形元素被 &#39;mouseover&#39; 时,此方法被回调。\n});\n</code></pre>\n<p>例如:</p>\n<pre><code class=\"lang-js\">chart.setOption({\n    // ...\n    series: [{\n        // ...\n    }, {\n        // ...\n        data: [\n            {name: &#39;xx&#39;, value: 121},\n            {name: &#39;yy&#39;, value: 33}\n        ]\n    }]\n});\nchart.on(&#39;mouseover&#39;, {seriesIndex: 1, name: &#39;xx&#39;}, function () {\n    // series index 1 的系列中的 name 为 &#39;xx&#39; 的元素被 &#39;mouseover&#39; 时,此方法被回调。\n});\n</code></pre>\n<p>例如:</p>\n<pre><code class=\"lang-js\">chart.setOption({\n    // ...\n    series: [{\n        type: &#39;graph&#39;,\n        nodes: [{name: &#39;a&#39;, value: 10}, {name: &#39;b&#39;, value: 20}],\n        edges: [{source: 0, target: 1}]\n    }]\n});\nchart.on(&#39;click&#39;, {dataType: &#39;node&#39;}, function () {\n    // 关系图的节点被点击时此方法被回调。\n});\nchart.on(&#39;click&#39;, {dataType: &#39;edge&#39;}, function () {\n    // 关系图的边被点击时此方法被回调。\n});\n</code></pre>\n<p>例如:</p>\n<pre><code class=\"lang-js\">chart.setOption({\n    // ...\n    series: {\n        // ...\n        type: &#39;custom&#39;,\n        renderItem: function (params, api) {\n            return {\n                type: &#39;group&#39;,\n                children: [{\n                    type: &#39;circle&#39;,\n                    name: &#39;my_el&#39;,\n                    // ...\n                }, {\n                    // ...\n                }]\n            }\n        },\n        data: [[12, 33]]\n    }\n})\nchart.on(&#39;mouseup&#39;, {element: &#39;my_el&#39;}, function () {\n    // name 为 &#39;my_el&#39; 的元素被 &#39;mouseup&#39; 时,此方法被回调。\n});\n</code></pre>\n<p>你可以在回调函数中获得这个对象中的数据名、系列名称后在自己的数据仓库中索引得到其它的信息候更新图表,显示浮层等等,如下示例代码:</p>\n<pre><code class=\"lang-js\">myChart.on(&#39;click&#39;, function (parmas) {\n    $.get(&#39;detail?q=&#39; + params.name, function (detail) {\n        myChart.setOption({\n            series: [{\n                name: &#39;pie&#39;,\n                // 通过饼图表现单个柱子中的数据分布\n                data: [detail.data]\n            }]\n        });\n    });\n});\n</code></pre>\n<h2 id=\"-\">组件交互的行为事件</h2>\n<p>在 ECharts 中基本上所有的组件交互行为都会触发相应的事件,常用的事件和事件对应参数在 <a href=\"api.html#events\" target=\"_blank\">events</a> 文档中有列出。</p>\n<p>下面是监听一个图例开关的示例:</p>\n<pre><code class=\"lang-js\">// 图例开关的行为只会触发 legendselectchanged 事件\nmyChart.on(&#39;legendselectchanged&#39;, function (params) {\n    // 获取点击图例的选中状态\n    var isSelected = params.selected[params.name];\n    // 在控制台中打印\n    console.log((isSelected ? &#39;选中了&#39; : &#39;取消选中了&#39;) + &#39;图例&#39; + params.name);\n    // 打印所有图例的状态\n    console.log(params.selected);\n});\n</code></pre>\n<h2 id=\"-echarts-\">代码触发 ECharts 中组件的行为</h2>\n<p>上面提到诸如<code class=\"codespan\">&#39;legendselectchanged&#39;</code>事件会由组件交互的行为触发,那除了用户的交互操作,有时候也会有需要在程序里调用方法触发图表的行为,诸如显示 tooltip,选中图例。</p>\n<p>在 ECharts 2.x 是通过 <code class=\"codespan\">myChart.component.tooltip.showTip</code> 这种形式调用相应的接口触发图表行为,入口很深,而且涉及到内部组件的组织。相对地,在 ECharts 3 里改为通过调用 <code class=\"codespan\">myChart.dispatchAction({ type: &#39;&#39; })</code> 触发图表行为,统一管理了所有动作,也可以方便地根据需要去记录用户的行为路径。</p>\n<p>常用的动作和动作对应参数在 <a href=\"api.html#action\" target=\"_blank\">action</a> 文档中有列出。</p>\n<p>下面示例演示了如何通过<code class=\"codespan\">dispatchAction</code>去轮流高亮饼图的每个扇形。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/pie-highlight&edit=1&reset=1\" width=\"600\" height=\"400\" ></iframe>\n\n\n\n<h2 id=\"-\">监听“空白处”的事件</h2>\n<p>有时候,开发者需要监听画布的“空白处”所触发的事件。比如,当需要在用户点击“空白处”的时候重置图表时。</p>\n<p>在讨论这个功能之前,我们需要先明确两种事件。<code class=\"codespan\">zrender 事件</code>和<code class=\"codespan\">echarts 事件</code>。</p>\n<pre><code class=\"lang-js\">myChart.getZr().on(&#39;click&#39;, function (event) {\n    // 该监听器正在监听一个`zrender 事件`。\n});\nmyChart.on(&#39;click&#39;, function (event) {\n    // 该监听器正在监听一个`echarts 事件`。\n});\n</code></pre>\n<p><code class=\"codespan\">zrender 事件</code>与<code class=\"codespan\">echarts 事件</code>不同。前者是当鼠标在任何地方都会被触发,而后者是只有当鼠标在图形元素上时才能被触发。事实上,<code class=\"codespan\">echarts 事件</code> 是在 <code class=\"codespan\">zrender 事件</code> 的基础上实现的,也就是说,当一个 <code class=\"codespan\">zrender 事件</code> 在图形元素上被触发时,<code class=\"codespan\">echarts</code> 将触发一个 <code class=\"codespan\">echarts 事件</code> 给开发者。</p>\n<p>有了 <code class=\"codespan\">zrender事件</code>,我们就可以实现 “监听空白处的事件”,具体如下:</p>\n<pre><code class=\"lang-js\">myChart.getZr().on(&#39;click&#39;, function (event) {\n    // 没有 target 意味着鼠标/指针不在任何一个图形元素上,它是从“空白处”触发的。\n    if (!event.target) {\n        // 点击在了空白处,做些什么。\n    }\n});\n</code></pre>\n"},"动态排序柱状图":{"type":["*"],"description":"<p>动态排序柱状图是一种展示随时间变化的数据排名变化的图表,从 ECharts 5 开始内置支持。</p>\n<blockquote>\n<p>动态排序柱状图通常是横向的柱条,如果想要采用纵向的柱条,只要把本教程中的 X 轴和 Y 轴相反设置即可。</p>\n</blockquote>\n<ol>\n<li><code class=\"codespan\">yAxis.realtimeSort</code> 设为 <code class=\"codespan\">true</code>,表示开启 Y 轴的动态排序效果</li>\n<li><code class=\"codespan\">yAxis.inverse</code> 设为 <code class=\"codespan\">true</code>,表示 Y 轴从下往上是从小到大的排列</li>\n<li><code class=\"codespan\">yAxis.animationDuration</code> 建议设为 <code class=\"codespan\">300</code>,表示第一次柱条排序动画的时长</li>\n<li><code class=\"codespan\">yAxis.animationDurationUpdate</code> 建议设为 <code class=\"codespan\">300</code>,表示第一次后柱条排序动画的时长</li>\n<li>如果想只显示前 <em>n</em> 名,将 <code class=\"codespan\">yAxis.max</code> 设为 <em>n - 1</em>,否则显示所有柱条</li>\n<li><code class=\"codespan\">xAxis.max</code> 建议设为 <code class=\"codespan\">&#39;dataMax&#39;</code> 表示用数据的最大值作为 X 轴最大值,视觉效果更好</li>\n<li>如果想要实时改变标签,需要将 <code class=\"codespan\">series.label.valueAnimation</code> 设为 <code class=\"codespan\">true</code></li>\n<li><code class=\"codespan\">animationDuration</code> 设为 <code class=\"codespan\">0</code>,表示第一份数据不需要从 <code class=\"codespan\">0</code> 开始动画(如果希望从 <code class=\"codespan\">0</code> 开始则设为和 <code class=\"codespan\">animationDurationUpdate</code> 相同的值)</li>\n<li><code class=\"codespan\">animationDurationUpdate</code> 建议设为 <code class=\"codespan\">3000</code> 表示每次更新动画时长,这一数值应与调用 <code class=\"codespan\">setOption</code> 改变数据的频率相同</li>\n<li>以 <code class=\"codespan\">animationDurationUpdate</code> 的频率调用 <code class=\"codespan\">setInterval</code>,更新数据值,显示下一个时间点对应的柱条排序</li>\n</ol>\n<p>完整的例子如下:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=bar-race&edit=1&reset=1\" width=\"700\" height=\"300\" ></iframe>\n\n\n<p>以上的设置项比较多,如果手动设置比较繁琐,之后我们也会推出不用写代码就能实现动态排序柱状图的工具,敬请期待!</p>\n"},"小例子:自己实现拖拽":{"type":["*"],"description":"<p>介绍一个实现拖拽的小例子。这个例子是在原生 Apache ECharts<sup>TM</sup> 基础上做了些小小扩展,带有一定的交互性。通过这个例子,我们可以了解到,如何使用 ECharts 提供的 API 实现定制化的富交互的功能。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=line-draggable&edit=1&reset=1\" width=\"600\" height=\"400\" ></iframe>\n\n\n<p>这个例子主要做到了这样一件事,用鼠标可以拖拽曲线的点,从而改变曲线的形状。例子很简单,但是有了这个基础我们还可以做更多的事情,比如在图中可视化得编辑。所以我们从这个简单的例子开始。</p>\n<p>echarts 本身没有提供封装好的『拖拽改变图表』功能,因为现在认为这个功能并不足够有通用性。那么这个功能就留给开发者用 API 实现,这也有助于开发者按自己的需要个性定制。</p>\n<h2 id=\"-\">(一)实现基本的拖拽功能</h2>\n<p>在这个例子中,基础的图表是一个 <a href=\"option.html#series-line\" target=\"_blank\">折线图 (series-line)</a>。参见如下配置:</p>\n<pre><code class=\"lang-js\">var symbolSize = 20;\n\n// 这个 data 变量在这里单独声明,在后面也会用到。\nvar data = [[15, 0], [-50, 10], [-56.5, 20], [-46.5, 30], [-22.1, 40]];\n\nmyChart.setOption({\n    xAxis: {\n        min: -100,\n        max: 80,\n        type: &#39;value&#39;,\n        axisLine: {onZero: false}\n    },\n    yAxis: {\n        min: -30,\n        max: 60,\n        type: &#39;value&#39;,\n        axisLine: {onZero: false}\n    },\n    series: [\n        {\n            id: &#39;a&#39;,\n            type: &#39;line&#39;,\n            smooth: true,\n            symbolSize: symbolSize, // 为了方便拖拽,把 symbolSize 尺寸设大了。\n            data: data\n        }\n    ]\n});\n</code></pre>\n<p>既然折线中原生的点没有拖拽功能,我们就为它加上拖拽功能:用 <a href=\"option.html#graphic\" target=\"_blank\">graphic</a> 组件,在每个点上面,覆盖一个隐藏的可拖拽的圆点。</p>\n<pre><code class=\"lang-js\">myChart.setOption({\n    // 声明一个 graphic component,里面有若干个 type 为 &#39;circle&#39; 的 graphic elements。\n    // 这里使用了 echarts.util.map 这个帮助方法,其行为和 Array.prototype.map 一样,但是兼容 es5 以下的环境。\n    // 用 map 方法遍历 data 的每项,为每项生成一个圆点。\n    graphic: echarts.util.map(data, function (dataItem, dataIndex) {\n        return {\n            // &#39;circle&#39; 表示这个 graphic element 的类型是圆点。\n            type: &#39;circle&#39;,\n\n            shape: {\n                // 圆点的半径。\n                r: symbolSize / 2\n            },\n            // 用 transform 的方式对圆点进行定位。position: [x, y] 表示将圆点平移到 [x, y] 位置。\n            // 这里使用了 convertToPixel 这个 API 来得到每个圆点的位置,下面介绍。\n            position: myChart.convertToPixel(&#39;grid&#39;, dataItem),\n\n            // 这个属性让圆点不可见(但是不影响他响应鼠标事件)。\n            invisible: true,\n            // 这个属性让圆点可以被拖拽。\n            draggable: true,\n            // 把 z 值设得比较大,表示这个圆点在最上方,能覆盖住已有的折线图的圆点。\n            z: 100,\n            // 此圆点的拖拽的响应事件,在拖拽过程中会不断被触发。下面介绍详情。\n            // 这里使用了 echarts.util.curry 这个帮助方法,意思是生成一个与 onPointDragging\n            // 功能一样的新的函数,只不过第一个参数永远为此时传入的 dataIndex 的值。\n            ondrag: echarts.util.curry(onPointDragging, dataIndex)\n        };\n    })\n});\n</code></pre>\n<p>上面的代码中,使用 <a href=\"api.html#echartsInstance.convertToPixel\" target=\"_blank\">convertToPixel</a> 这个 API,进行了从 data 到『像素坐标』的转换,从而得到了每个圆点应该在的位置,从而能绘制这些圆点。<code class=\"codespan\">myChart.convertToPixel(&#39;grid&#39;, dataItem)</code> 这句话中,第一个参数 <code class=\"codespan\">&#39;grid&#39;</code> 表示 <code class=\"codespan\">dataItem</code> 在 <a href=\"option.html#grid\" target=\"_blank\">grid</a> 这个组件中(即直角坐标系)中进行转换。所谓『像素坐标』,就是以 echarts 容器 dom element 的左上角为零点的以像素为单位的坐标系中的坐标。</p>\n<p>注意这件事需要在第一次 setOption 后再进行,也就是说,须在坐标系(<a href=\"option.html#grid\" target=\"_blank\">grid</a>)初始化后才能调用 <code class=\"codespan\">myChart.convertToPixel(&#39;grid&#39;, dataItem)</code>。</p>\n<p>有了这段代码后,就有了诸个能拖拽的点。接下来要为每个点,加上拖拽响应的事件:</p>\n<pre><code class=\"lang-js\">// 拖拽某个圆点的过程中会不断调用此函数。\n// 此函数中会根据拖拽后的新位置,改变 data 中的值,并用新的 data 值,重绘折线图,从而使折线图同步于被拖拽的隐藏圆点。\nfunction onPointDragging(dataIndex) {\n    // 这里的 data 就是本文最初的代码块中声明的 data,在这里会被更新。\n    // 这里的 this 就是被拖拽的圆点。this.position 就是圆点当前的位置。\n    data[dataIndex] = myChart.convertFromPixel(&#39;grid&#39;, this.position);\n    // 用更新后的 data,重绘折线图。\n    myChart.setOption({\n        series: [{\n            id: &#39;a&#39;,\n            data: data\n        }]\n    });\n}\n</code></pre>\n<p>上面的代码中,使用了 <a href=\"api.html#echartsInstance.convertFromPixel\" target=\"_blank\">convertFromPixel</a> 这个 API。它是 <a href=\"api.html#echartsInstance.convertToPixel\" target=\"_blank\">convertToPixel</a> 的逆向过程。<code class=\"codespan\">myChart.convertFromPixel(&#39;grid&#39;, this.position)</code> 表示把当前像素坐标转换成 <a href=\"option.html#grid\" target=\"_blank\">grid</a> 组件中直角坐标系的 dataItem 值。</p>\n<p>最后,为了使 dom 尺寸改变时,图中的元素能自适应得变化,加上这些代码:</p>\n<pre><code class=\"lang-js\">window.addEventListener(&#39;resize&#39;, function () {\n    // 对每个拖拽圆点重新计算位置,并用 setOption 更新。\n    myChart.setOption({\n        graphic: echarts.util.map(data, function (item, dataIndex) {\n            return {\n                position: myChart.convertToPixel(&#39;grid&#39;, item)\n            };\n        })\n    });\n});\n\n</code></pre>\n<h2 id=\"-tooltip-\">(二)添加 tooltip 组件</h2>\n<p>到此,拖拽的基本功能就完成了。但是想要更进一步得实时看到拖拽过程中,被拖拽的点的 data 值的变化状况,我们可以使用 <a href=\"option.html#tooltip\" target=\"_blank\">tooltip</a> 组件来实时显示这个值。但是,tooltip 有其默认的『显示』『隐藏』触发规则,在我们拖拽的场景中并不适用,所以我们还要手动定制 tooltip 的『显示』『隐藏』行为。</p>\n<p>在上述代码中分别添加如下定义:</p>\n<pre><code class=\"lang-js\">myChart.setOption({\n    ...,\n    tooltip: {\n        // 表示不使用默认的『显示』『隐藏』触发规则。\n        triggerOn: &#39;none&#39;,\n        formatter: function (params) {\n            return &#39;X: &#39; + params.data[0].toFixed(2) + &#39;&lt;br&gt;Y: &#39; + params.data[1].toFixed(2);\n        }\n    }\n});\n</code></pre>\n<pre><code class=\"lang-js\">myChart.setOption({\n    graphic: echarts.util.map(data, function (item, dataIndex) {\n        return {\n            type: &#39;circle&#39;,\n            ...,\n            // 在 mouseover 的时候显示,在 mouseout 的时候隐藏。\n            onmousemove: echarts.util.curry(showTooltip, dataIndex),\n            onmouseout: echarts.util.curry(hideTooltip, dataIndex),\n        };\n    })\n});\n\nfunction showTooltip(dataIndex) {\n    myChart.dispatchAction({\n        type: &#39;showTip&#39;,\n        seriesIndex: 0,\n        dataIndex: dataIndex\n    });\n}\n\nfunction hideTooltip(dataIndex) {\n    myChart.dispatchAction({\n        type: &#39;hideTip&#39;\n    });\n}\n</code></pre>\n<p>这里使用了 <a href=\"api.html#echartsInstance.dispatchAction\" target=\"_blank\">dispatchAction</a> 来显示隐藏 tooltip。用到了 <a href=\"api.html#action.tooltip.showTip\" target=\"_blank\">showTip</a>、<a href=\"api.html#action.tooltip.hideTip\" target=\"_blank\">hideTip</a>。</p>\n<h2 id=\"-\">(三)全部代码</h2>\n<p>总结一下,全部的代码如下:</p>\n<pre><code>&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n    &lt;meta charset=&quot;utf-8&quot;&gt;\n    &lt;script src=&quot;dist/echarts.min.js&quot;&gt;&lt;/script&gt;\n&lt;/head&gt;\n&lt;body&gt;\n    &lt;div id=&quot;main&quot; style=&quot;width: 600px;height:400px;&quot;&gt;&lt;/div&gt;\n    &lt;script type=&quot;text/javascript&quot;&gt;\n\n    var symbolSize = 20;\n    var data = [[15, 0], [-50, 10], [-56.5, 20], [-46.5, 30], [-22.1, 40]];\n\n    var myChart = echarts.init(document.getElementById(&#39;main&#39;));\n\n    myChart.setOption({\n        tooltip: {\n            triggerOn: &#39;none&#39;,\n            formatter: function (params) {\n                return &#39;X: &#39; + params.data[0].toFixed(2) + &#39;&lt;br&gt;Y: &#39; + params.data[1].toFixed(2);\n            }\n        },\n        xAxis: {\n            min: -100,\n            max: 80,\n            type: &#39;value&#39;,\n            axisLine: {onZero: false}\n        },\n        yAxis: {\n            min: -30,\n            max: 60,\n            type: &#39;value&#39;,\n            axisLine: {onZero: false}\n        },\n        series: [\n            {\n                id: &#39;a&#39;,\n                type: &#39;line&#39;,\n                smooth: true,\n                symbolSize: symbolSize,\n                data: data\n            }\n        ],\n    });\n\n    myChart.setOption({\n        graphic: echarts.util.map(data, function (item, dataIndex) {\n            return {\n                type: &#39;circle&#39;,\n                position: myChart.convertToPixel(&#39;grid&#39;, item),\n                shape: {\n                    r: symbolSize / 2\n                },\n                invisible: true,\n                draggable: true,\n                ondrag: echarts.util.curry(onPointDragging, dataIndex),\n                onmousemove: echarts.util.curry(showTooltip, dataIndex),\n                onmouseout: echarts.util.curry(hideTooltip, dataIndex),\n                z: 100\n            };\n        })\n    });\n\n    window.addEventListener(&#39;resize&#39;, function () {\n        myChart.setOption({\n            graphic: echarts.util.map(data, function (item, dataIndex) {\n                return {\n                    position: myChart.convertToPixel(&#39;grid&#39;, item)\n                };\n            })\n        });\n    });\n\n    function showTooltip(dataIndex) {\n        myChart.dispatchAction({\n            type: &#39;showTip&#39;,\n            seriesIndex: 0,\n            dataIndex: dataIndex\n        });\n    }\n\n    function hideTooltip(dataIndex) {\n        myChart.dispatchAction({\n            type: &#39;hideTip&#39;\n        });\n    }\n\n    function onPointDragging(dataIndex, dx, dy) {\n        data[dataIndex] = myChart.convertFromPixel(&#39;grid&#39;, this.position);\n        myChart.setOption({\n            series: [{\n                id: &#39;a&#39;,\n                data: data\n            }]\n        });\n    }\n\n&lt;/script&gt;\n&lt;/body&gt;\n&lt;/html&gt;\n</code></pre><p><br></p>\n<p>有了这些基础,就可以定制更多的功能了。可以加 <a href=\"option.html#dataZoom\" target=\"_blank\">dataZoom</a> 组件,可以制作一个直角坐标系上的绘图板等等。可以发挥想象力。</p>\n"},"小例子:实现日历图":{"type":["*"],"description":"<p>在 Apache ECharts<sup>TM</sup> 中,我们新增了日历坐标系,如何快速写出一个日历图呢?</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=calendar-simple&edit=1&reset=1\" width=\"800\" height=\"300\" ></iframe>\n\n\n<p>通过以下三个步骤即可实现上述效果:</p>\n<h2 id=\"-js-\">第一步:引入js文件</h2>\n<p>下载的最新完整版本 echarts.min.js 即可,无需再单独引入其他文件哦</p>\n<pre><code class=\"lang-html\">&lt;script src=&quot;echarts.min.js&quot;&gt;&lt;/script&gt;\n&lt;script&gt;\n    // ...\n&lt;/script&gt;\n</code></pre>\n<h2 id=\"-dom-\">第二步:指定DOM元素作为图表容器</h2>\n<p>和ECharts中的其他图表一样,创建一个DOM来作为绘制图表的容器</p>\n<pre><code class=\"lang-html\">&lt;div id=&quot;main&quot; style=&quot;width=100%; height = 400px&quot;&gt;&lt;/div&gt;\n</code></pre>\n<p>使用ECharts进行初始化</p>\n<pre><code class=\"lang-js\">var myChart = echarts.init(document.getElementById(&#39;main&#39;));\n</code></pre>\n<h2 id=\"-\">第三步:配置参数</h2>\n<p>以常见的日历图为例: calendar坐标 + heatmap图</p>\n<pre><code class=\"lang-js\">var option = {\n    visualMap: {\n        show: false\n        min: 0,\n        max: 1000\n    },\n    calendar: {\n        range: &#39;2017&#39;\n    },\n    series: {\n        type: &#39;heatmap&#39;,\n        coordinateSystem: &#39;calendar&#39;,\n        data: [[&#39;2017-01-02&#39;, 900], [&#39;2017-01-02&#39;, 877], [&#39;2017-01-02&#39;, 699], ...]\n    }\n}\nmyChart.setOption(option);\n</code></pre>\n<p>在heatmap图的基础上,加上<code class=\"codespan\">coordinateSystem: &#39;calendar&#39;,</code>和<code class=\"codespan\">calendar: { range: &#39;2017&#39; }</code>heatmap图就秒变为日历图了。</p>\n<blockquote>\n<p>若发现图表没有正确显示,你可以检查以下几种可能:</p>\n<ul>\n<li>JS文件是否正确加载;</li>\n<li><code class=\"codespan\">echarts</code> 变量是否存在;</li>\n<li>控制台是否报错;</li>\n<li>DOM 元素在 <code class=\"codespan\">echarts.init</code> 的时候是否有高度和宽度。</li>\n<li>若为 <code class=\"codespan\">type: heatmap</code>,检查是否配置了 <code class=\"codespan\">visualMap</code>。</li>\n</ul>\n</blockquote>\n<p><strong>附完整示例代码</strong></p>\n<pre><code class=\"lang-html\">&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n    &lt;meta charset=&quot;utf-8&quot;&gt;\n    &lt;title&gt;ECharts&lt;/title&gt;\n    &lt;script src=&quot;echarts.min.js&quot;&gt;&lt;/script&gt;\n&lt;/head&gt;\n&lt;body&gt;\n    &lt;div id=&quot;main&quot; style=&quot;width:100%;height:400px;&quot;&gt;&lt;/div&gt;\n    &lt;script type=&quot;text/javascript&quot;&gt;\n        var myChart = echarts.init(document.getElementById(&#39;main&#39;));\n\n        // 模拟数据\n        function getVirtulData(year) {\n            year = year || &#39;2017&#39;;\n            var date = +echarts.number.parseDate(year + &#39;-01-01&#39;);\n            var end = +echarts.number.parseDate(year + &#39;-12-31&#39;);\n            var dayTime = 3600 * 24 * 1000;\n            var data = [];\n            for (var time = date; time &lt;= end; time += dayTime) {\n                data.push([\n                    echarts.format.formatTime(&#39;yyyy-MM-dd&#39;, time),\n                    Math.floor(Math.random() * 10000)\n                ]);\n            }\n            return data;\n        }\n        var option = {\n            visualMap: {\n                show: false,\n                min: 0,\n                max: 10000\n            },\n            calendar: {\n                range: &#39;2017&#39;\n            },\n            series: {\n                type: &#39;heatmap&#39;,\n                coordinateSystem: &#39;calendar&#39;,\n                data: getVirtulData(2017)\n            }\n        };\n        myChart.setOption(option);\n    &lt;/script&gt;\n&lt;/body&gt;\n&lt;/html&gt;\n\n</code></pre>\n<p>以上就是绘制最简日历图的步骤了,如若还想进一步私人定制,还可以通过自定义配置参数来实现</p>\n<h2 id=\"-\">自定义配置参数</h2>\n<p>使用日历坐标绘制日历图时,支持自定义各项属性:</p>\n<ul>\n<li><p><a href=\"option.html#calendar.range\" target=\"_blank\">range</a>: <code class=\"codespan\">设置时间的范围,可支持某年、某月、某天,还可支持跨年</code></p>\n</li>\n<li><p><a href=\"option.html#calendar.cellSize\" target=\"_blank\">cellSize</a>: <code class=\"codespan\">设置日历格的大小,可支持设置不同高宽,还可支持自适应auto</code></p>\n</li>\n<li><p><a href=\"option.html#calendar.width\" target=\"_blank\">width</a>、<a href=\"http://xxx\" target=\"_blank\">height</a>: <code class=\"codespan\">也可以直接设置改日历图的整体高宽,让其基于已有的高宽全部自适应</code></p>\n</li>\n<li><p><a href=\"option.html#calendar.orient\" target=\"_blank\">orient</a>: <code class=\"codespan\">设置坐标的方向,既可以横着也可以竖着</code></p>\n</li>\n<li><p><a href=\"option.html#calendar.splitLine\" target=\"_blank\">splitLine</a>: <code class=\"codespan\">设置分隔线样式,也可以直接不显示</code></p>\n</li>\n<li><p><a href=\"option.html#calendar.itemStyle\" target=\"_blank\">itemStyle</a>: <code class=\"codespan\">设置日历格的样式,背景色、方框线颜色大小类型、透明度均可自定义,甚至还能加阴影</code></p>\n</li>\n<li><p><a href=\"option.html#calendar.dayLabel\" target=\"_blank\">dayLabel</a>: <code class=\"codespan\">设置坐标中 星期样式,可以设置星期从第几天开始,快捷设置中英文、甚至是自定义中英文混搭、或局部不显示、通过formatter 可以想怎么显示就怎么显示;</code></p>\n</li>\n<li><p><a href=\"option.html#calendar.monthLabel\" target=\"_blank\">monthLabel</a>: <code class=\"codespan\">设置坐标中 月样式,和星期一样,可快捷设置中英文和自定义混搭</code></p>\n</li>\n<li><p><a href=\"option.html#calendar.yearLabel\" target=\"_blank\">yearLabel</a>: <code class=\"codespan\">设置坐标中 年样式,默认显示一年,通过formatter 文字可以想显示什么就能通过string function任性自定义,上下左右方位随便选;</code></p>\n</li>\n</ul>\n<p>完整的配置项参数参见:<a href=\"option.html#calendar\" target=\"_blank\">calendar API</a></p>\n<h2 id=\"-\">日历坐标系的其他形式</h2>\n<p>日历坐标系是一种新的 <code class=\"codespan\">ECharts</code> 坐标系,提供了在日历上绘制图表的能力; 所以除了制作常用的日历图外,我们可以在热力图、散点图、关系图中使用日历坐标系。</p>\n<p>在日历坐标系中使用热力图:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=calendar-heatmap&edit=1&reset=1\" width=\"800\" height=\"300\" ></iframe>\n\n\n<p>在日历坐标系中使用散点图:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=calendar-effectscatter&edit=1&reset=1\" width=\"800\" height=\"600\" ></iframe>\n\n\n<p>还可以混合放置不同的图表,例如下例子,同时放置了热力图和关系图:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=calendar-graph&edit=1&reset=1\" width=\"800\" height=\"600\" ></iframe>\n\n\n<p><strong>其他更丰富的效果</strong></p>\n<p>灵活利用 <code class=\"codespan\">ECharts</code> 图表和坐标系的组合,以及 API,还可以实现更丰富的效果。</p>\n<p>例如,制作农历:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=calendar-lunar&edit=1&reset=1\" width=\"600\" height=\"500\" ></iframe>\n\n\n<p>例如,使用 <code class=\"codespan\">chart.convertToPixel</code> 接口,在日历坐标系绘制饼图。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=calendar-pie&edit=1&reset=1\" width=\"800\" height=\"640\" ></iframe>\n\n\n\n\n\n\n\n"},"旭日图":{"type":["*"],"description":"<p><a href=\"https://en.wikipedia.org/wiki/Pie_chart#Ring_chart_/_Sunburst_chart_/_Multilevel_pie_chart\" target=\"_blank\">旭日图(Sunburst)</a>由多层的环形图组成,在数据结构上,内圈是外圈的父节点。因此,它既能像<a href=\"option.html#series-pie\" target=\"_blank\">饼图</a>一样表现局部和整体的占比,又能像<a href=\"option.html#series-treemap\" target=\"_blank\">矩形树图</a>一样表现层级关系。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=sunburst-monochrome&edit=1&reset=1\" width=\"700\" height=\"500\" ></iframe>\n\n\n<h2 id=\"-\">引入相关文件</h2>\n<p>旭日图是 Apache ECharts<sup>TM</sup> 4.0 新增的图表类型,从 <a href=\"https://www.jsdelivr.com/package/npm/echarts\" target=\"_blank\">CDN</a> 引入完整版的 <a href=\"https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js\" target=\"_blank\">echarts.min.js</a></p>\n<h2 id=\"-\">最简单的旭日图</h2>\n<p>创建旭日图需要在 <code class=\"codespan\">series</code> 配置项中声明类型为 <code class=\"codespan\">&#39;sunburst&#39;</code> 的系列,并且以树形结构声明其 <code class=\"codespan\">data</code>:</p>\n<pre><code class=\"lang-js\">var option = {\n    series: {\n        type: &#39;sunburst&#39;,\n        data: [{\n            name: &#39;A&#39;,\n            value: 10,\n            children: [{\n                value: 3,\n                name: &#39;Aa&#39;\n            }, {\n                value: 5,\n                name: &#39;Ab&#39;\n            }]\n        }, {\n            name: &#39;B&#39;,\n            children: [{\n                name: &#39;Ba&#39;,\n                value: 4\n            }, {\n                name: &#39;Bb&#39;,\n                value: 2\n            }]\n        }, {\n            name: &#39;C&#39;,\n            value: 3\n        }]\n    }\n};\n</code></pre>\n<p>得到以下结果:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/sunburst-simple&edit=1&reset=1\" width=\"700\" height=\"400\" ></iframe>\n\n\n<h2 id=\"-\">颜色等样式调整</h2>\n<p>默认情况下会使用全局调色盘 <a href=\"option.html#color\" target=\"_blank\">color</a> 分配最内层的颜色,其余层则与其父元素同色。在旭日图中,扇形块的颜色有以下三种设置方式:</p>\n<ul>\n<li>在 <a href=\"option.html#series-sunburst.data.itemStyle\" target=\"_blank\">series.data.itemStyle</a> 中设置每个扇形块的样式;</li>\n<li>在 <a href=\"option.html#series-sunburst.levels.itemStyle\" target=\"_blank\">series.levels.itemStyle</a> 中设置每一层的样式;</li>\n<li>在 <a href=\"option.html#series-sunburst.itemStyle\" target=\"_blank\">series.itemStyle</a> 中设置整个旭日图的样式。</li>\n</ul>\n<p>上述三者的优先级是从高到低的,也就是说,配置了 <code class=\"codespan\">series.data.itemStyle</code> 的扇形块将会覆盖 <code class=\"codespan\">series.levels.itemStyle</code> 和 <code class=\"codespan\">series.itemStyle</code> 的设置。</p>\n<p>下面,我们将整体的颜色设为灰色 <code class=\"codespan\">&#39;#aaa&#39;</code>,将最内层的颜色设为蓝色 <code class=\"codespan\">&#39;blue&#39;</code>,将 <code class=\"codespan\">Aa</code>、<code class=\"codespan\">B</code> 这两块设为红色 <code class=\"codespan\">&#39;red&#39;</code>。</p>\n<pre><code class=\"lang-js\">var option = {\n    series: {\n        type: &#39;sunburst&#39;,\n        data: [{\n            name: &#39;A&#39;,\n            value: 10,\n            children: [{\n                value: 3,\n                name: &#39;Aa&#39;,\n                itemStyle: {\n                    color: &#39;red&#39;\n                }\n            }, {\n                value: 5,\n                name: &#39;Ab&#39;\n            }]\n        }, {\n            name: &#39;B&#39;,\n            children: [{\n                name: &#39;Ba&#39;,\n                value: 4\n            }, {\n                name: &#39;Bb&#39;,\n                value: 2\n            }],\n            itemStyle: {\n                color: &#39;red&#39;\n            }\n        }, {\n            name: &#39;C&#39;,\n            value: 3\n        }],\n        itemStyle: {\n            color: &#39;#aaa&#39;\n        },\n        levels: [{\n            // 留给数据下钻的节点属性\n        }, {\n            itemStyle: {\n                color: &#39;blue&#39;\n            }\n        }]\n    }\n};\n</code></pre>\n<p>效果为:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/sunburst-color&edit=1&reset=1\" width=\"700\" height=\"300\" ></iframe>\n\n\n\n<h2 id=\"-\">按层配置样式</h2>\n<p>旭日图是一种有层次的结构,为了方便同一层样式的配置,我们提供了 <a href=\"option.html#series-sunburst.levels\" target=\"_blank\">levels</a> 配置项。它是一个数组,其中的第 0 项表示数据下钻后返回上级的图形,其后的每一项分别表示从圆心向外层的层级。</p>\n<p>例如,假设我们没有数据下钻功能,并且希望将最内层的扇形块的颜色设为红色,文字设为蓝色,可以这样设置:</p>\n<pre><code class=\"lang-js\">series: {\n    // ...\n    levels: [\n        {\n            // 留给数据下钻点的空白配置\n        },\n        {\n            // 最靠内测的第一层\n            itemStyle: {\n                color: &#39;red&#39;\n            },\n            label: {\n                color: &#39;blue&#39;\n            }\n        },\n        {\n            // 第二层 ...\n        }\n    ]\n}\n</code></pre>\n<p>在实际使用的过程中,你会发现按层配置样式是一个很常用的功能,能够很大程度上提高配置的效率。</p>\n<h2 id=\"-\">数据下钻</h2>\n<p>旭日图默认支持数据下钻,也就是说,当点击了扇形块之后,将以该扇形块的数据作为根节点,便于进一步了解该数据的细节。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=sunburst-simple&edit=1&reset=1\" width=\"700\" height=\"500\" ></iframe>\n\n\n<p>当数据下钻后,中间会出现一个用于返回上一层的图形,该图形的样式可以通过 <a href=\"option.html#series-sunburst.levels\" target=\"_blank\">levels[0]</a> 配置。</p>\n<p>如果不需要数据下钻功能,可以通过将 <a href=\"option.html#series-sunburst.nodeClick\" target=\"_blank\">nodeClick</a> 设置为 <code class=\"codespan\">false</code> 关闭;或者将其设为 <code class=\"codespan\">&#39;link&#39;</code>,并将 <a href=\"option.html#series-sunburst.data.link\" target=\"_blank\">data.link</a> 设为点击扇形块对应打开的链接。</p>\n<h2 id=\"-\">高亮相关扇形块</h2>\n<p>旭日图支持鼠标移动到某扇形块时,高亮相关数据块的操作,可以通过设置 <a href=\"option.html#series-sunburst.highlightPolicy\" target=\"_blank\">highlightPolicy</a>,包括以下几种高亮方式:</p>\n<ul>\n<li><code class=\"codespan\">&#39;descendant&#39;</code>(默认值):高亮鼠标移动所在扇形块与其后代元素;</li>\n<li><code class=\"codespan\">&#39;ancestor&#39;</code>:高亮鼠标所在扇形块与其祖先元素;</li>\n<li><code class=\"codespan\">&#39;self&#39;</code>:仅高亮鼠标所在扇形块;</li>\n<li><code class=\"codespan\">&#39;none&#39;</code>:不会淡化(downplay)其他元素。</li>\n</ul>\n<p>上面提到的“高亮”,对于鼠标所在的扇形块,会使用 <code class=\"codespan\">emphasis</code> 样式;对于其他相关扇形块,则会使用 <code class=\"codespan\">highlight</code> 样式。通过这种方式,可以很方便地实现突出显示相关数据的需求。</p>\n<p>具体来说,对于配置项:</p>\n<pre><code class=\"lang-js\">itemStyle: {\n    color: &#39;yellow&#39;,\n    borderWidth: 2,\n    emphasis: {\n        color: &#39;red&#39;\n    },\n    highlight: {\n        color: &#39;orange&#39;\n    },\n    downplay: {\n        color: &#39;#ccc&#39;\n    }\n}\n</code></pre>\n<p><code class=\"codespan\">highlightPolicy</code> 为 <code class=\"codespan\">&#39;descendant&#39;</code> 或 <code class=\"codespan\">&#39;ancestor&#39;</code> 的效果分别为:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/sunburst-highlight-descendant&edit=1&reset=1\" width=\"700\" height=\"350\" ></iframe>\n\n\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/sunburst-highlight-ancestor&edit=1&reset=1\" width=\"700\" height=\"350\" ></iframe>\n\n\n<h2 id=\"-\">总结</h2>\n<p>上面的教程主要讲述的是如何入门使用旭日图,感兴趣的用户可以在 <a href=\"option.html#series-sunburst\" target=\"_blank\">配置项手册</a> 查看更完整的文档。在灵活应用这些配置项之后,就能做出丰富多彩的旭日图了!</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=sunburst-book&edit=1&reset=1\" width=\"700\" height=\"600\" ></iframe>\n\n\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=sunburst-drink&edit=1&reset=1\" width=\"700\" height=\"600\" ></iframe>\n\n\n\n\n\n\n\n\n\n"},"自定义系列":{"type":["*"],"description":"<p><a href=\"option.html#series-custom\" target=\"_blank\">自定义系列(custom series)</a>,是一种系列的类型。它把绘制图形元素这一步留给开发者去做,从而开发者能在坐标系中自由绘制出自己需要的图表。</p>\n<p>Apache ECharts<sup>TM</sup> 为什么会要支持 <code class=\"codespan\">自定义系列</code> 呢?</p>\n<p>ECharts 内置支持的图表类型是最常见的图表类型,但是图表类型是难于穷举的,有很多小众的需求 echarts 并不能内置的支持。那么就需要提供一种方式来让开发者自己扩展。另一方面,所提供的扩展方式要尽可能得简单,例如图形元素创建和释放、过渡动画、tooltip、<a href=\"option.html#dataZoom\" target=\"_blank\">数据区域缩放(dataZoom)</a>、<a href=\"option.html#visualMap\" target=\"_blank\">视觉映射(visualMap)</a>等功能,尽量在 ECharts 中内置得处理,使开发者不必纠结于这些细节。综上考虑形成了 <a href=\"option.html#series-custom\" target=\"_blank\">自定义系列(custom series)</a>。</p>\n<p><strong>例如,下面的例子使用 custom series 扩展出了 x-range 图:</strong></p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=custom-profile&reset=1&edit=1\" width=\"800\" height=\"500\" ></iframe>\n\n\n<p><strong>更多的例子参见:<a href=\"https://echarts.apache.org/examples/zh/index.html#chart-type-custom\" target=\"_blank\">custom examples</a></strong></p>\n<p>下面来介绍开发者怎么使用 <a href=\"option.html#series-custom\" target=\"_blank\">自定义系列(custom series)</a>。</p>\n<h2 id=\"-renderitem-\">(一)renderItem 方法</h2>\n<p>开发者自定义的图形元素渲染逻辑,是通过书写 <code class=\"codespan\">renderItem</code> 函数实现的,例如:</p>\n<pre><code class=\"lang-js\">var option = {\n    ...,\n    series: [{\n        type: &#39;custom&#39;,\n        renderItem: function (params, api) {\n            // ...\n        },\n        data: data\n    }]\n}\n</code></pre>\n<p>在渲染阶段,对于 <a href=\"option.html#series-custom.data\" target=\"_blank\">series.data</a> 中的每个数据项(为方便描述,这里称为 <code class=\"codespan\">dataItem</code>),会调用此 <a href=\"option.html#series-custom.renderItem\" target=\"_blank\">renderItem</a> 函数。这个 <code class=\"codespan\">renderItem</code> 函数的职责,就是返回一个(或者一组)<code class=\"codespan\">图形元素定义</code>,<code class=\"codespan\">图形元素定义</code> 中包括图形元素的类型、位置、尺寸、样式等。echarts 会根据这些 <code class=\"codespan\">图形元素定义</code> 来渲染出图形元素。如下的示意:</p>\n<pre><code class=\"lang-js\">var option = {\n    ...,\n    series: [{\n        type: &#39;custom&#39;,\n        renderItem: function (params, api) {\n            // 对于 data 中的每个 dataItem,都会调用这个 renderItem 函数。\n            // (但是注意,并不一定是按照 data 的顺序调用)\n\n            // 这里进行一些处理,例如,坐标转换。\n            // 这里使用 api.value(0) 取出当前 dataItem 中第一个维度的数值。\n            var categoryIndex = api.value(0);\n            // 这里使用 api.coord(...) 将数值在当前坐标系中转换成为屏幕上的点的像素值。\n            var startPoint = api.coord([api.value(1), categoryIndex]);\n            var endPoint = api.coord([api.value(2), categoryIndex]);\n            // 这里使用 api.size(...) 获得 Y 轴上数值范围为 1 的一段所对应的像素长度。\n            var height = api.size([0, 1])[1] * 0.6;\n\n            // shape 属性描述了这个矩形的像素位置和大小。\n            // 其中特殊得用到了 echarts.graphic.clipRectByRect,意思是,\n            // 如果矩形超出了当前坐标系的包围盒,则剪裁这个矩形。\n            // 如果矩形完全被剪掉,会返回 undefined.\n            var rectShape = echarts.graphic.clipRectByRect({\n                // 矩形的位置和大小。\n                x: startPoint[0],\n                y: startPoint[1] - height / 2,\n                width: endPoint[0] - startPoint[0],\n                height: height\n            }, {\n                // 当前坐标系的包围盒。\n                x: params.coordSys.x,\n                y: params.coordSys.y,\n                width: params.coordSys.width,\n                height: params.coordSys.height\n            });\n\n            // 这里返回为这个 dataItem 构建的图形元素定义。\n            return rectShape &amp;&amp; {\n                // 表示这个图形元素是矩形。还可以是 &#39;circle&#39;, &#39;sector&#39;, &#39;polygon&#39; 等等。\n                type: &#39;rect&#39;,\n                shape: rectShape,\n                // 用 api.style(...) 得到默认的样式设置。这个样式设置包含了\n                // option 中 itemStyle 的配置和视觉映射得到的颜色。\n                style: api.style()\n            };\n        },\n        data: [\n            [12, 44, 55, 60], // 这是第一个 dataItem\n            [53, 31, 21, 56], // 这是第二个 dataItem\n            [71, 33, 10, 20], // 这是第三个 dataItem\n            ...\n        ]\n    }]\n}\n</code></pre>\n<p><a href=\"option.html#series-custom.renderItem\" target=\"_blank\">renderItem</a> 函数提供了两个参数:</p>\n<ul>\n<li><a href=\"option.html#series-custom.renderItem.arguments.params\" target=\"_blank\">params</a>:包含了当前数据信息(如 <code class=\"codespan\">seriesIndex</code>、<code class=\"codespan\">dataIndex</code> 等等)和坐标系的信息(如坐标系包围盒的位置和尺寸)。</li>\n<li><a href=\"option.html#series-custom.renderItem.arguments.api\" target=\"_blank\">api</a>:是一些开发者可调用的方法集合(如 <code class=\"codespan\">api.value()</code>、<code class=\"codespan\">api.coord()</code>)。</li>\n</ul>\n<p><a href=\"option.html#series-custom.renderItem\" target=\"_blank\">renderItem</a> 函数须返回根据此 <code class=\"codespan\">dataItem</code> 绘制出的图形元素的定义信息,参见 <a href=\"option.html#series-custom.renderItem.return\" target=\"_blank\">renderItem.return</a>。</p>\n<p>一般来说,<a href=\"option.html#series-custom.renderItem\" target=\"_blank\">renderItem</a> 函数的主要逻辑,是将 <code class=\"codespan\">dataItem</code> 里的值映射到坐标系上的图形元素。这一般需要用到 <a href=\"option.html#series-custom.renderItem.arguments.api\" target=\"_blank\">renderItem.arguments.api</a> 中的两个函数:</p>\n<ul>\n<li><a href=\"option.html#series-custom.renderItem.arguments.api.value\" target=\"_blank\">api.value(...)</a>,意思是取出 <code class=\"codespan\">dataItem</code> 中的数值。例如 <code class=\"codespan\">api.value(0)</code> 表示取出当前 <code class=\"codespan\">dataItem</code> 中第一个维度的数值。</li>\n<li><a href=\"option.html#series-custom.renderItem.arguments.api.coord\" target=\"_blank\">api.coord(...)</a>,意思是进行坐标转换计算。例如 <code class=\"codespan\">var point = api.coord([api.value(0), api.value(1)])</code> 表示 <code class=\"codespan\">dataItem</code> 中的数值转换成坐标系上的点。</li>\n</ul>\n<p>有时候还需要用到 <a href=\"option.html#series-custom.renderItem.arguments.api.size\" target=\"_blank\">api.size(...)</a> 函数,表示得到坐标系上一段数值范围对应的长度。</p>\n<p>返回值中样式的设置可以使用 <a href=\"option.html#series-custom.renderItem.arguments.api.style\" target=\"_blank\">api.style(...)</a> 函数,他能得到 <a href=\"option.html#series-custom.itemStyle\" target=\"_blank\">series.itemStyle</a> 中定义的样式信息,以及视觉映射的样式信息。也可以用这种方式覆盖这些样式信息:<code class=\"codespan\">api.style({fill: &#39;green&#39;, stroke: &#39;yellow&#39;})</code>。</p>\n<p>书写完 <code class=\"codespan\">renderItem</code> 方法后,自定义系列的 90% 工作就做完了。剩下的是一些精化工作。</p>\n<h2 id=\"-\">(二)使坐标轴的范围自适应数据范围</h2>\n<p>在 <a href=\"option.html#grid\" target=\"_blank\">直角坐标系(grid)</a>、<a href=\"option.html#polar\" target=\"_blank\">极坐标系(polar)</a> 中都有坐标轴。坐标轴的刻度范围需要自适应当前显示出的数据的范围,否则绘制出的图形会超出去。所以,例如,在 <a href=\"option.html#grid\" target=\"_blank\">直角坐标系(grid)</a> 中,使用自定义系列的开发者,需要设定,<code class=\"codespan\">data</code> 中的哪些维度会对应到 <code class=\"codespan\">x</code> 轴上,哪些维度会对应到 <code class=\"codespan\">y</code> 轴上。这件事通过 <a href=\"option.html#series-custom.encode\" target=\"_blank\">encode</a> 来设定。例如:</p>\n<pre><code class=\"lang-js\">option = {\n    series: [{\n        type: &#39;custom&#39;,\n        renderItem: function () {\n            ...\n        },\n        encode: {\n            // data 中『维度1』和『维度2』对应到 X 轴\n            x: [1, 2],\n            // data 中『维度0』对应到 Y 轴\n            y: 0\n        },\n        data: [\n            // 维度0  维度1  维度2  维度3\n            [   12,   44,   55,   60   ], // 这是第一个 dataItem\n            [   53,   31,   21,   56   ], // 这是第二个 dataItem\n            [   71,   33,   10,   20   ], // 这是第三个 dataItem\n            ...\n        ]\n    }]\n};\n</code></pre>\n<h2 id=\"-tooltip\">(三)设定 tooltip</h2>\n<p>当然,使用 <a href=\"option.html#tooltip.formatter\" target=\"_blank\">tooltip.formatter</a> 可以任意定制 tooltip 中的内容。但是还有更简单的方法,通过<a href=\"option.html#series-custom.encode\" target=\"_blank\">encode</a> 和 <a href=\"option.html#series-custom.dimensions\" target=\"_blank\">dimensions</a> 来设定:</p>\n<pre><code class=\"lang-js\">option = {\n    series: [{\n        type: &#39;custom&#39;,\n        renderItem: function () {\n            ...\n        },\n        encode: {\n            x: [1, 2],\n            y: 0,\n            // 表示『维度2』和『维度3』要显示到 tooltip 中。\n            tooltip: [2, 3]\n        },\n        // 表示给『维度2』和『维度3』分别取名为『年龄』和『满意度』,显示到 tooltip 中。\n        dimensions: [null, null, &#39;年龄&#39;, &#39;满意度&#39;],\n        data: [\n            // 维度0  维度1  维度2  维度3\n            [   12,   44,   55,   60   ], // 这是第一个 dataItem\n            [   53,   31,   21,   56   ], // 这是第二个 dataItem\n            [   71,   33,   10,   20   ], // 这是第三个 dataItem\n            ...\n        ]\n    }]\n};\n</code></pre>\n<p><br>\n<br>\n<br></p>\n<hr>\n<p>上面,一个简单的 custome series 例子完成了。</p>\n<p>下面介绍几个其他细节要点。</p>\n<h2 id=\"-\">(四)超出坐标系范围的截取</h2>\n<p>与 <a href=\"option.html#dataZoom\" target=\"_blank\">dataZoom</a> 结合使用的时候,常常使用会设置 <a href=\"option.html#dataZoom.filterMode\" target=\"_blank\">dataZoom.filterMode</a> 为 &#39;weakFilter&#39;。这个设置的意思是:当 <code class=\"codespan\">dataItem</code> 部分超出坐标系边界的时候,<code class=\"codespan\">dataItem</code> 不会整体被过滤掉。例如:</p>\n<pre><code class=\"lang-js\">option = {\n    dataZoom: {\n        xAxisIndex: 0,\n        filterMode: &#39;weakFilter&#39;\n    },\n    series: [{\n        type: &#39;custom&#39;,\n        renderItem: function () {\n            ...\n        },\n        encode: {\n            // data 中『维度1』和『维度2』对应到 X 轴\n            x: [1, 2],\n            y: 0\n        },\n        data: [\n            // 维度0  维度1  维度2  维度3\n            [   12,   44,   55,   60   ], // 这是第一个 dataItem\n            [   53,   31,   21,   56   ], // 这是第二个 dataItem\n            [   71,   33,   10,   20   ], // 这是第三个 dataItem\n            ...\n        ]\n    }]\n};\n</code></pre>\n<p>在这个例子中,『维度1』和『维度2』对应到 X 轴,<code class=\"codespan\">dataZoom</code> 组件控制 X 轴的缩放。假如在缩放的过程中,某个 dataItem 的『维度1』超出了 X 轴的范围,『维度2』还在 X 轴的范围中,那么只要设置 <code class=\"codespan\">dataZoom.filterMode = &#39;weakFilter&#39;</code>,这个 dataItem 就不会被过滤掉,从而还能够使用 <code class=\"codespan\">renderItem</code> 绘制图形(可以使用上面提到过的 <code class=\"codespan\">echarts.graphic.clipRectByRect</code> 把图形绘制成被坐标系剪裁过的样子)。参见上面提到过的例子:<a href=\"https://echarts.apache.org/examples/zh/editor.html?c=custom-profile\" target=\"_blank\">Profile</a></p>\n<h2 id=\"-dataindex\">(五)关于 dataIndex</h2>\n<p>开发者如果使用到的话应注意,<a href=\"option.html#series-custom.renderItem.arguments.params\" target=\"_blank\">renderItem.arguments.params</a> 中的 <code class=\"codespan\">dataIndex</code> 和 <code class=\"codespan\">dataIndexInside</code> 是有区别的:</p>\n<ul>\n<li><code class=\"codespan\">dataIndex</code> 指的 <code class=\"codespan\">dataItem</code> 在原始数据中的 index。</li>\n<li><code class=\"codespan\">dataIndexInside</code> 指的是 <code class=\"codespan\">dataItem</code> 在当前数据窗口(参见 <a href=\"option.html#dataZoom\" target=\"_blank\">dataZoom</a>)中的 index。</li>\n</ul>\n<p><a href=\"option.html#series-custom.renderItem.arguments.api\" target=\"_blank\">renderItem.arguments.api</a> 中使用的参数都是 <code class=\"codespan\">dataIndexInside</code> 而非 <code class=\"codespan\">dataIndex</code>,因为从 <code class=\"codespan\">dataIndex</code> 转换成 <code class=\"codespan\">dataIndexInside</code> 需要时间开销。</p>\n<h2 id=\"-\">(六)事件监听</h2>\n<pre><code class=\"lang-js\">chart.setOption({\n    // ...\n    series: {\n        type: &#39;custom&#39;,\n        renderItem: function () {\n            // ...\n            return {\n                type: &#39;group&#39;,\n                children: [{\n                    type: &#39;circle&#39;\n                    // ...\n                }, {\n                    type: &#39;circle&#39;,\n                    name: &#39;aaa&#39;,\n                    // 用户指定的信息,可以在 event handler 访问到。\n                    info: 12345,\n                    // ...\n                }]\n            };\n        }\n    }\n});\nchart.on(&#39;click&#39;, {element: &#39;aaa&#39;}, function (params) {\n    // 当 name 为 &#39;aaa&#39; 的图形元素被点击时,此回调被触发。\n    console.log(params.info);\n});\n</code></pre>\n<h2 id=\"-\">(七)自定义矢量图形</h2>\n<p>自定义系列能支持使用 <a href=\"http://www.w3.org/TR/SVG/paths.html#PathData\" target=\"_blank\">SVG PathData</a> 定义矢量路径。从而可以使用矢量图工具中做出的图形。参见:<a href=\"option.html#series-custom.renderItem.return_path\" target=\"_blank\">path</a>,以及例子:<a href=\"https://echarts.apache.org/examples/zh/editor.html?c=custom-calendar-icon\" target=\"_blank\">icons</a> 和 <a href=\"https://echarts.apache.org/examples/zh/editor.html?c=custom-gantt-flight\" target=\"_blank\">shapes</a>。</p>\n<p><br></p>\n<p><strong>更多的自定义系列的例子参见:<a href=\"https://echarts.apache.org/examples/zh/index.html#chart-type-custom\" target=\"_blank\">custom examples</a></strong></p>\n"},"富文本标签":{"type":["*"],"description":"<p>在许多地方(如图、轴的标签等)都可以使用富文本标签。例如:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=pie-rich-text&edit=1&reset=1\" width=\"800\" height=\"400\" ></iframe>\n\n\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=treemap-obama&edit=1&reset=1\" width=\"800\" height=\"550\" ></iframe>\n\n\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=bar-rich-text&edit=1&reset=1\" width=\"800\" height=\"400\" ></iframe>\n\n\n<p><br></p>\n<p>其他一些例子:\n<a href=\"https://echarts.apache.org/examples/zh/editor.html?c=map-labels&amp;edit=1&amp;reset=1\" target=\"_blank\">Map Labels</a>,\n<a href=\"https://echarts.apache.org/examples/zh/editor.html?c=pie-nest&amp;edit=1&amp;reset=1\" target=\"_blank\">Pie Labels</a>,\n<a href=\"https://echarts.apache.org/examples/zh/editor.html?c=gauge-car&amp;edit=1&amp;reset=1\" target=\"_blank\">Gauge</a>.</p>\n<p><br></p>\n<p>原先 Apache ECharts<sup>TM</sup> 中的文本标签,只能对整块统一进行样式设置,并且仅仅支持颜色和字体的设置,从而导致不易于制作表达能力更强的文字描述信息。</p>\n<p>echarts v3.7 以后,支持了富文本标签,能够:</p>\n<ul>\n<li>定制文本块整体的样式(如背景、边框、阴影等)、位置、旋转等。</li>\n<li>对文本块中个别片段定义样式(如颜色、字体、高宽、背景、阴影等)、对齐方式等。</li>\n<li>在文本中使用图片做小图标或者背景。</li>\n<li>特定组合以上的规则,可以做出简单表格、分割线等效果。</li>\n</ul>\n<p>开始下面的介绍之前,先说明一下下面会使用的两个名词的含义:</p>\n<ul>\n<li>文本块(Text Block):文本标签块整体。</li>\n<li>文本片段(Text fragment):文本标签块中的部分文本。</li>\n</ul>\n<p>如下图示例:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/text-block-fragment&edit=1&reset=1\" width=\"340\" height=\"240\" ></iframe>\n\n\n\n<h2 id=\"-\">文本样式相关的配置项</h2>\n<p>echarts 提供了丰富的文本标签配置项,包括:</p>\n<ul>\n<li>字体基本样式设置:<code class=\"codespan\">fontStyle</code>、<code class=\"codespan\">fontWeight</code>、<code class=\"codespan\">fontSize</code>、<code class=\"codespan\">fontFamily</code>。</li>\n<li>文字颜色:<code class=\"codespan\">color</code>。</li>\n<li>文字描边:<code class=\"codespan\">textBorderColor</code>、<code class=\"codespan\">textBorderWidth</code>。</li>\n<li>文字阴影:<code class=\"codespan\">textShadowColor</code>、<code class=\"codespan\">textShadowBlur</code>、<code class=\"codespan\">textShadowOffsetX</code>、<code class=\"codespan\">textShadowOffsetY</code>。</li>\n<li>文本块或文本片段大小:<code class=\"codespan\">lineHeight</code>、<code class=\"codespan\">width</code>、<code class=\"codespan\">height</code>、<code class=\"codespan\">padding</code>。</li>\n<li>文本块或文本片段的对齐:<code class=\"codespan\">align</code>、<code class=\"codespan\">verticalAlign</code>。</li>\n<li>文本块或文本片段的边框、背景(颜色或图片):<code class=\"codespan\">backgroundColor</code>、<code class=\"codespan\">borderColor</code>、<code class=\"codespan\">borderWidth</code>、<code class=\"codespan\">borderRadius</code>。</li>\n<li>文本块或文本片段的阴影:<code class=\"codespan\">shadowColor</code>、<code class=\"codespan\">shadowBlur</code>、<code class=\"codespan\">shadowOffsetX</code>、<code class=\"codespan\">shadowOffsetY</code>。</li>\n<li>文本块的位置和旋转:<code class=\"codespan\">position</code>、<code class=\"codespan\">distance</code>、<code class=\"codespan\">rotate</code>。</li>\n</ul>\n<p>可以在各处的 <code class=\"codespan\">rich</code> 属性中定义文本片段样式。例如 <a href=\"option.html#series-bar.label.rich\" target=\"_blank\">series-bar.label.rich</a></p>\n<p>例如:</p>\n<pre><code class=\"lang-js\">label: {\n    // 在文本中,可以对部分文本采用 rich 中定义样式。\n    // 这里需要在文本中使用标记符号:\n    // `{styleName|text content text content}` 标记样式名。\n    // 注意,换行仍是使用 &#39;\\n&#39;。\n    formatter: [\n        &#39;{a|这段文本采用样式a}&#39;,\n        &#39;{b|这段文本采用样式b}这段用默认样式{x|这段用样式x}&#39;\n    ].join(&#39;\\n&#39;),\n\n    // 这里是文本块的样式设置:\n    color: &#39;#333&#39;,\n    fontSize: 5,\n    fontFamily: &#39;Arial&#39;,\n    borderWidth: 3,\n    backgroundColor: &#39;#984455&#39;,\n    padding: [3, 10, 10, 5],\n    lineHeight: 20,\n\n    // rich 里是文本片段的样式设置:\n    rich: {\n        a: {\n            color: &#39;red&#39;,\n            lineHeight: 10\n        },\n        b: {\n            backgroundColor: {\n                image: &#39;xxx/xxx.jpg&#39;\n            },\n            height: 40\n        },\n        x: {\n            fontSize: 18,\n            fontFamily: &#39;Microsoft YaHei&#39;,\n            borderColor: &#39;#449933&#39;,\n            borderRadius: 4\n        },\n        ...\n    }\n}\n</code></pre>\n<blockquote>\n<p>注意:如果不定义 <code class=\"codespan\">rich</code>,不能指定文字块的 <code class=\"codespan\">width</code> 和 <code class=\"codespan\">height</code>。</p>\n</blockquote>\n<h2 id=\"-\">文本、文本框、文本片段的基本样式和装饰</h2>\n<p>每个文本可以设置基本的字体样式:<code class=\"codespan\">fontStyle</code>、<code class=\"codespan\">fontWeight</code>、<code class=\"codespan\">fontSize</code>、<code class=\"codespan\">fontFamily</code>。</p>\n<p>可以设置文字的颜色 <code class=\"codespan\">color</code> 和边框的颜色 <code class=\"codespan\">textBorderColor</code>、<code class=\"codespan\">textBorderWidth</code>。</p>\n<p>文本框可以设置边框和背景的样式:<code class=\"codespan\">borderColor</code>、<code class=\"codespan\">borderWidth</code>、<code class=\"codespan\">backgroundColor</code>、<code class=\"codespan\">padding</code>。</p>\n<p>文本片段也可以设置边框和背景的样式:<code class=\"codespan\">borderColor</code>、<code class=\"codespan\">borderWidth</code>、<code class=\"codespan\">backgroundColor</code>、<code class=\"codespan\">padding</code>。</p>\n<p>例如:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/text-options&edit=1&reset=1\" width=\"700\" height=\"300\" ></iframe>\n\n\n\n<h2 id=\"-\">标签的位置</h2>\n<p>对于折线图、柱状图、散点图等,均可以使用 <code class=\"codespan\">label</code> 来设置标签。标签的相对于图形元素的位置,一般使用 <a href=\"option.html#series-scatter.label.position\" target=\"_blank\">label.position</a>、<a href=\"option.html#series-scatter.label.distance\" target=\"_blank\">label.distance</a> 来配置。</p>\n<p>例如:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/label-position&edit=1&reset=1\" width=\"800\" height=\"400\" ></iframe>\n\n\n<blockquote>\n<p>注意:<code class=\"codespan\">position</code> 在不同的图中可取值有所不同。<code class=\"codespan\">distance</code> 并不是在每个图中都支持。详情请参见 <a href=\"option.html\" target=\"_blank\">option 文档</a>。</p>\n</blockquote>\n<h2 id=\"-\">标签的旋转</h2>\n<p>某些图中,为了能有足够长的空间来显示标签,需要对标签进行旋转。例如:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=bar-label-rotation&edit=1&reset=1\" width=\"900\" height=\"500\" ></iframe>\n\n\n<p>这种场景下,可以结合 <a href=\"option.html#series-bar.label.align\" target=\"_blank\">align</a> 和 <a href=\"option.html#series-bar.label.verticalAlign\" target=\"_blank\">verticalAlign</a> 来调整标签位置。</p>\n<p>注意,逻辑是,先使用 <code class=\"codespan\">align</code> 和 <code class=\"codespan\">verticalAlign</code> 定位,再旋转。</p>\n<h2 id=\"-\">文本片段的排版和对齐</h2>\n<p>关于排版方式,每个文本片段,可以想象成 CSS 中的 <code class=\"codespan\">inline-block</code>,在文档流中按行放置。</p>\n<p>每个文本片段的内容盒尺寸(<code class=\"codespan\">content box size</code>),默认是根据文字大小决定的。但是,也可以设置 <code class=\"codespan\">width</code>、<code class=\"codespan\">height</code> 来强制指定,虽然一般不会这么做(参见下文)。文本片段的边框盒尺寸(<code class=\"codespan\">border box size</code>),由上述本身尺寸,加上文本片段的 <code class=\"codespan\">padding</code> 来得到。</p>\n<p>只有 <code class=\"codespan\">&#39;\\n&#39;</code> 是换行符,能导致换行。</p>\n<p>一行内,会有多个文本片段。每行的实际高度,由 <code class=\"codespan\">lineHeight</code> 最大的文本片段决定。文本片段的 <code class=\"codespan\">lineHeight</code> 可直接在 <code class=\"codespan\">rich</code> 中指定,也可以在 <code class=\"codespan\">rich</code> 的父层级中统一指定而采用到 <code class=\"codespan\">rich</code> 的所有项中,如果都不指定,则取文本片段的边框盒尺寸(<code class=\"codespan\">border box size</code>)。</p>\n<p>在一行的 <code class=\"codespan\">lineHeight</code> 被决定后,一行内,文本片段的竖直位置,由文本片段的 <code class=\"codespan\">verticalAlign</code> 来指定(这里和 CSS 中的规则稍有不同):</p>\n<ul>\n<li><code class=\"codespan\">&#39;bottom&#39;</code>:文本片段的盒的底边贴住行底。</li>\n<li><code class=\"codespan\">&#39;top&#39;</code>:文本片段的盒的顶边贴住行顶。</li>\n<li><code class=\"codespan\">&#39;middle&#39;</code>:居行中。</li>\n</ul>\n<p>文本块的宽度,可以直接由文本块的 <code class=\"codespan\">width</code> 指定,否则,由最长的行决定。宽度决定后,在一行中进行文本片段的放置。文本片段的 <code class=\"codespan\">align</code> 决定了文本片段在行中的水平位置:</p>\n<ul>\n<li>首先,从左向右连续紧靠放置 <code class=\"codespan\">align</code> 为 <code class=\"codespan\">&#39;left&#39;</code> 的文本片段盒。</li>\n<li>然后,从右向左连续紧靠放置 <code class=\"codespan\">align</code> 为 <code class=\"codespan\">&#39;right&#39;</code> 的文本片段盒。</li>\n<li>最后,剩余的没处理的文本片段盒,紧贴着,在中间剩余的区域中居中放置。</li>\n</ul>\n<p>关于文字在文本片段盒中的位置:</p>\n<ul>\n<li>如果 <code class=\"codespan\">align</code> 为 <code class=\"codespan\">&#39;center&#39;</code>,则文字在文本片段盒中是居中的。</li>\n<li>如果 <code class=\"codespan\">align</code> 为 <code class=\"codespan\">&#39;left&#39;</code>,则文字在文本片段盒中是居左的。</li>\n<li>如果 <code class=\"codespan\">align</code> 为 <code class=\"codespan\">&#39;right&#39;</code>,则文字在文本片段盒中是居右的。</li>\n</ul>\n<p>例如:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/text-fragment-align&edit=1&reset=1\" width=\"800\" height=\"220\" ></iframe>\n\n\n\n<h2 id=\"-\">特殊效果:图标、分割线、标题块、简单表格</h2>\n<p>看下面的例子:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/title-block&edit=1&reset=1\" width=\"600\" height=\"400\" ></iframe>\n\n\n<p>文本片段的 <code class=\"codespan\">backgroundColor</code> 可以指定为图片后,就可以在文本中使用图标了:</p>\n<pre><code class=\"lang-js\">rich: {\n    Sunny: {\n        // 这样设定 backgroundColor 就可以是图片了。\n        backgroundColor: {\n            image: &#39;./data/asset/img/weather/sunny_128.png&#39;\n        },\n        // 可以只指定图片的高度,从而图片的宽度根据图片的长宽比自动得到。\n        height: 30\n    }\n}\n</code></pre>\n<p>分割线实际是用 border 实现的:</p>\n<pre><code class=\"lang-js\">rich: {\n    hr: {\n        borderColor: &#39;#777&#39;,\n        // 这里把 width 设置为 &#39;100%&#39;,表示分割线的长度充满文本块。\n        // 注意,这里是文本块内容盒(content box)的 100%,而不包含 padding。\n        // 虽然这和 CSS 相关的定义有所不同,但是在这类场景中更加方便。\n        width: &#39;100%&#39;,\n        borderWidth: 0.5,\n        height: 0\n    }\n}\n</code></pre>\n<p>标题块是使用 <code class=\"codespan\">backgroundColor</code> 实现的:</p>\n<pre><code class=\"lang-js\">// 标题文字居左\nformatter: &#39;{titleBg|Left Title}&#39;,\nrich: {\n    titleBg: {\n        backgroundColor: &#39;#000&#39;,\n        height: 30,\n        borderRadius: [5, 5, 0, 0],\n        padding: [0, 10, 0, 10],\n        width: &#39;100%&#39;,\n        color: &#39;#eee&#39;\n    }\n}\n\n// 标题文字居中。\n// 这个实现有些 tricky,但是,能够不引入更复杂的排版规则而实现这个效果。\nformatter: &#39;{tc|Center Title}{titleBg|}&#39;,\nrich: {\n    titleBg: {\n        align: &#39;right&#39;,\n        backgroundColor: &#39;#000&#39;,\n        height: 30,\n        borderRadius: [5, 5, 0, 0],\n        padding: [0, 10, 0, 10],\n        width: &#39;100%&#39;,\n        color: &#39;#eee&#39;\n    }\n}\n</code></pre>\n<p>简单表格的设定,其实就是给不同行上纵向对应的文本片段设定同样的宽度就可以了。参见本文最开始的 <a href=\"https://echarts.apache.org/examples/zh/view.html?c=pie-rich-text&amp;edit=1&amp;reset=1\" target=\"_blank\">例子</a>。</p>\n"},"服务端渲染":{"type":["*"],"description":"<p>Apache ECharts<sup>TM</sup> 可以在服务端进行渲染。例如 <a href=\"https://echarts.apache.org/examples/zh/index.html\" target=\"_blank\">官方示例</a> 里的一个个小截图,就是在服务端预生成出来的。</p>\n<p>服务端渲染可以使用流行的 headless 环境,例如 <a href=\"https://github.com/GoogleChrome/puppeteer\" target=\"_blank\">puppeteer</a>、<a href=\"https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md\" target=\"_blank\">headless chrome</a>、<a href=\"https://github.com/Automattic/node-canvas\" target=\"_blank\">node-canvas</a>、<a href=\"https://github.com/jsdom/jsdom\" target=\"_blank\">jsdom</a>、<a href=\"http://phantomjs.org/\" target=\"_blank\">PhantomJS</a> 等。</p>\n<p>这是一些社区贡献的 echarts 服务端渲染方案:</p>\n<ul>\n<li><a href=\"https://github.com/hellosean1025/node-echarts\" target=\"_blank\">https://github.com/hellosean1025/node-echarts</a></li>\n<li><a href=\"https://github.com/chfw/echarts-scrappeteer\" target=\"_blank\">https://github.com/chfw/echarts-scrappeteer</a></li>\n<li><a href=\"https://github.com/chfw/pyecharts-snapshot/blob/master/pyecharts_snapshot/phantomjs/snapshot.js\" target=\"_blank\">https://github.com/chfw/pyecharts-snapshot/blob/master/pyecharts_snapshot/phantomjs/snapshot.js</a></li>\n<li><a href=\"https://gist.github.com/pissang/4c32ee30e35c91336af72b129a1a4a73\" target=\"_blank\">https://gist.github.com/pissang/4c32ee30e35c91336af72b129a1a4a73</a></li>\n</ul>\n"},"使用 Canvas 或者 SVG 渲染":{"type":["*"],"description":"<p>浏览器端图表库大多会选择 SVG 或者 Canvas 进行渲染。对于绘制图表来说,这两种技术往往是可替换的,效果相近。但是在一些场景中,他们的表现和能力又有一定差异。于是,对它们的选择取舍,就成为了一个一直存在的不易有标准答案的话题。</p>\n<p>Apache ECharts<sup>TM</sup> 从初始一直使用 Canvas 绘制图表(除了对 IE8- 使用 VML)。而 <a href=\"https://github.com/apache/echarts/releases\" target=\"_blank\">ECharts v4.0</a> 发布了 SVG 渲染器,从而提供了一种新的选择。只须在初始化一个图表实例时,设置 <a href=\"api.html#echarts.init\" target=\"_blank\">renderer 参数</a> 为 <code class=\"codespan\">&#39;canvas&#39;</code> 或 <code class=\"codespan\">&#39;svg&#39;</code> 即可指定渲染器,比较方便。</p>\n<blockquote>\n<p>SVG 和 Canvas 这两种使用方式差异很大的技术,能够做到同时被透明支持,主要归功于 ECharts 底层库 <a href=\"https://github.com/ecomfe/zrender\" target=\"_blank\">ZRender</a> 的抽象和实现,形成可互换的 SVG 渲染器和 Canvas 渲染器。</p>\n</blockquote>\n<h2 id=\"-\">选择哪种渲染器</h2>\n<p>一般来说,Canvas 更适合绘制图形元素数量非常大(这一般是由数据量大导致)的图表(如热力图、地理坐标系或平行坐标系上的大规模线图或散点图等),也利于实现某些视觉 <a href=\"https://echarts.apache.org/examples/zh/editor.html?c=lines-bmap-effect\" target=\"_blank\">特效</a>。但是,在不少场景中,SVG 具有重要的优势:它的内存占用更低(这对移动端尤其重要)、渲染性能略高、并且用户使用浏览器内置的缩放功能时不会模糊。例如,我们在一些硬件环境中分别使用 Canvas 渲染器和 SVG 渲染器绘制中等数据量的折、柱、饼,统计初始动画阶段的帧率,得到了一个性能对比图:</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/canvas-vs-svg&reset=1\" width=\"90%\" height=\"400\" ></iframe>\n\n\n<p>上图显示出,在这些场景中,SVG 渲染器相比 Canvas 渲染器在移动端的总体表现更好。当然,这个实验并非是全面的评测,在另一些数据量较大或者有图表交互动画的场景中,目前的 SVG 渲染器的性能还比不过 Canvas 渲染器。但是同时有这两个选项,为开发者们根据自己的情况优化性能提供了更广阔的空间。</p>\n<p>选择哪种渲染器,我们可以根据软硬件环境、数据量、功能需求综合考虑。</p>\n<ul>\n<li>在软硬件环境较好,数据量不大的场景下(例如 PC 端做商务报表),两种渲染器都可以适用,并不需要太多纠结。</li>\n<li>在环境较差,出现性能问题需要优化的场景下,可以通过试验来确定使用哪种渲染器。比如有这些经验:<ul>\n<li>在须要创建很多 ECharts 实例且浏览器易崩溃的情况下(可能是因为 Canvas 数量多导致内存占用超出手机承受能力),可以使用 SVG 渲染器来进行改善。大略得说,如果图表运行在低端安卓机,或者我们在使用一些特定图表如 <a href=\"https://ecomfe.github.io/echarts-liquidfill/example/\" target=\"_blank\">水球图</a> 等,SVG 渲染器可能效果更好。</li>\n<li>数据量很大、较多交互时,可以选用 Canvas 渲染器。</li>\n</ul>\n</li>\n</ul>\n<p>我们强烈欢迎开发者们 <a href=\"https://github.com/apache/echarts/issues/new\" target=\"_blank\">反馈</a> 给我们使用的体验和场景,帮助我们更好的做优化。</p>\n<p>注:除了某些特殊的渲染可能依赖 Canvas:如<a href=\"option.html#series-lines.effect\" target=\"_blank\">炫光尾迹特效</a>、<a href=\"https://echarts.apache.org/examples/zh/editor.html?c=heatmap-bmap\" target=\"_blank\">带有混合效果的热力图</a>等,绝大部分功能 SVG 都是支持的。此外,目前的 SVG 版中,富文本、材质功能尚未实现。</p>\n<h2 id=\"-\">如何使用渲染器</h2>\n<p>ECharts 默认使用 Canvas 渲染。如果想使用 SVG 渲染,ECharts 代码中须包括有 SVG 渲染器模块。</p>\n<ul>\n<li>ECharts 的 <a href=\"https://www.jsdelivr.com/package/npm/echarts\" target=\"_blank\">预构建文件</a> 中,<a href=\"https://cdn.jsdelivr.net/npm/echarts/dist/echarts.common.min.js\" target=\"_blank\">常用版</a> 和 <a href=\"https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js\" target=\"_blank\">完整版</a> 已经包含了 SVG 渲染器,可直接使用。而 <a href=\"https://cdn.jsdelivr.net/npm/echarts/dist/echarts.simple.min.js\" target=\"_blank\">精简版</a> 没有包括。</li>\n<li>如果 <a href=\"https://echarts.apache.org/zh/builder.html\" target=\"_blank\">在线自定义构建 ECharts</a>,则需要勾上页面下方的 “SVG 渲染”。</li>\n<li>如果 <a href=\"tutorial.html#%E8%87%AA%E5%AE%9A%E4%B9%89%E6%9E%84%E5%BB%BA%20ECharts\" target=\"_blank\">线下自定义构建 ECharts</a>,则须引入 SVG 渲染器模块,即:</li>\n</ul>\n<pre><code class=\"lang-js\">import &#39;zrender/lib/svg/svg&#39;;\n</code></pre>\n<p>然后,我们就可以在代码中,初始化图表实例时,<a href=\"api.html#echarts.init\" target=\"_blank\">传入参数</a> 选择渲染器类型:</p>\n<pre><code class=\"lang-js\">// 使用 Canvas 渲染器(默认)\nvar chart = echarts.init(containerDom, null, {renderer: &#39;canvas&#39;});\n// 等价于:\nvar chart = echarts.init(containerDom);\n\n// 使用 SVG 渲染器\nvar chart = echarts.init(containerDom, null, {renderer: &#39;svg&#39;});\n</code></pre>\n"},"在图表中支持无障碍访问":{"type":["*"],"description":"<p>W3C 制定了无障碍富互联网应用规范集(<a href=\"https://www.w3.org/WAI/intro/aria\" target=\"_blank\">WAI-ARIA</a>,the Accessible Rich Internet Applications Suite),致力于使得网页内容和网页应用能够被更多残障人士访问。Apache ECharts<sup>TM</sup> 4.0 遵从这一规范,支持自动根据图表配置项智能生成描述,使得盲人可以在朗读设备的帮助下了解图表内容,让图表可以被更多人群访问。</p>\n<p>默认关闭,需要通过将 <a href=\"option.html#aria.enabled\" target=\"_blank\">aria.enabled</a> 设置为 <code class=\"codespan\">true</code> 开启。开启后,会根据图表、数据、标题等情况,自动智能生成关于图表的描述,用户也可以通过配置项修改描述。</p>\n<p>对于配置项:</p>\n<pre><code class=\"lang-js\">option = {\n    aria: {\n        enabled: true\n    },\n    title: {\n        text: &#39;某站点用户访问来源&#39;,\n        x: &#39;center&#39;\n    },\n    series: [\n        {\n            name: &#39;访问来源&#39;,\n            type: &#39;pie&#39;,\n            data: [\n                { value: 335, name: &#39;直接访问&#39; },\n                { value: 310, name: &#39;邮件营销&#39; },\n                { value: 234, name: &#39;联盟广告&#39; },\n                { value: 135, name: &#39;视频广告&#39; },\n                { value: 1548, name: &#39;搜索引擎&#39; }\n            ]\n        }\n    ]\n};\n</code></pre>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/aria-pie&edit=1&reset=1\" width=\"700\" height=\"300\" ></iframe>\n\n\n<p>生成的图表 DOM 上,会有一个 <code class=\"codespan\">aria-label</code> 属性,在朗读设备的帮助下,盲人能够了解图表的内容。其值为:</p>\n<pre><code>这是一个关于“某站点用户访问来源”的图表。图表类型是饼图,表示访问来源。其数据是——直接访问的数据是335,邮件营销的数据是310,联盟广告的数据是234,视频广告的数据是135,搜索引擎的数据是1548。\n</code></pre><p>默认语言会根据语言包(默认中文)选择,也可以使用配置项自定义模板。</p>\n<p>除此之外,Apache ECharts 5 新增支持贴花纹理,作为颜色的辅助表达,进一步用以区分数据。在 <code class=\"codespan\">aria.enabled</code> 为 <code class=\"codespan\">true</code> 的前提下,将 <code class=\"codespan\">aria.decal.show</code> 设为 <code class=\"codespan\">true</code> 即可采用默认的贴花样式。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/aria-decal-simple&edit=1&reset=1\" width=\"700\" height=\"300\" ></iframe>\n\n\n<p>下面,我们更具体地介绍这两种无障碍设计的配置方式。</p>\n<h2 id=\"-\">图表描述</h2>\n<h4 id=\"-\">采用整体描述</h4>\n<p>对于有些图表,默认生成的数据点的描述并不足以表现整体的信息。比如下图的散点图,默认生成的描述可以包含数据点的坐标值,但是知道几百几千个点的坐标并不能帮助我们有效地理解图表表达的信息。</p>\n<p><img width=\"600\" height=\"auto\" src=\"documents/asset/img/aria-example.png\"></p>\n<p>这时候,用户可以通过 <a href=\"option.html#aria.label.description\" target=\"_blank\">aria.label.description</a> 配置项指定图表的整体描述。</p>\n<h4 id=\"-\">定制模板描述</h4>\n<p>除了整体性修改描述之外,我们还提供了生成描述的模板,可以方便地进行细粒度的修改。</p>\n<p>生成描述的基本流程为,如果 <a href=\"option.html#aria.label.show\" target=\"_blank\">aria.label.show</a> 设置为 <code class=\"codespan\">true</code>,则生成无障碍访问描述,否则不生成。如果定义了 <a href=\"option.html#aria.label.description\" target=\"_blank\">aria.label.description</a>,则将其作为图表的完整描述,否则根据模板拼接生成描述。我们提供了默认的生成描述的算法,仅当生成的描述不太合适时,才需要修改这些模板,甚至使用 <code class=\"codespan\">aria.description</code> 完全覆盖。</p>\n<p>使用模板拼接时,先根据是否存在标题 <a href=\"#title.text\">title.text</a> 决定使用 <a href=\"option.html#aria.label.general.withTitle\" target=\"_blank\">aria.label.general.withTitle</a> 还是 <a href=\"option.html#aria.label.general.withoutTitle\" target=\"_blank\">aria.label.general.withoutTitle</a> 作为整体性描述。其中,<code class=\"codespan\">aria.general.withTitle</code> 配置项包括模板变量 <code class=\"codespan\">&#39;{title}&#39;</code>,将会被替换成图表标题。也就是说,如果 <code class=\"codespan\">aria.general.withTitle</code> 被设置为 <code class=\"codespan\">&#39;图表的标题是:{title}。&#39;</code>,则如果包含标题 <code class=\"codespan\">&#39;价格分布图&#39;</code>,这部分的描述为 <code class=\"codespan\">&#39;图表的标题是:价格分布图。&#39;</code>。</p>\n<p>拼接完标题之后,会依次拼接系列的描述(<a href=\"option.html#aria.label.series\" target=\"_blank\">aria.label.series</a>),和每个系列的数据的描述(<a href=\"option.html#aria.label.data\" target=\"_blank\">aria.label.data</a>)。同样,每个模板都有可能包括模板变量,用以替换实际的值。</p>\n<h2 id=\"-\">贴花图案</h2>\n<p>上文介绍了使用默认的贴花图案的方式。如果需要自定义贴花图案,可以使用 <a href=\"option.html#aria.decal.decals\" target=\"_blank\">aria.decal.decals</a> 配置出灵活多变的图案。</p>\n<iframe data-src=\"https://echarts.apache.org/examples/zh/view.html?c=doc-example/aria-decal&edit=1&reset=1\" width=\"700\" height=\"300\" ></iframe>\n\n\n<p>更具体的信息请参见 <a href=\"option.html#aria\" target=\"_blank\">ARIA 文档</a>。</p>\n"},"使用 ECharts GL 实现基础的三维可视化":{"type":["*"],"description":"<p>ECharts GL (后面统一简称 GL)为 Apache ECharts<sup>TM</sup> 补充了丰富的三维可视化组件,这篇文章我们会简单介绍如何基于 GL 实现一些常见的三维可视化作品。实际上如果你对 ECharts 有一定了解的话,也可以很快的上手 GL,GL 的配置项完全是按照 ECharts 的标准和上手难度来设计的。</p>\n<p>在看完文章之后,你可以前往 <a href=\"https://echarts.apache.org/examples/zh/index.html#chart-type-globe\" target=\"_blank\">官方示例</a> 和 <a href=\"https://gallery.echartsjs.com/explore.html#tags=echarts-gl\" target=\"_blank\">Gallery</a> 去了解更多使用 GL 制作的示例,对于文章中我们没法解释到的代码,也可以前往 <a href=\"option-gl.html\" target=\"_blank\">GL 配置项手册</a> 查看具体的配置项使用方法。</p>\n<h2 id=\"-echarts-gl\">如何下载和引入 ECharts GL</h2>\n<p>为了不再增加已经很大了的 ECharts 完整版的体积,我们将 GL 作为扩展包的形式提供,和诸如水球图这样的扩展类似,如果要使用 GL 里的各种组件,只需要在引入<code class=\"codespan\">echarts.min.js</code>的基础上再引入一个<code class=\"codespan\">echarts-gl.min.js</code>。你可以从 <a href=\"https://echarts.apache.org/zh/download.html\" target=\"_blank\">官网</a> 下载最新版的 GL,然后在页面中通过标签引入:</p>\n<pre><code class=\"lang-html\">&lt;script src=&quot;lib/echarts.min.js&quot;&gt;&lt;/script&gt;\n&lt;script src=&quot;lib/echarts-gl.min.js&quot;&gt;&lt;/script&gt;\n</code></pre>\n<p>如果你的项目使用 webpack 或者 rollup 来打包代码的话,也可以通过 npm 安装后引入</p>\n<pre><code class=\"lang-bash\">npm install echarts\nnpm install echarts-gl\n</code></pre>\n<pre><code class=\"lang-js\">// 通过 ES6 的 import 语法引入 ECharts 和 ECharts GL\nimport echarts from &#39;echarts&#39;;\nimport &#39;echarts-gl&#39;;\n</code></pre>\n<h2 id=\"-\">声明一个基础的三维笛卡尔坐标系</h2>\n<p>引入 ECharts 和 ECharts GL 后,我们先来声明一个基础的三维笛卡尔坐标系用于绘制三维的散点图,柱状图,曲面图等常见的统计图。</p>\n<p>在 ECharts 中我们有 <a href=\"option.html#grid\" target=\"_blank\">grid</a> 组件用于提供一个矩形的区域放置一个二维的笛卡尔坐标系,以及笛卡尔坐标系上上的 x 轴(<a href=\"option.html#xAxis\" target=\"_blank\">xAxis</a>)和 y 轴(<a href=\"option.html#yAxis\" target=\"_blank\">yAxis</a>)。对于三维的笛卡尔坐标系,我们在 GL 中提供了 <a href=\"option-gl.html#grid3D\" target=\"_blank\">grid3D</a> 组件用于划分一块三维的笛卡尔空间,以及放置在这个 <a href=\"option-gl.html#grid3D\" target=\"_blank\">grid3D</a> 上的 <a href=\"option-gl.html#xAxis3D\" target=\"_blank\">xAxis3D</a>, <a href=\"option-gl.html#yAxis3D\" target=\"_blank\">yAxis3D</a>, <a href=\"option-gl.html#zAxis3D\" target=\"_blank\">zAxis3D</a>。</p>\n<blockquote>\n<p>小提示:在 GL 中我们对除了 globe 之外所有的三维组件和系列都加了 3D 的后缀用以区分,例如三维的散点图就是 scatter3D,三维的地图就是 map3D 等等。</p>\n</blockquote>\n<p>下面这段代码就声明了一个最简单的三维笛卡尔坐标系</p>\n<pre><code class=\"lang-js\">var option = {\n    // 需要注意的是我们不能跟 grid 一样省略 grid3D\n    grid3D: {},\n    // 默认情况下, x, y, z 分别是从 0 到 1 的数值轴\n    xAxis3D: {},\n    yAxis3D: {},\n    zAxis3D: {}\n}\n</code></pre>\n<p>效果如下:</p>\n<p><img width=\"\" height=\"auto\" src=\"documents/asset/img/gl/grid3D-basic.png\"></p>\n<p>跟二维的笛卡尔坐标系一样,每个轴都会有多种类型,默认是数值轴,如果需要是类目轴的话,简单的设置为 <code class=\"codespan\">type: &#39;category&#39;</code>就行了。</p>\n<h2 id=\"-\">绘制三维的散点图</h2>\n<p>声明好笛卡尔坐标系后,我们先试试用一份程序生成的正态分布数据在这个三维的笛卡尔坐标系中画散点图。</p>\n<p>下面这段是生成正态分布数据的代码,你可以先不用关心这段代码是怎么工作的,只需要知道它生成了一份三维的正态分布数据放在<code class=\"codespan\">data</code>数组中。</p>\n<pre><code class=\"lang-js\">function makeGaussian(amplitude, x0, y0, sigmaX, sigmaY) {\n    return function (amplitude, x0, y0, sigmaX, sigmaY, x, y) {\n        var exponent = -(\n                ( Math.pow(x - x0, 2) / (2 * Math.pow(sigmaX, 2)))\n                + ( Math.pow(y - y0, 2) / (2 * Math.pow(sigmaY, 2)))\n            );\n        return amplitude * Math.pow(Math.E, exponent);\n    }.bind(null, amplitude, x0, y0, sigmaX, sigmaY);\n}\n// 创建一个高斯分布函数\nvar gaussian = makeGaussian(50, 0, 0, 20, 20);\n\nvar data = [];\nfor (var i = 0; i &lt; 1000; i++) {\n    // x, y 随机分布\n    var x = Math.random() * 100 - 50;\n    var y = Math.random() * 100 - 50;\n    var z = gaussian(x, y);\n    data.push([x, y, z]);\n}\n</code></pre>\n<p>生成的正态分布的数据大概长这样:</p>\n<pre><code class=\"lang-js\">[\n  [46.74395071259907, -33.88391024738553, 0.7754030099768191],\n  [-18.45302873809771, 16.88114775416834, 22.87772504105404],\n  [2.9908128281121336, -0.027699444453467947, 49.44400635911886],\n  ...\n]\n</code></pre>\n<p>每一项都包含了<code class=\"codespan\">x</code>, <code class=\"codespan\">y</code>, <code class=\"codespan\">z</code>三个值,这三个值会分别被映射到笛卡尔坐标系的 x 轴,y 轴和 z 轴上。</p>\n<p>然后我们可以使用 GL 提供的 <a href=\"option-gl.html#series-scatter3D\" target=\"_blank\">scatter3D</a> 系列类型把这些数据画成三维空间中正态分布的点。</p>\n<pre><code class=\"lang-js\">option = {\n    grid3D: {},\n    xAxis3D: {},\n    yAxis3D: {},\n    zAxis3D: { max: 100 },\n    series: [{\n        type: &#39;scatter3D&#39;,\n        data: data\n    }]\n}\n</code></pre>\n<p><img width=\"\" height=\"auto\" src=\"documents/asset/img/gl/scatter3D-gaussian.png\"></p>\n<h2 id=\"-\">使用真实数据的三维散点图</h2>\n<p>接下来我们来看一个使用真实多维数据的三维散点图例子。</p>\n<p>可以先从 <a href=\"https://echarts.apache.org/examples/data/asset/data/life-expectancy-table.json\" target=\"_blank\">https://echarts.apache.org/examples/data/asset/data/life-expectancy-table.json</a> 获取这份数据。</p>\n<p>格式化一下可以看到这份数据是很传统转成 JSON 后的表格格式。第一行是每一列数据的属性名,可以从这个属性名看出来每一列数据的含义,分别是人均收入,人均寿命,人口数量,国家和年份。</p>\n<pre><code class=\"lang-js\">[\n    [&quot;Income&quot;, &quot;Life Expectancy&quot;, &quot;Population&quot;, &quot;Country&quot;, &quot;Year&quot;],\n    [815, 34.05, 351014, &quot;Australia&quot;, 1800],\n    [1314, 39, 645526, &quot;Canada&quot;, 1800],\n    [985, 32, 321675013, &quot;China&quot;, 1800],\n    [864, 32.2, 345043, &quot;Cuba&quot;, 1800],\n    [1244, 36.5731262, 977662, &quot;Finland&quot;, 1800],\n    ...\n]\n</code></pre>\n<p>在 ECharts 4 中我们可以使用 dataset 组件非常方便地引入这份数据。如果对 dataset 还不熟悉的话可以看<a href=\"tutorial.html#%E4%BD%BF%E7%94%A8%20dataset%20%E7%AE%A1%E7%90%86%E6%95%B0%E6%8D%AE\" target=\"_blank\">dataset使用教程</a></p>\n<pre><code class=\"lang-js\">$.get(&#39;data/asset/data/life-expectancy-table.json&#39;, function (data) {\n    myChart.setOption({\n        grid3D: {},\n        xAxis3D: {},\n        yAxis3D: {},\n        zAxis3D: {},\n        dataset: {\n            source: data\n        },\n        series: [\n            {\n                type: &#39;scatter3D&#39;,\n                symbolSize: 2.5\n            }\n        ]\n    })\n});\n</code></pre>\n<p><img width=\"\" height=\"auto\" src=\"documents/asset/img/gl/scatter3D-life.png\"></p>\n<p>默认会把前三列,也就是收入(Income),人均寿命(Life Expectancy),人口(Population)分别放到 x、 y、 z 轴上。</p>\n<p>使用 encode 属性我们还可以将指定列的数据映射到指定的坐标轴上,从而省去很多繁琐的数据转换代码。例如我们将 x 轴换成是国家(Country),y 轴换成年份(Year),z 轴换成收入(Income),可以看到不同国家不同年份的人均收入分布。</p>\n<pre><code class=\"lang-js\">myChart.setOption({\n    grid3D: {},\n    xAxis3D: {\n        // 因为 x 轴和 y 轴都是类目数据,所以需要设置 type: &#39;category&#39; 保证正确显示数据。\n        type: &#39;category&#39;\n    },\n    yAxis3D: {\n        type: &#39;category&#39;\n    },\n    zAxis3D: {},\n    dataset: {\n        source: data\n    },\n    series: [\n        {\n            type: &#39;scatter3D&#39;,\n            symbolSize: 2.5,\n            encode: {\n                // 维度的名字默认就是表头的属性名\n                x: &#39;Country&#39;,\n                y: &#39;Year&#39;,\n                z: &#39;Income&#39;,\n                tooltip: [0, 1, 2, 3, 4]\n            }\n        }\n    ]\n});\n</code></pre>\n<h2 id=\"-visualmap-\">利用 visualMap 组件对三维散点图进行视觉编码</h2>\n<p>刚才多维数据的例子中,我们还有几个维度(列)没能表达出来,利用 ECharts 内置的 <a href=\"option.html#visualMap\" target=\"_blank\">visualMap</a> 组件我们可以继续将第四个维度编码成颜色。</p>\n<pre><code class=\"lang-js\">myChart.setOption({\n    grid3D: {\n        viewControl: {\n            // 使用正交投影。\n            projection: &#39;orthographic&#39;\n        }\n    },\n    xAxis3D: {\n        // 因为 x 轴和 y 轴都是类目数据,所以需要设置 type: &#39;category&#39; 保证正确显示数据。\n        type: &#39;category&#39;\n    },\n    yAxis3D: {\n        type: &#39;log&#39;\n    },\n    zAxis3D: {},\n    visualMap: {\n        calculable: true,\n        max: 100,\n        // 维度的名字默认就是表头的属性名\n        dimension: &#39;Life Expectancy&#39;,\n        inRange: {\n            color: [&#39;#313695&#39;, &#39;#4575b4&#39;, &#39;#74add1&#39;, &#39;#abd9e9&#39;, &#39;#e0f3f8&#39;, &#39;#ffffbf&#39;, &#39;#fee090&#39;, &#39;#fdae61&#39;, &#39;#f46d43&#39;, &#39;#d73027&#39;, &#39;#a50026&#39;]\n        }\n    },\n    dataset: {\n        source: data\n    },\n    series: [\n        {\n            type: &#39;scatter3D&#39;,\n            symbolSize: 5,\n            encode: {\n                // 维度的名字默认就是表头的属性名\n                x: &#39;Country&#39;,\n                y: &#39;Population&#39;,\n                z: &#39;Income&#39;,\n                tooltip: [0, 1, 2, 3, 4]\n            }\n        }\n    ]\n})\n</code></pre>\n<p>这段代码中我们又在刚才的例子基础上加入了 <a href=\"option.html#visualMap\" target=\"_blank\">visualMap</a> 组件,将<code class=\"codespan\">Life Expectancy</code>这一列数据映射到了不同的颜色。</p>\n<p>除此之外我们还把原来默认的透视投影改成了正交投影。正交投影在某些场景中可以避免因为近大远小所造成的表达错误。</p>\n<p><img width=\"\" height=\"auto\" src=\"documents/asset/img/gl/scatter3D-color.png\"></p>\n<p>当然,除了 <a href=\"option.html#visualMap\" target=\"_blank\">visualMap</a> 组件,还可以利用其它的 ECharts 内置组件并且充分利用这些组件的交互效果,比如 <a href=\"option.html#legend\" target=\"_blank\">legend</a>。也可以像 <a href=\"https://echarts.apache.org/examples/zh/editor.html?c=scatter3d-scatter&amp;gl=1\" target=\"_blank\">三维散点图和散点矩阵结合使用</a> 这个例子一样实现二维和三维的系列混搭。</p>\n<p>在实现 GL 的时候我们尽可能地把 WebGL 和 Canvas 之间的差异屏蔽了到最小,从而让 GL 的使用可以更加方便自然。</p>\n<h2 id=\"-\">在笛卡尔坐标系上显示其它类型的三维图表</h2>\n<p>除了散点图,我们也可以通过 GL 在三维的笛卡尔坐标系上绘制其它类型的三维图表。比如刚才例子中将 <code class=\"codespan\">scatter3D</code> 类型改成 <code class=\"codespan\">bar3D</code> 就可以变成一个三维的柱状图。</p>\n<p><img width=\"\" height=\"auto\" src=\"documents/asset/img/gl/bar3D.png\"></p>\n<p>还有机器学习中会用到的三维曲面图 <a href=\"option-gl.html#series-surface\" target=\"_blank\">surface</a>,三维曲面图常用来表达平面上的数据走势,刚才的正态分布数据我们也可以像下面这样画成曲面图。</p>\n<pre><code class=\"lang-js\">var data = [];\n// 曲面图要求给入的数据是网格形式按顺序分布。\nfor (var y = -50; y &lt;= 50; y++) {\n    for (var x = -50; x &lt;= 50; x++) {\n        var z = gaussian(x, y);\n        data.push([x, y, z]);\n    }\n}\noption = {\n    grid3D: {},\n    xAxis3D: {},\n    yAxis3D: {},\n    zAxis3D: { max: 60 },\n    series: [{\n        type: &#39;surface&#39;,\n        data: data\n    }]\n}\n</code></pre>\n<p><img width=\"\" height=\"auto\" src=\"documents/asset/img/gl/surface.png\"></p>\n<h2 id=\"-\">老板想要立体的柱状图效果</h2>\n<p>最后,我们经常会被问到如何用 ECharts 画只有二维数据的立体柱状图效果。一般来说我们是不推荐这么做的,因为这种不必要的立体柱状图很容易造成错误的表达,具体可以见我们 <a href=\"https://vis.baidu.com/chartusage/bar/\" target=\"_blank\">柱状图使用指南</a> 中的解释。</p>\n<p>但是如果有一些其他因素导致必须得画成立体的柱状图的话,用 GL 也可以实现。<a href=\"https://gallery.echartsjs.com/explore.html?u=bd-3056387051\" target=\"_blank\">丶灬豆奶</a> 和 <a href=\"https://gallery.echartsjs.com/explore.html?u=bd-809368804\" target=\"_blank\">阿洛儿啊</a> 在 Gallery 已经写了类似的例子,大家可以参考。</p>\n<p><a href=\"https://gallery.echartsjs.com/explore.html?u=bd-3056387051\" target=\"_blank\">3D堆积柱状图</a></p>\n<p><a href=\"https://gallery.echartsjs.com/editor.html?c=xryQDPYK0b\" target=\"_blank\">3D柱状图</a></p>\n<p><img width=\"\" height=\"auto\" src=\"documents/asset/img/gl/bar3D-2d-data.png\"></p>\n"},"在微信小程序中使用 ECharts":{"type":["*"],"description":"<p>我们接到了很多微信小程序开发者的反馈,表示他们强烈需要像 Apache ECharts<sup>TM</sup> 这样的可视化工具。但是微信小程序是不支持 DOM 操作的,Canvas 接口也和浏览器不尽相同。</p>\n<p>因此,我们和微信小程序官方团队合作,提供了 ECharts 的微信小程序版本。开发者可以通过熟悉的 ECharts 配置方式,快速开发图表,满足各种可视化需求。</p>\n<h2 id=\"-\">体验示例小程序</h2>\n<p>在微信中扫描下面的二维码即可体验 ECharts Demo:</p>\n<p><img width=\"auto\" height=\"auto\" src=\"https://github.com/ecomfe/echarts-for-weixin/raw/master/img/weixin-app.jpg\"></p>\n<h2 id=\"-\">下载</h2>\n<p>为了兼容小程序 Canvas,我们提供了一个小程序的组件,用这种方式可以方便地使用 ECharts。</p>\n<p>首先,下载 GitHub 上的 <a href=\"https://github.com/ecomfe/echarts-for-weixin\" target=\"_blank\">ecomfe/echarts-for-weixin</a> 项目。</p>\n<p>其中,<code class=\"codespan\">ec-canvas</code> 是我们提供的组件,其他文件是如何使用该组件的示例。</p>\n<p><code class=\"codespan\">ec-canvas</code> 目录下有一个 <code class=\"codespan\">echarts.js</code>,默认我们会在每次 <code class=\"codespan\">echarts-for-weixin</code> 项目发版的时候替换成最新版的 ECharts。如有必要,可以自行从 ECharts 项目中下载<a href=\"https://github.com/apache/echarts/releases\" target=\"_blank\">最新发布版</a>,或者从<a href=\"https://echarts.apache.org/builder.html\" target=\"_blank\">官网自定义构建</a>以减小文件大小。</p>\n<h2 id=\"-\">引入组件</h2>\n<p>微信小程序的项目创建可以参见<a href=\"https://developers.weixin.qq.com/miniprogram/dev/framework/quickstart/\" target=\"_blank\">微信公众平台官方文档</a>。</p>\n<p>在创建项目之后,可以将下载的 <a href=\"https://github.com/ecomfe/echarts-for-weixin\" target=\"_blank\">ecomfe/echarts-for-weixin</a> 项目完全替换新建的项目,然后将修改代码;或者仅拷贝 <code class=\"codespan\">ec-canvas</code> 目录到新建的项目下,然后做相应的调整。</p>\n<p>如果采用完全替换的方式,需要将 <code class=\"codespan\">project.config.json</code> 中的 <code class=\"codespan\">appid</code> 替换成在公众平台申请的项目 id。<code class=\"codespan\">pages</code> 目录下的每个文件夹是一个页面,可以根据情况删除不需要的页面,并且在 <code class=\"codespan\">app.json</code> 中删除对应页面。</p>\n<p>如果仅拷贝 <code class=\"codespan\">ec-canvas</code> 目录,则可以参考 <code class=\"codespan\">pages/bar</code> 目录下的几个文件的写法。下面,我们具体地说明。</p>\n<h2 id=\"-\">创建图表</h2>\n<p>首先,在 <code class=\"codespan\">pages/bar</code> 目录下新建以下几个文件:<code class=\"codespan\">index.js</code>、 <code class=\"codespan\">index.json</code>、 <code class=\"codespan\">index.wxml</code>、 <code class=\"codespan\">index.wxss</code>。并且在 <code class=\"codespan\">app.json</code> 的 <code class=\"codespan\">pages</code> 中增加 <code class=\"codespan\">&#39;pages/bar/index&#39;</code>。</p>\n<p><code class=\"codespan\">index.json</code> 配置如下:</p>\n<pre><code class=\"lang-json\">{\n  &quot;usingComponents&quot;: {\n    &quot;ec-canvas&quot;: &quot;../../ec-canvas/ec-canvas&quot;\n  }\n}\n</code></pre>\n<p>这一配置的作用是,允许我们在 <code class=\"codespan\">pages/bar/index.wxml</code> 中使用 <code class=\"codespan\">&lt;ec-canvas&gt;</code> 组件。注意路径的相对位置要写对,如果目录结构和本例相同,就应该像上面这样配置。</p>\n<p><code class=\"codespan\">index.wxml</code> 中,我们创建了一个 <code class=\"codespan\">&lt;ec-canvas&gt;</code> 组件,内容如下:</p>\n<pre><code class=\"lang-xml\">&lt;view class=&quot;container&quot;&gt;\n  &lt;ec-canvas id=&quot;mychart-dom-bar&quot; canvas-id=&quot;mychart-bar&quot; ec=&quot;{{ ec }}&quot;&gt;&lt;/ec-canvas&gt;\n&lt;/view&gt;\n</code></pre>\n<p>其中 <code class=\"codespan\">ec</code> 是一个我们在 <code class=\"codespan\">index.js</code> 中定义的对象,它使得图表能够在页面加载后被初始化并设置。<code class=\"codespan\">index.js</code> 的结构如下:</p>\n<pre><code class=\"lang-js\">function initChart(canvas, width, height) {\n  const chart = echarts.init(canvas, null, {\n    width: width,\n    height: height\n  });\n  canvas.setChart(chart);\n\n  var option = {\n    ...\n  };\n  chart.setOption(option);\n  return chart;\n}\n\nPage({\n  data: {\n    ec: {\n      onInit: initChart\n    }\n  }\n});\n</code></pre>\n<p>这对于所有 ECharts 图表都是通用的,用户只需要修改上面 <code class=\"codespan\">option</code> 的内容,即可改变图表。<code class=\"codespan\">option</code> 的使用方法参见 <a href=\"option.html\" target=\"_blank\">ECharts 配置项文档</a>。对于不熟悉 ECharts 的用户,可以参见 <a href=\"tutorial.html#5%20%E5%88%86%E9%92%9F%E4%B8%8A%E6%89%8B%20ECharts\" target=\"_blank\">5 分钟上手 ECharts</a> 教程。</p>\n<p>完整的例子请参见 <a href=\"https://github.com/ecomfe/echarts-for-weixin\" target=\"_blank\">ecomfe/echarts-for-weixin</a> 项目。</p>\n<h2 id=\"-\">暂不支持的功能</h2>\n<p>ECharts 中的绝大部分功能都支持小程序版本,因此这里仅说明不支持的功能,以及存在的问题。</p>\n<p>以下功能尚不支持,如果有相关需求请在 <a href=\"https://github.com/ecomfe/echarts-for-weixin/issues\" target=\"_blank\">issue</a> 中向我们反馈,对于反馈人数多的需求将优先支持:</p>\n<ul>\n<li>Tooltip</li>\n<li>图片</li>\n<li>多个 zlevel 分层</li>\n</ul>\n<p>此外,目前还有一些 bug 尚未修复,部分需要小程序团队配合上线支持,但不影响基本的使用。已知的 bug 包括:</p>\n<ul>\n<li>安卓平台:transform 的问题(会影响关系图边两端的标记位置、旭日图文字位置等)</li>\n<li>iOS 平台:半透明略有变深的问题</li>\n<li>iOS 平台:渐变色出现在定义区域之外的地方</li>\n</ul>\n<p>如有其它问题,也欢迎在 <a href=\"https://github.com/ecomfe/echarts-for-weixin/issues\" target=\"_blank\">issue</a> 中向我们反馈,谢谢!</p>\n"}}}}
\ No newline at end of file
diff --git a/zh/index.html b/zh/index.html
index 704523e..35de14f 100644
--- a/zh/index.html
+++ b/zh/index.html
@@ -7,7 +7,7 @@
     document.head.insertBefore(el, document.getElementById('font-hack'));
 }
 </script><title>Apache ECharts</title><script src="https://cdn.jsdelivr.net/npm/scrollreveal@4.0.7/dist/scrollreveal.min.js"></script><script src="https://cdn.jsdelivr.net/npm/lottie-web@5.7.6/build/player/lottie.min.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script></head><!--[if lte IE 8]><body class="lower-ie"><div id="lowie-main"><img src="https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/forie.png?_v_=20200710_1" alt="ie tip"></div></body><![endif]-->
-<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><div id="apache-banner"><div class="txt"><p>请访问 Apache ECharts 的官网 &nbsp;</p><a id="a1" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target="_blank" onclick="logApache()" class="btn btn-main"><div>访问官网</div></a><a href="javascript:;" onclick="closeApacheBanner(true)" class="close-btn">x</a></div><div id="main"><nav role="navigation" class="navbar navbar-default navbar-fixed-top"><div class="container-fluid"><div class="navbar-header"><button type="button" data-toggle="collapse" data-target="#navbar-collapse" 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="https://echarts.apache.org/zh/index.html" class="navbar-brand"><img src="https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/logo.png?_v_=20200710_1" alt="echarts logo" class="navbar-logo"></a></div><div id="navbar-collapse" class="collapse navbar-collapse"><ul class="nav navbar-nav navbar-left"><li id="nav-index"><a href="https://echarts.apache.org/zh/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="https://echarts.apache.org/zh/feature.html">特性</a></li><li><a href="https://echarts.apache.org/zh/tutorial.html">教程</a></li><li><a href="https://echarts.apache.org/zh/api.html">API</a></li><li><a href="https://echarts.apache.org/zh/option.html">配置项手册</a></li><li><a href="https://echarts.apache.org/zh/changelog.html">版本记录</a></li><li><a href="https://echarts.apache.org/zh/faq.html">常见问题</a></li><li><a href="https://echarts.apache.org/zh/tutorial.html#ECharts%205%20升级指南">v5 升级指南<span class="new">new</span></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="https://echarts.apache.org/zh/download.html">下载</a></li><li><a href="https://echarts.apache.org/zh/download-theme.html">主题下载</a></li><li><a href="https://echarts.apache.org/zh/download-extension.html">扩展下载</a></li></ul></li><li id="nav-examples"><a href="https://echarts.apache.org/examples/zh/index.html">示例</a></li><li id="nav-resources"><a href="#" data-toggle="dropdown" class="dropdown-toggle">资源<b class="caret"></b></a><ul class="dropdown-menu"><li><a href="https://echarts.apache.org/zh/spreadsheet.html">表格工具</a></li><li><a href="https://echarts.apache.org/zh/theme-builder.html">主题构建工具</a></li><li><a href="https://echarts.apache.org/zh/cheat-sheet.html">术语速查手册</a></li><li><a href="https://echarts.apache.org/zh/resources.html">更多资源</a></li></ul></li><li id="nav-contribute"><a href="#" data-toggle="dropdown" class="dropdown-toggle">社区<b class="caret"></b></a><ul class="dropdown-menu"><li><a href="https://echarts.apache.org/zh/events.html">活动</a></li><li><a href="https://echarts.apache.org/zh/committers.html">贡献者列表</a></li><li><a href="https://echarts.apache.org/zh/maillist.html">邮件列表</a></li><li><a href="https://echarts.apache.org/zh/contributing.html">如何贡献</a></li><li><a href="https://echarts.apache.org/zh/dependencies.html">依赖项</a></li><li><a href="https://echarts.apache.org/zh/coding-standard.html">代码规范</a></li><li><a href="https://github.com/apache/echarts" target="_blank">源码(GitHub)<svg width="15px" height="15px" viewbox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="icon-external-link"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></li><li><a href="https://github.com/apache/echarts/issues" target="_blank">Issues(GitHub)<svg width="15px" height="15px" viewbox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="icon-external-link"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></li></ul></li><li id="nav-others"><a href="#" data-toggle="dropdown" class="dropdown-toggle">ASF<b class="caret"></b></a><ul class="dropdown-menu"><li><a href="https://www.apache.org/" target="_blank">Apache Software Foundation<svg width="15px" height="15px" viewbox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="icon-external-link"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></li><li><a href="https://echarts.apache.org/zh/security.html">安全</a></li><li><a href="https://www.apache.org/licenses/" target="_blank">版权<svg width="15px" height="15px" viewbox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="icon-external-link"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></li><li><a href="https://www.apache.org/events/current-event" target="_blank">活动<svg width="15px" height="15px" viewbox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="icon-external-link"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank">捐赠<svg width="15px" height="15px" viewbox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="icon-external-link"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank">鸣谢<svg width="15px" height="15px" viewbox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="icon-external-link"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></li></ul></li></ul><ul class="nav navbar-nav navbar-right"><li id="nav-homeen"><a href="javascript:;" onclick="changeLang('en')">EN</a></li></ul></div></div></nav><div id="page-index" class="page-main"><div id="main-content"><section id="home-section"><div class="home-brand-panel description container"><div class="home-info"><div class="home-brand">Apache ECharts</div><div class="home-subtitle">一个基于 JavaScript 的开源可视化图表库</div><div class="home-btn-panel"><a href="https://echarts.apache.org/tutorial.html#5%20分钟上手%20ECharts" class="btn btn-main btn-index-home"><svg width="22px" height="19px" viewBox="0 0 17 22" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="index-home-svg"><path fill="#fff" d="M10.9,16.2 C10.9,16.8 10.5,17.2 9.9,17.2 L5.3,17.2 C4.7,17.2 4.3,16.8 4.3,16.2 C4.3,15.6 4.7,15.2 5.3,15.2 L9.9,15.2 C10.5,15.2 10.9,15.7 10.9,16.2 Z M13.6,7.5 L5.3,7.5 C4.7,7.5 4.3,7.9 4.3,8.5 C4.3,9.1 4.7,9.5 5.3,9.5 L13.6,9.5 C14.2,9.5 14.6,9.1 14.6,8.5 C14.6,7.9 14.2,7.5 13.6,7.5 Z M17.9,6 L17.9,19 C17.9,20.7 16.6,22 14.9,22 L3.9,22 C2.2,22 0.9,20.7 0.9,19 L0.9,7.5 L0.9,6 L0.9,5 L0.9,4 L0.9,2 C0.9,0.9 1.8,0 2.9,0 L12.9,0 C14,0 14.9,0.9 14.9,2 L14.9,3 C16.6,3 17.9,4.3 17.9,6 Z M2.9,3 L3.9,3 L12.9,3 L12.9,2 L2.9,2 L2.9,3 Z M15.9,6 C15.9,5.4 15.5,5 14.9,5 L3.9,5 C3.3,5 2.9,5.4 2.9,6 L2.9,19 C2.9,19.6 3.3,20 3.9,20 L14.9,20 C15.5,20 15.9,19.6 15.9,19 L15.9,6 Z M13.6,11.5 L5.3,11.5 C4.7,11.5 4.3,11.9 4.3,12.5 C4.3,13.1 4.7,13.5 5.3,13.5 L13.6,13.5 C14.2,13.5 14.6,13.1 14.6,12.5 C14.6,11.9 14.2,11.5 13.6,11.5 Z"></path></svg><span>快速入门</span></a><a href="https://echarts.apache.org/examples/zh/index.html" class="btn btn-main btn-index-home"><svg width="25px" height="19px" viewBox="0 0 17 22" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="index-home-svg"><path fill="#F72C5B" d="M21,0 L6,0 C4.9,0 4,0.9 4,2 L4,4 L2,4 C0.9,4 0,4.9 0,6 L0,18 C0,19.1 0.9,20 2,20 L17,20 C18.1,20 19,19.1 19,18 L19,16 L21,16 C22.1,16 23,15.1 23,14 L23,2 C23,0.9 22.1,0 21,0 Z M17,18 L2,18 L2,6 L17,6 L17,18 Z M21,14 L19,14 L19,6 C19,4.9 18.1,4 17,4 L6,4 L6,2 L21,2 L21,14 Z M4,15 L4,12 C4,11.4 4.4,11 5,11 C5.6,11 6,11.4 6,12 L6,15 C6,15.6 5.6,16 5,16 C4.4,16 4,15.6 4,15 Z M13,15 L13,12 C13,11.4 13.4,11 14,11 C14.6,11 15,11.4 15,12 L15,15 C15,15.6 14.6,16 14,16 C13.4,16 13,15.6 13,15 Z M7,15 L7,9 C7,8.4 7.4,8 8,8 C8.6,8 9,8.4 9,9 L9,15 C9,15.6 8.6,16 8,16 C7.4,16 7,15.6 7,15 Z M10,15 L10,11 C10,10.4 10.4,10 11,10 C11.6,10 12,10.4 12,11 L12,15 C12,15.6 11.6,16 11,16 C10.4,16 10,15.6 10,15 Z"></path></svg><span>所有示例</span></a><a href="https://github.com/apache/echarts" target="_blank" class="btn btn-main btn-index-home btn-index-github"><svg width="22px" height="22px" viewBox="0 0 22 22" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g transform="translate(-262.000000, -2480.000000)" fill="#081642"><g transform="translate(252.000000, 2470.000000)"><path d="M29.9006449,27.904446 C28.5016932,29.8668872 26.6944882,31.2248797 24.4790301,31.9784237 C24.2211218,32.0272886 24.0325745,31.9931534 23.9133882,31.876018 C23.7942019,31.7588827 23.7346171,31.6119968 23.7346338,31.4353603 L23.7346338,28.3376019 C23.7346338,27.3880159 23.4865017,26.6930482 22.9902375,26.2526987 C23.5347812,26.1938141 24.024319,26.1058042 24.458851,25.9886688 C24.893383,25.8715335 25.3422785,25.680801 25.8055376,25.4164714 C26.2687966,25.1521418 26.6556591,24.8267354 26.9661251,24.4402521 C27.276591,24.0537688 27.5296112,23.5398222 27.7251857,22.8984123 C27.9207602,22.2570024 28.0185475,21.5203805 28.0185475,20.6885464 C28.0185475,19.504056 27.6414612,18.4959023 26.8872886,17.6640854 C27.240536,16.7733669 27.2023419,15.7752328 26.7727063,14.6696833 C26.5050218,14.5813565 26.1181593,14.6352226 25.6121189,14.8312818 C25.1060784,15.0273409 24.6669591,15.2428141 24.2947609,15.4777015 L23.7502256,15.8300324 C22.8622108,15.5757225 21.9454689,15.4485675 21,15.4485675 C20.0545311,15.4485675 19.1377892,15.5757225 18.2497744,15.8300324 C18.0969813,15.7223001 17.8940788,15.5901353 17.641067,15.433538 C17.3880551,15.2769408 16.9892689,15.0884007 16.4447085,14.8679176 C15.9001481,14.6474346 15.4894467,14.5813479 15.2126043,14.6696576 C14.7921266,15.7758408 14.7588206,16.7739749 15.1126863,17.6640597 C14.3585137,18.4958938 13.9814275,19.5040475 13.9814275,20.6885208 C13.9814275,21.5203548 14.0792147,22.2544676 14.2747892,22.8908591 C14.4703637,23.5272505 14.720944,24.0411971 15.0265302,24.4326988 C15.3321164,24.8242005 15.7165391,25.1521076 16.1797981,25.41642 C16.6430571,25.6807325 17.0919527,25.871465 17.5264847,25.9886174 C17.9610167,26.1057699 18.4505545,26.1937799 18.9950982,26.2526473 C18.6131238,26.60467 18.3790461,27.1085884 18.292865,27.7644025 C18.0924107,27.8621152 17.8775846,27.935404 17.6483866,27.984269 C17.4191886,28.0331339 17.1469167,28.0575663 16.831571,28.0575663 C16.5162253,28.0575663 16.203612,27.9523346 15.8937309,27.7418712 C15.5838499,27.5314078 15.3189144,27.225424 15.0989244,26.8239198 C14.9174043,26.5107253 14.6857747,26.2564154 14.4040358,26.0609899 C14.1222969,25.8655645 13.8860801,25.7481209 13.6953854,25.708659 L13.4084408,25.6644956 C13.2079866,25.6644956 13.069557,25.6864188 12.9931521,25.7302654 C12.9167472,25.7741119 12.8929083,25.8304873 12.9216353,25.8993914 C12.9503623,25.9682956 12.9934529,26.0368829 13.050907,26.1051533 C13.1083611,26.1734238 13.1703941,26.2319915 13.2370061,26.2808564 L13.336924,26.3541538 C13.5471712,26.4518665 13.7549701,26.6378974 13.9603209,26.9122466 C14.1656716,27.1865958 14.3160164,27.4362043 14.4113555,27.661072 L14.554364,27.9983735 C14.67843,28.3704354 14.8886689,28.6714094 15.1850804,28.9012955 C15.481492,29.1311815 15.8014334,29.2780674 16.1449045,29.3419532 C16.4883756,29.405839 16.8202406,29.4399742 17.1404995,29.4443589 C17.4607584,29.4487435 17.7256939,29.4315218 17.935306,29.3926936 L18.2644137,29.3335008 C18.2644137,29.7055627 18.2668619,30.1412107 18.2717584,30.6404447 C18.2766548,31.1396787 18.279103,31.4040083 18.279103,31.4334334 C18.279103,31.6094533 18.21707,31.7563392 18.093004,31.8740912 C17.9689379,31.9918431 17.7779507,32.0259784 17.5200424,31.9764969 C15.3045843,31.22297 13.4973793,29.8649774 12.0984276,27.9025191 C10.6994759,25.9400608 10,23.7305118 10,21.2738721 C10,19.2281225 10.4916769,17.3417791 11.4750308,15.6148418 C12.4583846,13.8879045 13.7928551,12.5202092 15.4784422,11.5117558 C17.1640293,10.5033024 19.0045486,9.99938397 21,10.0000006 C22.9954514,10.0006172 24.8359707,10.5045356 26.5215578,11.5117558 C28.2071449,12.518976 29.5416154,13.8866713 30.5249692,15.6148418 C31.5083231,17.3430123 32,19.2293557 32,21.2738721 C31.9990725,23.7324558 31.2995966,25.9420048 29.9006449,27.904446 Z"></path></g></g></g></svg></a></div></div><div class="home-chart"><img src="https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/index-home-pie.png?_v_=20200710_1"></div></div></section><section><div class="container"><a href="https://echarts-5-live.bj.bcebos.com/echarts-5-event.html?ref=ec-event" class="event"><picture><source data-srcset="https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/event/20200128-apache-echarts-5.webp?_v_=20200710_1" type="image/webp" class="lazy"><source data-srcset="https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/event/20200128-apache-echarts-5.png?_v_=20200710_1" type="image/jpeg" class="lazy"><img data-src="https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/event/20200128-apache-echarts-5.png?_v_=20200710_1" alt="Apache ECharts 5 Official Release" class="lazy"></picture></a></div></section><section id="feature-section"><div class="container"><div class="index-features"><h2 class="reveal">特性</h2><hr class="reveal"><a href="https://echarts.apache.org/feature.html" class="more reveal">查看完整特性</a></div><div class="row"><div class="col-md-6"><div id="index-feature-1" class="index-feature"><div class="index-feature-left reveal"><div id="bg-icon-1" class="index-feature-icon-bg"></div><div id="icon-1" class="index-feature-icon"></div></div><div class="index-feature-right reveal"><h3 class="reveal">丰富的图表类型</h3><p class="reveal-later">提供开箱即用的 20 多种图表和十几种组件,并且支持各种图表以及组件的任意组合。</p></div></div></div><div class="col-md-6"><div id="index-feature-2" class="index-feature"><div class="index-feature-left reveal"><div id="bg-icon-2" class="index-feature-icon-bg"></div><div id="icon-2" class="index-feature-icon"></div></div><div class="index-feature-right"><h3 class="reveal">强劲的渲染引擎</h3><p class="reveal-later">Canvas、SVG 双引擎一键切换,增量渲染、流加载等技术实现千万级数据的流畅交互。</p></div></div></div><div class="col-md-6"><div id="index-feature-3" class="index-feature"><div class="index-feature-left reveal"><div id="bg-icon-3" class="index-feature-icon-bg"></div><div id="icon-3" class="index-feature-icon"></div></div><div class="index-feature-right"><h3 class="reveal">专业的数据分析</h3><p class="reveal-later">通过数据集管理数据,支持数据过滤、聚类、回归,帮助实现同一份数据的多维度分析。</p></div></div></div><div class="col-md-6"><div id="index-feature-4" class="index-feature"><div class="index-feature-left reveal"><div id="bg-icon-4" class="index-feature-icon-bg"></div><div id="icon-4" class="index-feature-icon"></div></div><div class="index-feature-right"><h3 class="reveal">优雅的可视化设计</h3><p class="reveal-later">默认设计遵从可视化原则,支持响应式设计,并且提供了灵活的配置项方便开发者定制。</p></div></div></div><div class="col-md-6"><div id="index-feature-5" class="index-feature"><div class="index-feature-left reveal"><div id="bg-icon-5" class="index-feature-icon-bg"></div><div id="icon-5" class="index-feature-icon"></div></div><div class="index-feature-right"><h3 class="reveal">健康的开源社区</h3><p class="reveal-later">活跃的社区用户保证了项目的健康发展,也贡献了丰富的第三方插件满足不同场景的需求。</p></div></div></div><div class="col-md-6"><div id="index-feature-6" class="index-feature"><div class="index-feature-left reveal"><div id="bg-icon-6" class="index-feature-icon-bg"></div><div id="icon-6" class="index-feature-icon"></div></div><div class="index-feature-right"><h3 class="reveal">友好的无障碍访问</h3><p class="reveal-later">智能生成的图表描述和贴花图案,帮助视力障碍人士了解图表内容,读懂图表背后的故事。</p></div></div></div></div></div></section><section id="publication"><div class="container"><div id="start-line"></div><div class="paper"><div class="content"><h2 class="reveal-latest">ECharts: A Declarative Framework for Rapid Construction of Web-based Visualization</h2><p class="note reveal-latest">如果您在科研项目、产品、学术论文、技术报告、新闻报告、教育、专利以及其他相关活动中使用了 Apache ECharts,欢迎引用本论文。</p><div class="single-btn-panel reveal-latest"><a href="http://www.cad.zju.edu.cn/home/vagblog/VAG_Work/echarts.pdf" class="pdf reveal-later">Visual Informatics, 2018 [PDF]</a></div></div><div class="icon"><div id="paper-icon"></div></div></div><div id="end-line"></div></div></section><section id="about-section" class="normal reveal-about"><div class="container"><h3>关注我们</h3><hr><p>关注我们以及时获得更多最新动态</p><div class="btn-panel row"><div class="col-lg-3 col-sm-6"><a id="btn-github" href="https://github.com/apache/echarts"><div class="btn-content"><div class="btn-logo"><svg width="22px" height="22px" viewBox="0 0 22 22" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g transform="translate(-262.000000, -2480.000000)" fill="#081642"><g transform="translate(252.000000, 2470.000000)"><path d="M29.9006449,27.904446 C28.5016932,29.8668872 26.6944882,31.2248797 24.4790301,31.9784237 C24.2211218,32.0272886 24.0325745,31.9931534 23.9133882,31.876018 C23.7942019,31.7588827 23.7346171,31.6119968 23.7346338,31.4353603 L23.7346338,28.3376019 C23.7346338,27.3880159 23.4865017,26.6930482 22.9902375,26.2526987 C23.5347812,26.1938141 24.024319,26.1058042 24.458851,25.9886688 C24.893383,25.8715335 25.3422785,25.680801 25.8055376,25.4164714 C26.2687966,25.1521418 26.6556591,24.8267354 26.9661251,24.4402521 C27.276591,24.0537688 27.5296112,23.5398222 27.7251857,22.8984123 C27.9207602,22.2570024 28.0185475,21.5203805 28.0185475,20.6885464 C28.0185475,19.504056 27.6414612,18.4959023 26.8872886,17.6640854 C27.240536,16.7733669 27.2023419,15.7752328 26.7727063,14.6696833 C26.5050218,14.5813565 26.1181593,14.6352226 25.6121189,14.8312818 C25.1060784,15.0273409 24.6669591,15.2428141 24.2947609,15.4777015 L23.7502256,15.8300324 C22.8622108,15.5757225 21.9454689,15.4485675 21,15.4485675 C20.0545311,15.4485675 19.1377892,15.5757225 18.2497744,15.8300324 C18.0969813,15.7223001 17.8940788,15.5901353 17.641067,15.433538 C17.3880551,15.2769408 16.9892689,15.0884007 16.4447085,14.8679176 C15.9001481,14.6474346 15.4894467,14.5813479 15.2126043,14.6696576 C14.7921266,15.7758408 14.7588206,16.7739749 15.1126863,17.6640597 C14.3585137,18.4958938 13.9814275,19.5040475 13.9814275,20.6885208 C13.9814275,21.5203548 14.0792147,22.2544676 14.2747892,22.8908591 C14.4703637,23.5272505 14.720944,24.0411971 15.0265302,24.4326988 C15.3321164,24.8242005 15.7165391,25.1521076 16.1797981,25.41642 C16.6430571,25.6807325 17.0919527,25.871465 17.5264847,25.9886174 C17.9610167,26.1057699 18.4505545,26.1937799 18.9950982,26.2526473 C18.6131238,26.60467 18.3790461,27.1085884 18.292865,27.7644025 C18.0924107,27.8621152 17.8775846,27.935404 17.6483866,27.984269 C17.4191886,28.0331339 17.1469167,28.0575663 16.831571,28.0575663 C16.5162253,28.0575663 16.203612,27.9523346 15.8937309,27.7418712 C15.5838499,27.5314078 15.3189144,27.225424 15.0989244,26.8239198 C14.9174043,26.5107253 14.6857747,26.2564154 14.4040358,26.0609899 C14.1222969,25.8655645 13.8860801,25.7481209 13.6953854,25.708659 L13.4084408,25.6644956 C13.2079866,25.6644956 13.069557,25.6864188 12.9931521,25.7302654 C12.9167472,25.7741119 12.8929083,25.8304873 12.9216353,25.8993914 C12.9503623,25.9682956 12.9934529,26.0368829 13.050907,26.1051533 C13.1083611,26.1734238 13.1703941,26.2319915 13.2370061,26.2808564 L13.336924,26.3541538 C13.5471712,26.4518665 13.7549701,26.6378974 13.9603209,26.9122466 C14.1656716,27.1865958 14.3160164,27.4362043 14.4113555,27.661072 L14.554364,27.9983735 C14.67843,28.3704354 14.8886689,28.6714094 15.1850804,28.9012955 C15.481492,29.1311815 15.8014334,29.2780674 16.1449045,29.3419532 C16.4883756,29.405839 16.8202406,29.4399742 17.1404995,29.4443589 C17.4607584,29.4487435 17.7256939,29.4315218 17.935306,29.3926936 L18.2644137,29.3335008 C18.2644137,29.7055627 18.2668619,30.1412107 18.2717584,30.6404447 C18.2766548,31.1396787 18.279103,31.4040083 18.279103,31.4334334 C18.279103,31.6094533 18.21707,31.7563392 18.093004,31.8740912 C17.9689379,31.9918431 17.7779507,32.0259784 17.5200424,31.9764969 C15.3045843,31.22297 13.4973793,29.8649774 12.0984276,27.9025191 C10.6994759,25.9400608 10,23.7305118 10,21.2738721 C10,19.2281225 10.4916769,17.3417791 11.4750308,15.6148418 C12.4583846,13.8879045 13.7928551,12.5202092 15.4784422,11.5117558 C17.1640293,10.5033024 19.0045486,9.99938397 21,10.0000006 C22.9954514,10.0006172 24.8359707,10.5045356 26.5215578,11.5117558 C28.2071449,12.518976 29.5416154,13.8866713 30.5249692,15.6148418 C31.5083231,17.3430123 32,19.2293557 32,21.2738721 C31.9990725,23.7324558 31.2995966,25.9420048 29.9006449,27.904446 Z"></path></g></g></g></svg><span>GitHub</span></div><div class="icon-v-right"></div></div></a></div><div class="col-lg-3 col-sm-6"><a id="btn-weixin"><div class="btn-content zh"><div class="btn-logo"><svg width="25px" height="21px" viewBox="0 0 25 21" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g transform="translate(-512.000000, -2480.000000)" fill="rgba(93, 201, 116)"><g transform="translate(512.000000, 2480.000000)"><path d="M17.6290595,6.47976119 C17.7534123,6.47976119 17.8770026,6.48260946 18,6.4873469 C17.2166965,2.79549199 13.5198007,0 9.07678865,0 C4.06379837,0 0,3.55853831 0,7.94816178 C0,10.5128275 1.38756065,12.7933344 3.54074891,14.2466508 L2.63388325,17 L5.63681512,15.3050455 C6.69779456,15.6858421 7.85912588,15.8963236 9.07676039,15.8963236 C9.31148885,15.8963236 9.54412784,15.8885344 9.77433851,15.8731886 C9.52032463,15.1807388 9.38270085,14.4428328 9.38270085,13.676822 C9.38275733,9.70202902 13.0747399,6.47976119 17.6290595,6.47976119 Z M12.5,4 C13.328411,4 14,4.67155738 14,5.5 C14,6.32841103 13.3284426,7 12.5,7 C11.6715574,7 11,6.32844262 11,5.5 C11.0000316,4.67155738 11.671589,4 12.5,4 Z M5.5,7 C4.67158897,7 4,6.32844262 4,5.5 C4,4.67158897 4.67155738,4 5.5,4 C6.32844262,4 7,4.67155738 7,5.5 C7,6.32841103 6.32844262,7 5.5,7 Z"></path><path d="M25,13.4664775 C25,9.89513318 21.6421433,7 17.4999862,7 C13.3578291,7 10,9.89513318 10,13.4664775 C10,17.0378217 13.3578567,19.9329549 17.5000138,19.9329549 C18.36973,19.9329549 19.2046277,19.804878 19.9813841,19.5701641 L22.5457108,21 L21.8004292,18.7646117 C23.7349834,17.5951163 25,15.6582837 25,13.4664775 Z M15,12 C14.447707,12 14,11.552293 14,11 C14,10.447707 14.447707,10 15,10 C15.552293,10 16,10.447707 16,11 C16,11.552293 15.552293,12 15,12 Z M20,12 C19.447707,12 19,11.552293 19,11 C19,10.447707 19.447707,10 20,10 C20.552293,10 21,10.447707 21,11 C21,11.552293 20.5522667,12 20,12 Z"></path></g></g></g></svg><span>公众号</span></div><div class="weixin-code"><img src="https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/ercode.jpg?_v_=20200710_1"></div></div></a></div><div class="col-lg-3 col-sm-6"><a id="btn-weibo" href="https://weibo.com/echarts"><div class="btn-content"><div class="btn-logo"><svg width="25px" height="20px" viewBox="0 0 25 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g transform="translate(-774.000000, -2480.000000)" fill="rgba(174, 44, 53)"><g transform="translate(767.000000, 2470.000000)"><g transform="translate(7.000000, 10.000000)"><path d="M9.56107255,18.530208 C5.55942203,18.7083394 2.28534432,16.6598289 2.28534432,13.9878588 C2.28534432,11.3158886 5.55942203,9.08924686 9.56107255,8.91111551 C13.5627231,8.73298415 16.8368008,10.4252319 16.8368008,13.0972021 C16.8368008,15.7691722 13.5627231,18.3520767 9.56107255,18.530208 Z M18.1100532,9.71270657 C17.1096406,9.53457522 17.6553202,9.0001812 17.6553202,9.0001812 C17.6553202,9.0001812 18.5647862,7.48606478 17.473427,6.32821106 C16.1092279,4.90316031 12.7442036,6.50634241 12.7442036,6.50634241 C11.4709512,6.95167077 11.8347376,6.32821106 12.0166308,5.34848869 C12.0166308,4.19063497 11.6528444,2.14212451 8.19687348,3.3890439 C4.74090259,4.54689763 1.83061129,8.7329842 1.83061129,8.7329842 C-0.26116057,11.49402 0.0116792299,13.6315961 0.0116792299,13.6315961 C0.557358851,18.3520767 5.4684754,19.5989961 9.37917931,19.9552588 C13.4717764,20.3115215 18.9285726,18.5302081 20.5656115,14.9675812 C22.1117037,11.3158886 19.1104658,9.89083792 18.1100532,9.71270657 Z"></path><path d="M12.8641827,12.2517204 C12.2123929,10.4024172 10.0707976,9.57023078 7.92920237,10.2174869 C5.78760713,10.9572081 4.57714023,12.9914416 5.13581726,14.7482796 C5.78760713,16.5975828 7.92920237,17.4297692 10.0707976,16.7825131 C12.2123929,16.135257 13.4228598,14.1010235 12.8641827,12.2517204 Z M8.11542806,15.4880009 C7.37052537,15.6729312 6.53250982,15.3955358 6.34628415,14.7482797 C6.16005847,14.1010235 6.62562266,13.4537674 7.46363821,13.176372 C8.2085409,12.9914416 9.04655645,13.2688371 9.23278212,13.9160932 C9.32589493,14.5633493 8.86033075,15.3030706 8.11542806,15.4880009 Z M10.3501361,13.176372 C10.2570233,13.4537674 9.88457196,13.6386977 9.60523346,13.5462326 C9.32589496,13.4537674 9.23278212,13.0839068 9.32589496,12.8065113 C9.4190078,12.5291159 9.79145914,12.3441855 10.0707976,12.4366507 C10.3501361,12.621581 10.5363618,12.8989765 10.3501361,13.176372 Z"></path><path d="M24.5953609,9.4285714 C24.5953609,9.3333333 24.6913146,9.2380952 24.6913146,9.14285713 C25.2670362,7.5238095 24.9791754,5.9047619 24.3075001,4.38095238 C23.0601032,1.7142857 20.3734021,0 17.4947939,0 C16.9190722,0 16.3433505,0.0952380996 15.8635825,0.190476199 L15.8635825,0.190476199 L15.8635825,0.190476199 C15.8635825,0.190476199 15.7676289,0.190476199 15.6716753,0.285714299 L15.6716753,0.285714299 C15.2878608,0.476190498 15,0.857142874 15,1.33333335 C15,2.00000002 15.479768,2.4761905 16.1514433,2.4761905 C16.2473969,2.4761905 16.3433505,2.4761905 16.5352577,2.3809524 L16.5352577,2.3809524 C16.8231186,2.1904762 17.3988402,2.09523812 17.4947938,2.09523812 L17.5907475,2.09523812 C19.6057732,2.09523812 21.5248454,3.23809527 22.3884279,5.23809525 C22.8681959,6.2857143 22.9641496,7.42857143 22.6762887,8.57142857 C22.6762887,8.66666667 22.5803351,8.85714285 22.5803351,8.95238095 C22.5803351,9.52380952 23.0601031,10 23.6358248,10 L23.827732,10 L23.827732,10 L23.9236856,10 C24.2115465,9.9047619 24.4034537,9.8095238 24.5953609,9.61904762 C24.4994073,9.5238095 24.4994073,9.5238095 24.5953609,9.4285714 C24.5953609,9.5238095 24.5953609,9.4285714 24.5953609,9.4285714 Z"></path><path d="M17.6310803,4 C17.3252528,4 16.9174827,4.08510639 16.6116551,4.08510639 C16.3058276,4.17021275 16,4.42553192 16,4.76595745 C16,5.10638297 16.3058275,5.36170214 16.7135976,5.36170214 C16.8155402,5.36170214 16.9174827,5.36170214 17.0194252,5.27659575 C17.2233102,5.27659575 17.3252527,5.19148936 17.5291378,5.19148936 C18.548563,5.19148936 19.4660456,5.87234042 19.4660456,6.72340425 C19.4660456,6.89361703 19.4660456,6.97872339 19.3641031,7.14893617 L19.3641031,7.40425531 L19.3641031,7.40425531 L19.3641031,7.40425531 L19.3641031,7.40425531 L19.3641031,7.40425531 L19.3641031,7.4893617 L19.3641031,7.4893617 C19.4660456,7.82978723 19.7718732,8 20.0777008,8 C20.3835283,8 20.5874133,7.82978723 20.7912984,7.65957447 L20.7912984,7.65957447 C20.8932409,7.40425533 20.9951834,7.06382978 20.9951834,6.72340425 C21.0971259,5.27659575 19.5679882,4 17.6310803,4 Z"></path></g></g></g></g></svg><span>微博</span></div><div class="icon-v-right"></div></div></a></div><div class="col-lg-3 col-sm-6"><a id="btn-twitter" href="https://twitter.com/ApacheECharts"><div class="btn-content"><div class="btn-logo"><svg width="22px" height="19px" viewBox="0 0 22 19" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g transform="translate(-1029.000000, -2481.000000)" fill="rgba(0, 172, 237)" fill-rule="nonzero"><g transform="translate(1019.000000, 2470.000000)"><path d="M31.9965682,13.2536272 C31.3736136,14.2239084 30.6196136,15.0506018 29.7346591,15.7332964 C29.7441818,15.8714453 29.7489318,16.0792366 29.7489318,16.3566705 C29.7489318,17.6436908 29.5720682,18.9275445 29.2183409,20.2082316 C28.8645909,21.4890636 28.3274091,22.7184796 27.6069091,23.8965522 C26.8862955,25.0746247 26.0280455,26.1166031 25.0323864,27.0222697 C24.0366364,27.9281298 22.8360682,28.6508066 21.4306364,29.1904211 C20.0251818,29.7300356 18.5226591,30 16.9230227,30 C14.4015909,30 12.0938636,29.2822545 10,27.8470776 C10.3251136,27.8862863 10.6878182,27.9059148 11.0880909,27.9059148 C13.1819545,27.9059148 15.0477727,27.2230992 16.6854545,25.8575407 C15.7087727,25.8372354 14.8339318,25.5180789 14.0609545,24.8998053 C13.288,24.281701 12.7573636,23.4924033 12.4690909,22.532299 C12.7763409,22.581612 13.0604091,22.606341 13.32125,22.606341 C13.7215227,22.606341 14.1168864,22.5518066 14.5076136,22.4428346 C13.4654545,22.214883 12.6024318,21.6632061 11.9187955,20.7878041 C11.2351591,19.9125471 10.8933409,18.8958295 10.8933409,17.7380623 L10.8933409,17.6790802 C11.5258182,18.0553092 12.2052955,18.2580242 12.9318409,18.287201 C12.3172955,17.851458 11.8288409,17.2826425 11.4667727,16.5808028 C11.1046818,15.8790598 10.923,15.1170776 10.9219318,14.2949288 C10.9219318,13.4233702 11.1267045,12.6170789 11.5365227,11.8760064 C12.6620909,13.3505127 14.0323182,14.5304949 15.6474545,15.4160496 C17.2624545,16.3015076 18.9907727,16.7936705 20.8321364,16.8924898 C20.7582955,16.5162366 20.7213636,16.1501361 20.7213636,15.7941883 C20.7213636,14.4678626 21.1608409,13.3372176 22.0398409,12.4023257 C22.9188409,11.4674338 23.9818864,11 25.2289318,11 C26.5319318,11 27.6300455,11.5048779 28.5233636,12.5144402 C29.5382045,12.306673 30.4922273,11.9209198 31.3854091,11.3572048 C31.0412273,12.4947875 30.3808409,13.3759186 29.4041364,14.0003804 C30.2700455,13.9015611 31.1353409,13.6539809 32,13.2574224 L31.9965682,13.2536272 Z"></path></g></g></g></svg><span>Twitter</span></div><div class="icon-v-right"></div></div></a></div></div></div></section></div><footer><div class="container"><div class="row"><div class="col-md-9"><p>Copyright © 2017-2021, The Apache Software Foundation Apache ECharts, ECharts, Apache, the Apache feather, and the Apache ECharts project logo are either registered trademarks or trademarks of the Apache Software Foundation.</p><div class="icon-panel"><a href="mailto:dev@echarts.apache.org?body=%28Thanks%20for%20using%20ECharts.%20Email%20us%20if%20you%20have%20non-technical%20problems%20using%20ECharts.%20For%20technical%20support%2C%20please%20go%20to%20https%3A//github.com/apache/echarts/issues%20.%29" class="footer-icon"><img src="https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/icon-email.png?_v_=20200710_1"></a><a href="https://twitter.com/ApacheECharts" class="footer-icon"><img src="https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/icon-twitter.png?_v_=20200710_1"></a><a href="https://weibo.com/echarts" class="footer-icon"><img src="https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/icon-weibo.png?_v_=20200710_1"></a><a href="https://github.com/apache/echarts" class="footer-icon"><img src="https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/icon-github.png?_v_=20200710_1"></a></div></div><div id="footer-icon-panel" class="col-md-3"><a href="https://www.apache.org"><img src="https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/asf_logo.svg?_v_=20200710_1" class="footer-apache-logo"></a></div></div></div></footer></div></div><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/gh/apache/echarts-website@asf-site/zh/js/common.js?_v_=b5b8944fb9"></script><script src="https://cdn.jsdelivr.net/npm/vanilla-lazyload@12.0.0/dist/lazyload.min.js"></script><script src="https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/js/index.js?_v_=1611734978259"></script><script async defer src="https://buttons.github.io/buttons.js"></script><script>window.lazyLoadOptions = {
+<!--[if (gt IE 8)|!(IE)]><body class="undefined"></body><![endif]--><div id="apache-banner"><div class="txt"><p>请访问 Apache ECharts 的官网 &nbsp;</p><a id="a1" href="https://echarts.apache.org/zh/index.html">https://echarts.apache.org</a></div><a href="https://echarts.apache.org" target="_blank" onclick="logApache()" class="btn btn-main"><div>访问官网</div></a><a href="javascript:;" onclick="closeApacheBanner(true)" class="close-btn">x</a></div><div id="main"><nav role="navigation" class="navbar navbar-default navbar-fixed-top"><div class="container-fluid"><div class="navbar-header"><button type="button" data-toggle="collapse" data-target="#navbar-collapse" 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="https://echarts.apache.org/zh/index.html" class="navbar-brand"><img src="https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/logo.png?_v_=20200710_1" alt="echarts logo" class="navbar-logo"></a></div><div id="navbar-collapse" class="collapse navbar-collapse"><ul class="nav navbar-nav navbar-left"><li id="nav-index"><a href="https://echarts.apache.org/zh/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="https://echarts.apache.org/zh/feature.html">特性</a></li><li><a href="https://echarts.apache.org/zh/tutorial.html">教程</a></li><li><a href="https://echarts.apache.org/zh/api.html">API</a></li><li><a href="https://echarts.apache.org/zh/option.html">配置项手册</a></li><li><a href="https://echarts.apache.org/zh/changelog.html">版本记录</a></li><li><a href="https://echarts.apache.org/zh/faq.html">常见问题</a></li><li><a href="https://echarts.apache.org/zh/tutorial.html#ECharts%205%20升级指南">v5 升级指南<span class="new">new</span></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="https://echarts.apache.org/zh/download.html">下载</a></li><li><a href="https://echarts.apache.org/zh/download-theme.html">主题下载</a></li><li><a href="https://echarts.apache.org/zh/download-extension.html">扩展下载</a></li></ul></li><li id="nav-examples"><a href="https://echarts.apache.org/examples/zh/index.html">示例</a></li><li id="nav-resources"><a href="#" data-toggle="dropdown" class="dropdown-toggle">资源<b class="caret"></b></a><ul class="dropdown-menu"><li><a href="https://echarts.apache.org/zh/spreadsheet.html">表格工具</a></li><li><a href="https://echarts.apache.org/zh/theme-builder.html">主题构建工具</a></li><li><a href="https://echarts.apache.org/zh/cheat-sheet.html">术语速查手册</a></li><li><a href="https://echarts.apache.org/zh/resources.html">更多资源</a></li></ul></li><li id="nav-contribute"><a href="#" data-toggle="dropdown" class="dropdown-toggle">社区<b class="caret"></b></a><ul class="dropdown-menu"><li><a href="https://echarts.apache.org/zh/events.html">活动</a></li><li><a href="https://echarts.apache.org/zh/committers.html">贡献者列表</a></li><li><a href="https://echarts.apache.org/zh/maillist.html">邮件列表</a></li><li><a href="https://echarts.apache.org/zh/contributing.html">如何贡献</a></li><li><a href="https://echarts.apache.org/zh/dependencies.html">依赖项</a></li><li><a href="https://echarts.apache.org/zh/coding-standard.html">代码规范</a></li><li><a href="https://github.com/apache/echarts" target="_blank">源码(GitHub)<svg width="15px" height="15px" viewbox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="icon-external-link"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></li><li><a href="https://github.com/apache/echarts/issues" target="_blank">Issues(GitHub)<svg width="15px" height="15px" viewbox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="icon-external-link"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></li></ul></li><li id="nav-others"><a href="#" data-toggle="dropdown" class="dropdown-toggle">ASF<b class="caret"></b></a><ul class="dropdown-menu"><li><a href="https://www.apache.org/" target="_blank">Apache Software Foundation<svg width="15px" height="15px" viewbox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="icon-external-link"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></li><li><a href="https://echarts.apache.org/zh/security.html">安全</a></li><li><a href="https://www.apache.org/licenses/" target="_blank">版权<svg width="15px" height="15px" viewbox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="icon-external-link"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></li><li><a href="https://www.apache.org/events/current-event" target="_blank">活动<svg width="15px" height="15px" viewbox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="icon-external-link"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank">捐赠<svg width="15px" height="15px" viewbox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="icon-external-link"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank">鸣谢<svg width="15px" height="15px" viewbox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="icon-external-link"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></li></ul></li></ul><ul class="nav navbar-nav navbar-right"><li id="nav-homeen"><a href="javascript:;" onclick="changeLang('en')">EN</a></li></ul></div></div></nav><div id="page-index" class="page-main"><div id="main-content"><section id="home-section"><div class="home-brand-panel description container"><div class="home-info"><div class="home-brand">Apache ECharts</div><div class="home-subtitle">一个基于 JavaScript 的开源可视化图表库</div><div class="home-btn-panel"><a href="https://echarts.apache.org/tutorial.html#5%20分钟上手%20ECharts" class="btn btn-main btn-index-home"><svg width="22px" height="19px" viewBox="0 0 17 22" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="index-home-svg"><path fill="#fff" d="M10.9,16.2 C10.9,16.8 10.5,17.2 9.9,17.2 L5.3,17.2 C4.7,17.2 4.3,16.8 4.3,16.2 C4.3,15.6 4.7,15.2 5.3,15.2 L9.9,15.2 C10.5,15.2 10.9,15.7 10.9,16.2 Z M13.6,7.5 L5.3,7.5 C4.7,7.5 4.3,7.9 4.3,8.5 C4.3,9.1 4.7,9.5 5.3,9.5 L13.6,9.5 C14.2,9.5 14.6,9.1 14.6,8.5 C14.6,7.9 14.2,7.5 13.6,7.5 Z M17.9,6 L17.9,19 C17.9,20.7 16.6,22 14.9,22 L3.9,22 C2.2,22 0.9,20.7 0.9,19 L0.9,7.5 L0.9,6 L0.9,5 L0.9,4 L0.9,2 C0.9,0.9 1.8,0 2.9,0 L12.9,0 C14,0 14.9,0.9 14.9,2 L14.9,3 C16.6,3 17.9,4.3 17.9,6 Z M2.9,3 L3.9,3 L12.9,3 L12.9,2 L2.9,2 L2.9,3 Z M15.9,6 C15.9,5.4 15.5,5 14.9,5 L3.9,5 C3.3,5 2.9,5.4 2.9,6 L2.9,19 C2.9,19.6 3.3,20 3.9,20 L14.9,20 C15.5,20 15.9,19.6 15.9,19 L15.9,6 Z M13.6,11.5 L5.3,11.5 C4.7,11.5 4.3,11.9 4.3,12.5 C4.3,13.1 4.7,13.5 5.3,13.5 L13.6,13.5 C14.2,13.5 14.6,13.1 14.6,12.5 C14.6,11.9 14.2,11.5 13.6,11.5 Z"></path></svg><span>快速入门</span></a><a href="https://echarts.apache.org/examples/zh/index.html" class="btn btn-main btn-index-home"><svg width="25px" height="19px" viewBox="0 0 17 22" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="index-home-svg"><path fill="#F72C5B" d="M21,0 L6,0 C4.9,0 4,0.9 4,2 L4,4 L2,4 C0.9,4 0,4.9 0,6 L0,18 C0,19.1 0.9,20 2,20 L17,20 C18.1,20 19,19.1 19,18 L19,16 L21,16 C22.1,16 23,15.1 23,14 L23,2 C23,0.9 22.1,0 21,0 Z M17,18 L2,18 L2,6 L17,6 L17,18 Z M21,14 L19,14 L19,6 C19,4.9 18.1,4 17,4 L6,4 L6,2 L21,2 L21,14 Z M4,15 L4,12 C4,11.4 4.4,11 5,11 C5.6,11 6,11.4 6,12 L6,15 C6,15.6 5.6,16 5,16 C4.4,16 4,15.6 4,15 Z M13,15 L13,12 C13,11.4 13.4,11 14,11 C14.6,11 15,11.4 15,12 L15,15 C15,15.6 14.6,16 14,16 C13.4,16 13,15.6 13,15 Z M7,15 L7,9 C7,8.4 7.4,8 8,8 C8.6,8 9,8.4 9,9 L9,15 C9,15.6 8.6,16 8,16 C7.4,16 7,15.6 7,15 Z M10,15 L10,11 C10,10.4 10.4,10 11,10 C11.6,10 12,10.4 12,11 L12,15 C12,15.6 11.6,16 11,16 C10.4,16 10,15.6 10,15 Z"></path></svg><span>所有示例</span></a><a href="https://github.com/apache/echarts" target="_blank" class="btn btn-main btn-index-home btn-index-github"><svg width="22px" height="22px" viewBox="0 0 22 22" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g transform="translate(-262.000000, -2480.000000)" fill="#081642"><g transform="translate(252.000000, 2470.000000)"><path d="M29.9006449,27.904446 C28.5016932,29.8668872 26.6944882,31.2248797 24.4790301,31.9784237 C24.2211218,32.0272886 24.0325745,31.9931534 23.9133882,31.876018 C23.7942019,31.7588827 23.7346171,31.6119968 23.7346338,31.4353603 L23.7346338,28.3376019 C23.7346338,27.3880159 23.4865017,26.6930482 22.9902375,26.2526987 C23.5347812,26.1938141 24.024319,26.1058042 24.458851,25.9886688 C24.893383,25.8715335 25.3422785,25.680801 25.8055376,25.4164714 C26.2687966,25.1521418 26.6556591,24.8267354 26.9661251,24.4402521 C27.276591,24.0537688 27.5296112,23.5398222 27.7251857,22.8984123 C27.9207602,22.2570024 28.0185475,21.5203805 28.0185475,20.6885464 C28.0185475,19.504056 27.6414612,18.4959023 26.8872886,17.6640854 C27.240536,16.7733669 27.2023419,15.7752328 26.7727063,14.6696833 C26.5050218,14.5813565 26.1181593,14.6352226 25.6121189,14.8312818 C25.1060784,15.0273409 24.6669591,15.2428141 24.2947609,15.4777015 L23.7502256,15.8300324 C22.8622108,15.5757225 21.9454689,15.4485675 21,15.4485675 C20.0545311,15.4485675 19.1377892,15.5757225 18.2497744,15.8300324 C18.0969813,15.7223001 17.8940788,15.5901353 17.641067,15.433538 C17.3880551,15.2769408 16.9892689,15.0884007 16.4447085,14.8679176 C15.9001481,14.6474346 15.4894467,14.5813479 15.2126043,14.6696576 C14.7921266,15.7758408 14.7588206,16.7739749 15.1126863,17.6640597 C14.3585137,18.4958938 13.9814275,19.5040475 13.9814275,20.6885208 C13.9814275,21.5203548 14.0792147,22.2544676 14.2747892,22.8908591 C14.4703637,23.5272505 14.720944,24.0411971 15.0265302,24.4326988 C15.3321164,24.8242005 15.7165391,25.1521076 16.1797981,25.41642 C16.6430571,25.6807325 17.0919527,25.871465 17.5264847,25.9886174 C17.9610167,26.1057699 18.4505545,26.1937799 18.9950982,26.2526473 C18.6131238,26.60467 18.3790461,27.1085884 18.292865,27.7644025 C18.0924107,27.8621152 17.8775846,27.935404 17.6483866,27.984269 C17.4191886,28.0331339 17.1469167,28.0575663 16.831571,28.0575663 C16.5162253,28.0575663 16.203612,27.9523346 15.8937309,27.7418712 C15.5838499,27.5314078 15.3189144,27.225424 15.0989244,26.8239198 C14.9174043,26.5107253 14.6857747,26.2564154 14.4040358,26.0609899 C14.1222969,25.8655645 13.8860801,25.7481209 13.6953854,25.708659 L13.4084408,25.6644956 C13.2079866,25.6644956 13.069557,25.6864188 12.9931521,25.7302654 C12.9167472,25.7741119 12.8929083,25.8304873 12.9216353,25.8993914 C12.9503623,25.9682956 12.9934529,26.0368829 13.050907,26.1051533 C13.1083611,26.1734238 13.1703941,26.2319915 13.2370061,26.2808564 L13.336924,26.3541538 C13.5471712,26.4518665 13.7549701,26.6378974 13.9603209,26.9122466 C14.1656716,27.1865958 14.3160164,27.4362043 14.4113555,27.661072 L14.554364,27.9983735 C14.67843,28.3704354 14.8886689,28.6714094 15.1850804,28.9012955 C15.481492,29.1311815 15.8014334,29.2780674 16.1449045,29.3419532 C16.4883756,29.405839 16.8202406,29.4399742 17.1404995,29.4443589 C17.4607584,29.4487435 17.7256939,29.4315218 17.935306,29.3926936 L18.2644137,29.3335008 C18.2644137,29.7055627 18.2668619,30.1412107 18.2717584,30.6404447 C18.2766548,31.1396787 18.279103,31.4040083 18.279103,31.4334334 C18.279103,31.6094533 18.21707,31.7563392 18.093004,31.8740912 C17.9689379,31.9918431 17.7779507,32.0259784 17.5200424,31.9764969 C15.3045843,31.22297 13.4973793,29.8649774 12.0984276,27.9025191 C10.6994759,25.9400608 10,23.7305118 10,21.2738721 C10,19.2281225 10.4916769,17.3417791 11.4750308,15.6148418 C12.4583846,13.8879045 13.7928551,12.5202092 15.4784422,11.5117558 C17.1640293,10.5033024 19.0045486,9.99938397 21,10.0000006 C22.9954514,10.0006172 24.8359707,10.5045356 26.5215578,11.5117558 C28.2071449,12.518976 29.5416154,13.8866713 30.5249692,15.6148418 C31.5083231,17.3430123 32,19.2293557 32,21.2738721 C31.9990725,23.7324558 31.2995966,25.9420048 29.9006449,27.904446 Z"></path></g></g></g></svg></a></div></div><div class="home-chart"><img src="https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/index-home-pie.png?_v_=20200710_1"></div></div></section><section id="feature-section"><div class="container"><div class="index-features"><h2 class="reveal">特性</h2><hr class="reveal"><a href="https://echarts.apache.org/feature.html" class="more reveal">查看完整特性</a></div><div class="row"><div class="col-md-6"><div id="index-feature-1" class="index-feature"><div class="index-feature-left reveal"><div id="bg-icon-1" class="index-feature-icon-bg"></div><div id="icon-1" class="index-feature-icon"></div></div><div class="index-feature-right reveal"><h3 class="reveal">丰富的图表类型</h3><p class="reveal-later">提供开箱即用的 20 多种图表和十几种组件,并且支持各种图表以及组件的任意组合。</p></div></div></div><div class="col-md-6"><div id="index-feature-2" class="index-feature"><div class="index-feature-left reveal"><div id="bg-icon-2" class="index-feature-icon-bg"></div><div id="icon-2" class="index-feature-icon"></div></div><div class="index-feature-right"><h3 class="reveal">强劲的渲染引擎</h3><p class="reveal-later">Canvas、SVG 双引擎一键切换,增量渲染、流加载等技术实现千万级数据的流畅交互。</p></div></div></div><div class="col-md-6"><div id="index-feature-3" class="index-feature"><div class="index-feature-left reveal"><div id="bg-icon-3" class="index-feature-icon-bg"></div><div id="icon-3" class="index-feature-icon"></div></div><div class="index-feature-right"><h3 class="reveal">专业的数据分析</h3><p class="reveal-later">通过数据集管理数据,支持数据过滤、聚类、回归,帮助实现同一份数据的多维度分析。</p></div></div></div><div class="col-md-6"><div id="index-feature-4" class="index-feature"><div class="index-feature-left reveal"><div id="bg-icon-4" class="index-feature-icon-bg"></div><div id="icon-4" class="index-feature-icon"></div></div><div class="index-feature-right"><h3 class="reveal">优雅的可视化设计</h3><p class="reveal-later">默认设计遵从可视化原则,支持响应式设计,并且提供了灵活的配置项方便开发者定制。</p></div></div></div><div class="col-md-6"><div id="index-feature-5" class="index-feature"><div class="index-feature-left reveal"><div id="bg-icon-5" class="index-feature-icon-bg"></div><div id="icon-5" class="index-feature-icon"></div></div><div class="index-feature-right"><h3 class="reveal">健康的开源社区</h3><p class="reveal-later">活跃的社区用户保证了项目的健康发展,也贡献了丰富的第三方插件满足不同场景的需求。</p></div></div></div><div class="col-md-6"><div id="index-feature-6" class="index-feature"><div class="index-feature-left reveal"><div id="bg-icon-6" class="index-feature-icon-bg"></div><div id="icon-6" class="index-feature-icon"></div></div><div class="index-feature-right"><h3 class="reveal">友好的无障碍访问</h3><p class="reveal-later">智能生成的图表描述和贴花图案,帮助视力障碍人士了解图表内容,读懂图表背后的故事。</p></div></div></div></div></div></section><section id="publication"><div class="container"><div id="start-line"></div><div class="paper"><div class="content"><h2 class="reveal-latest">ECharts: A Declarative Framework for Rapid Construction of Web-based Visualization</h2><p class="note reveal-latest">如果您在科研项目、产品、学术论文、技术报告、新闻报告、教育、专利以及其他相关活动中使用了 Apache ECharts,欢迎引用本论文。</p><div class="single-btn-panel reveal-latest"><a href="http://www.cad.zju.edu.cn/home/vagblog/VAG_Work/echarts.pdf" class="pdf reveal-later">Visual Informatics, 2018 [PDF]</a></div></div><div class="icon"><div id="paper-icon"></div></div></div><div id="end-line"></div></div></section><section id="about-section" class="normal reveal-about"><div class="container"><h3>关注我们</h3><hr><p>关注我们以及时获得更多最新动态</p><div class="btn-panel row"><div class="col-lg-3 col-sm-6"><a id="btn-github" href="https://github.com/apache/echarts"><div class="btn-content"><div class="btn-logo"><svg width="22px" height="22px" viewBox="0 0 22 22" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g transform="translate(-262.000000, -2480.000000)" fill="#081642"><g transform="translate(252.000000, 2470.000000)"><path d="M29.9006449,27.904446 C28.5016932,29.8668872 26.6944882,31.2248797 24.4790301,31.9784237 C24.2211218,32.0272886 24.0325745,31.9931534 23.9133882,31.876018 C23.7942019,31.7588827 23.7346171,31.6119968 23.7346338,31.4353603 L23.7346338,28.3376019 C23.7346338,27.3880159 23.4865017,26.6930482 22.9902375,26.2526987 C23.5347812,26.1938141 24.024319,26.1058042 24.458851,25.9886688 C24.893383,25.8715335 25.3422785,25.680801 25.8055376,25.4164714 C26.2687966,25.1521418 26.6556591,24.8267354 26.9661251,24.4402521 C27.276591,24.0537688 27.5296112,23.5398222 27.7251857,22.8984123 C27.9207602,22.2570024 28.0185475,21.5203805 28.0185475,20.6885464 C28.0185475,19.504056 27.6414612,18.4959023 26.8872886,17.6640854 C27.240536,16.7733669 27.2023419,15.7752328 26.7727063,14.6696833 C26.5050218,14.5813565 26.1181593,14.6352226 25.6121189,14.8312818 C25.1060784,15.0273409 24.6669591,15.2428141 24.2947609,15.4777015 L23.7502256,15.8300324 C22.8622108,15.5757225 21.9454689,15.4485675 21,15.4485675 C20.0545311,15.4485675 19.1377892,15.5757225 18.2497744,15.8300324 C18.0969813,15.7223001 17.8940788,15.5901353 17.641067,15.433538 C17.3880551,15.2769408 16.9892689,15.0884007 16.4447085,14.8679176 C15.9001481,14.6474346 15.4894467,14.5813479 15.2126043,14.6696576 C14.7921266,15.7758408 14.7588206,16.7739749 15.1126863,17.6640597 C14.3585137,18.4958938 13.9814275,19.5040475 13.9814275,20.6885208 C13.9814275,21.5203548 14.0792147,22.2544676 14.2747892,22.8908591 C14.4703637,23.5272505 14.720944,24.0411971 15.0265302,24.4326988 C15.3321164,24.8242005 15.7165391,25.1521076 16.1797981,25.41642 C16.6430571,25.6807325 17.0919527,25.871465 17.5264847,25.9886174 C17.9610167,26.1057699 18.4505545,26.1937799 18.9950982,26.2526473 C18.6131238,26.60467 18.3790461,27.1085884 18.292865,27.7644025 C18.0924107,27.8621152 17.8775846,27.935404 17.6483866,27.984269 C17.4191886,28.0331339 17.1469167,28.0575663 16.831571,28.0575663 C16.5162253,28.0575663 16.203612,27.9523346 15.8937309,27.7418712 C15.5838499,27.5314078 15.3189144,27.225424 15.0989244,26.8239198 C14.9174043,26.5107253 14.6857747,26.2564154 14.4040358,26.0609899 C14.1222969,25.8655645 13.8860801,25.7481209 13.6953854,25.708659 L13.4084408,25.6644956 C13.2079866,25.6644956 13.069557,25.6864188 12.9931521,25.7302654 C12.9167472,25.7741119 12.8929083,25.8304873 12.9216353,25.8993914 C12.9503623,25.9682956 12.9934529,26.0368829 13.050907,26.1051533 C13.1083611,26.1734238 13.1703941,26.2319915 13.2370061,26.2808564 L13.336924,26.3541538 C13.5471712,26.4518665 13.7549701,26.6378974 13.9603209,26.9122466 C14.1656716,27.1865958 14.3160164,27.4362043 14.4113555,27.661072 L14.554364,27.9983735 C14.67843,28.3704354 14.8886689,28.6714094 15.1850804,28.9012955 C15.481492,29.1311815 15.8014334,29.2780674 16.1449045,29.3419532 C16.4883756,29.405839 16.8202406,29.4399742 17.1404995,29.4443589 C17.4607584,29.4487435 17.7256939,29.4315218 17.935306,29.3926936 L18.2644137,29.3335008 C18.2644137,29.7055627 18.2668619,30.1412107 18.2717584,30.6404447 C18.2766548,31.1396787 18.279103,31.4040083 18.279103,31.4334334 C18.279103,31.6094533 18.21707,31.7563392 18.093004,31.8740912 C17.9689379,31.9918431 17.7779507,32.0259784 17.5200424,31.9764969 C15.3045843,31.22297 13.4973793,29.8649774 12.0984276,27.9025191 C10.6994759,25.9400608 10,23.7305118 10,21.2738721 C10,19.2281225 10.4916769,17.3417791 11.4750308,15.6148418 C12.4583846,13.8879045 13.7928551,12.5202092 15.4784422,11.5117558 C17.1640293,10.5033024 19.0045486,9.99938397 21,10.0000006 C22.9954514,10.0006172 24.8359707,10.5045356 26.5215578,11.5117558 C28.2071449,12.518976 29.5416154,13.8866713 30.5249692,15.6148418 C31.5083231,17.3430123 32,19.2293557 32,21.2738721 C31.9990725,23.7324558 31.2995966,25.9420048 29.9006449,27.904446 Z"></path></g></g></g></svg><span>GitHub</span></div><div class="icon-v-right"></div></div></a></div><div class="col-lg-3 col-sm-6"><a id="btn-weixin"><div class="btn-content zh"><div class="btn-logo"><svg width="25px" height="21px" viewBox="0 0 25 21" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g transform="translate(-512.000000, -2480.000000)" fill="rgba(93, 201, 116)"><g transform="translate(512.000000, 2480.000000)"><path d="M17.6290595,6.47976119 C17.7534123,6.47976119 17.8770026,6.48260946 18,6.4873469 C17.2166965,2.79549199 13.5198007,0 9.07678865,0 C4.06379837,0 0,3.55853831 0,7.94816178 C0,10.5128275 1.38756065,12.7933344 3.54074891,14.2466508 L2.63388325,17 L5.63681512,15.3050455 C6.69779456,15.6858421 7.85912588,15.8963236 9.07676039,15.8963236 C9.31148885,15.8963236 9.54412784,15.8885344 9.77433851,15.8731886 C9.52032463,15.1807388 9.38270085,14.4428328 9.38270085,13.676822 C9.38275733,9.70202902 13.0747399,6.47976119 17.6290595,6.47976119 Z M12.5,4 C13.328411,4 14,4.67155738 14,5.5 C14,6.32841103 13.3284426,7 12.5,7 C11.6715574,7 11,6.32844262 11,5.5 C11.0000316,4.67155738 11.671589,4 12.5,4 Z M5.5,7 C4.67158897,7 4,6.32844262 4,5.5 C4,4.67158897 4.67155738,4 5.5,4 C6.32844262,4 7,4.67155738 7,5.5 C7,6.32841103 6.32844262,7 5.5,7 Z"></path><path d="M25,13.4664775 C25,9.89513318 21.6421433,7 17.4999862,7 C13.3578291,7 10,9.89513318 10,13.4664775 C10,17.0378217 13.3578567,19.9329549 17.5000138,19.9329549 C18.36973,19.9329549 19.2046277,19.804878 19.9813841,19.5701641 L22.5457108,21 L21.8004292,18.7646117 C23.7349834,17.5951163 25,15.6582837 25,13.4664775 Z M15,12 C14.447707,12 14,11.552293 14,11 C14,10.447707 14.447707,10 15,10 C15.552293,10 16,10.447707 16,11 C16,11.552293 15.552293,12 15,12 Z M20,12 C19.447707,12 19,11.552293 19,11 C19,10.447707 19.447707,10 20,10 C20.552293,10 21,10.447707 21,11 C21,11.552293 20.5522667,12 20,12 Z"></path></g></g></g></svg><span>公众号</span></div><div class="weixin-code"><img src="https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/ercode.jpg?_v_=20200710_1"></div></div></a></div><div class="col-lg-3 col-sm-6"><a id="btn-weibo" href="https://weibo.com/echarts"><div class="btn-content"><div class="btn-logo"><svg width="25px" height="20px" viewBox="0 0 25 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g transform="translate(-774.000000, -2480.000000)" fill="rgba(174, 44, 53)"><g transform="translate(767.000000, 2470.000000)"><g transform="translate(7.000000, 10.000000)"><path d="M9.56107255,18.530208 C5.55942203,18.7083394 2.28534432,16.6598289 2.28534432,13.9878588 C2.28534432,11.3158886 5.55942203,9.08924686 9.56107255,8.91111551 C13.5627231,8.73298415 16.8368008,10.4252319 16.8368008,13.0972021 C16.8368008,15.7691722 13.5627231,18.3520767 9.56107255,18.530208 Z M18.1100532,9.71270657 C17.1096406,9.53457522 17.6553202,9.0001812 17.6553202,9.0001812 C17.6553202,9.0001812 18.5647862,7.48606478 17.473427,6.32821106 C16.1092279,4.90316031 12.7442036,6.50634241 12.7442036,6.50634241 C11.4709512,6.95167077 11.8347376,6.32821106 12.0166308,5.34848869 C12.0166308,4.19063497 11.6528444,2.14212451 8.19687348,3.3890439 C4.74090259,4.54689763 1.83061129,8.7329842 1.83061129,8.7329842 C-0.26116057,11.49402 0.0116792299,13.6315961 0.0116792299,13.6315961 C0.557358851,18.3520767 5.4684754,19.5989961 9.37917931,19.9552588 C13.4717764,20.3115215 18.9285726,18.5302081 20.5656115,14.9675812 C22.1117037,11.3158886 19.1104658,9.89083792 18.1100532,9.71270657 Z"></path><path d="M12.8641827,12.2517204 C12.2123929,10.4024172 10.0707976,9.57023078 7.92920237,10.2174869 C5.78760713,10.9572081 4.57714023,12.9914416 5.13581726,14.7482796 C5.78760713,16.5975828 7.92920237,17.4297692 10.0707976,16.7825131 C12.2123929,16.135257 13.4228598,14.1010235 12.8641827,12.2517204 Z M8.11542806,15.4880009 C7.37052537,15.6729312 6.53250982,15.3955358 6.34628415,14.7482797 C6.16005847,14.1010235 6.62562266,13.4537674 7.46363821,13.176372 C8.2085409,12.9914416 9.04655645,13.2688371 9.23278212,13.9160932 C9.32589493,14.5633493 8.86033075,15.3030706 8.11542806,15.4880009 Z M10.3501361,13.176372 C10.2570233,13.4537674 9.88457196,13.6386977 9.60523346,13.5462326 C9.32589496,13.4537674 9.23278212,13.0839068 9.32589496,12.8065113 C9.4190078,12.5291159 9.79145914,12.3441855 10.0707976,12.4366507 C10.3501361,12.621581 10.5363618,12.8989765 10.3501361,13.176372 Z"></path><path d="M24.5953609,9.4285714 C24.5953609,9.3333333 24.6913146,9.2380952 24.6913146,9.14285713 C25.2670362,7.5238095 24.9791754,5.9047619 24.3075001,4.38095238 C23.0601032,1.7142857 20.3734021,0 17.4947939,0 C16.9190722,0 16.3433505,0.0952380996 15.8635825,0.190476199 L15.8635825,0.190476199 L15.8635825,0.190476199 C15.8635825,0.190476199 15.7676289,0.190476199 15.6716753,0.285714299 L15.6716753,0.285714299 C15.2878608,0.476190498 15,0.857142874 15,1.33333335 C15,2.00000002 15.479768,2.4761905 16.1514433,2.4761905 C16.2473969,2.4761905 16.3433505,2.4761905 16.5352577,2.3809524 L16.5352577,2.3809524 C16.8231186,2.1904762 17.3988402,2.09523812 17.4947938,2.09523812 L17.5907475,2.09523812 C19.6057732,2.09523812 21.5248454,3.23809527 22.3884279,5.23809525 C22.8681959,6.2857143 22.9641496,7.42857143 22.6762887,8.57142857 C22.6762887,8.66666667 22.5803351,8.85714285 22.5803351,8.95238095 C22.5803351,9.52380952 23.0601031,10 23.6358248,10 L23.827732,10 L23.827732,10 L23.9236856,10 C24.2115465,9.9047619 24.4034537,9.8095238 24.5953609,9.61904762 C24.4994073,9.5238095 24.4994073,9.5238095 24.5953609,9.4285714 C24.5953609,9.5238095 24.5953609,9.4285714 24.5953609,9.4285714 Z"></path><path d="M17.6310803,4 C17.3252528,4 16.9174827,4.08510639 16.6116551,4.08510639 C16.3058276,4.17021275 16,4.42553192 16,4.76595745 C16,5.10638297 16.3058275,5.36170214 16.7135976,5.36170214 C16.8155402,5.36170214 16.9174827,5.36170214 17.0194252,5.27659575 C17.2233102,5.27659575 17.3252527,5.19148936 17.5291378,5.19148936 C18.548563,5.19148936 19.4660456,5.87234042 19.4660456,6.72340425 C19.4660456,6.89361703 19.4660456,6.97872339 19.3641031,7.14893617 L19.3641031,7.40425531 L19.3641031,7.40425531 L19.3641031,7.40425531 L19.3641031,7.40425531 L19.3641031,7.40425531 L19.3641031,7.4893617 L19.3641031,7.4893617 C19.4660456,7.82978723 19.7718732,8 20.0777008,8 C20.3835283,8 20.5874133,7.82978723 20.7912984,7.65957447 L20.7912984,7.65957447 C20.8932409,7.40425533 20.9951834,7.06382978 20.9951834,6.72340425 C21.0971259,5.27659575 19.5679882,4 17.6310803,4 Z"></path></g></g></g></g></svg><span>微博</span></div><div class="icon-v-right"></div></div></a></div><div class="col-lg-3 col-sm-6"><a id="btn-twitter" href="https://twitter.com/ApacheECharts"><div class="btn-content"><div class="btn-logo"><svg width="22px" height="19px" viewBox="0 0 22 19" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g transform="translate(-1029.000000, -2481.000000)" fill="rgba(0, 172, 237)" fill-rule="nonzero"><g transform="translate(1019.000000, 2470.000000)"><path d="M31.9965682,13.2536272 C31.3736136,14.2239084 30.6196136,15.0506018 29.7346591,15.7332964 C29.7441818,15.8714453 29.7489318,16.0792366 29.7489318,16.3566705 C29.7489318,17.6436908 29.5720682,18.9275445 29.2183409,20.2082316 C28.8645909,21.4890636 28.3274091,22.7184796 27.6069091,23.8965522 C26.8862955,25.0746247 26.0280455,26.1166031 25.0323864,27.0222697 C24.0366364,27.9281298 22.8360682,28.6508066 21.4306364,29.1904211 C20.0251818,29.7300356 18.5226591,30 16.9230227,30 C14.4015909,30 12.0938636,29.2822545 10,27.8470776 C10.3251136,27.8862863 10.6878182,27.9059148 11.0880909,27.9059148 C13.1819545,27.9059148 15.0477727,27.2230992 16.6854545,25.8575407 C15.7087727,25.8372354 14.8339318,25.5180789 14.0609545,24.8998053 C13.288,24.281701 12.7573636,23.4924033 12.4690909,22.532299 C12.7763409,22.581612 13.0604091,22.606341 13.32125,22.606341 C13.7215227,22.606341 14.1168864,22.5518066 14.5076136,22.4428346 C13.4654545,22.214883 12.6024318,21.6632061 11.9187955,20.7878041 C11.2351591,19.9125471 10.8933409,18.8958295 10.8933409,17.7380623 L10.8933409,17.6790802 C11.5258182,18.0553092 12.2052955,18.2580242 12.9318409,18.287201 C12.3172955,17.851458 11.8288409,17.2826425 11.4667727,16.5808028 C11.1046818,15.8790598 10.923,15.1170776 10.9219318,14.2949288 C10.9219318,13.4233702 11.1267045,12.6170789 11.5365227,11.8760064 C12.6620909,13.3505127 14.0323182,14.5304949 15.6474545,15.4160496 C17.2624545,16.3015076 18.9907727,16.7936705 20.8321364,16.8924898 C20.7582955,16.5162366 20.7213636,16.1501361 20.7213636,15.7941883 C20.7213636,14.4678626 21.1608409,13.3372176 22.0398409,12.4023257 C22.9188409,11.4674338 23.9818864,11 25.2289318,11 C26.5319318,11 27.6300455,11.5048779 28.5233636,12.5144402 C29.5382045,12.306673 30.4922273,11.9209198 31.3854091,11.3572048 C31.0412273,12.4947875 30.3808409,13.3759186 29.4041364,14.0003804 C30.2700455,13.9015611 31.1353409,13.6539809 32,13.2574224 L31.9965682,13.2536272 Z"></path></g></g></g></svg><span>Twitter</span></div><div class="icon-v-right"></div></div></a></div></div></div></section></div><footer><div class="container"><div class="row"><div class="col-md-9"><p>Copyright © 2017-2021, The Apache Software Foundation Apache ECharts, ECharts, Apache, the Apache feather, and the Apache ECharts project logo are either registered trademarks or trademarks of the Apache Software Foundation.</p><div class="icon-panel"><a href="mailto:dev@echarts.apache.org?body=%28Thanks%20for%20using%20ECharts.%20Email%20us%20if%20you%20have%20non-technical%20problems%20using%20ECharts.%20For%20technical%20support%2C%20please%20go%20to%20https%3A//github.com/apache/echarts/issues%20.%29" class="footer-icon"><img src="https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/icon-email.png?_v_=20200710_1"></a><a href="https://twitter.com/ApacheECharts" class="footer-icon"><img src="https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/icon-twitter.png?_v_=20200710_1"></a><a href="https://weibo.com/echarts" class="footer-icon"><img src="https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/icon-weibo.png?_v_=20200710_1"></a><a href="https://github.com/apache/echarts" class="footer-icon"><img src="https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/icon-github.png?_v_=20200710_1"></a></div></div><div id="footer-icon-panel" class="col-md-3"><a href="https://www.apache.org"><img src="https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/images/asf_logo.svg?_v_=20200710_1" class="footer-apache-logo"></a></div></div></div></footer></div></div><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/gh/apache/echarts-website@asf-site/zh/js/common.js?_v_=b5b8944fb9"></script><script src="https://cdn.jsdelivr.net/npm/vanilla-lazyload@12.0.0/dist/lazyload.min.js"></script><script src="https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/zh/js/index.js?_v_=1612243453754"></script><script>window.lazyLoadOptions = {
     elements_selector: ".lazy"
 };</script><script src="https://cdn.jsdelivr.net/npm/vanilla-lazyload@12.0.0/dist/lazyload.min.js"></script><!-- Baidu Tongji--><script type="text/javascript">var _hmt = _hmt || [];
 (function() {