|  | <!DOCTYPE html> | 
|  | <!-- | 
|  | Licensed to the Apache Software Foundation (ASF) under one | 
|  | or more contributor license agreements.  See the NOTICE file | 
|  | distributed with this work for additional information | 
|  | regarding copyright ownership.  The ASF licenses this file | 
|  | to you under the Apache License, Version 2.0 (the | 
|  | "License"); you may not use this file except in compliance | 
|  | with the License.  You may obtain a copy of the License at | 
|  |  | 
|  | http://www.apache.org/licenses/LICENSE-2.0 | 
|  |  | 
|  | Unless required by applicable law or agreed to in writing, | 
|  | software distributed under the License is distributed on an | 
|  | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
|  | KIND, either express or implied.  See the License for the | 
|  | specific language governing permissions and limitations | 
|  | under the License. | 
|  | --> | 
|  |  | 
|  |  | 
|  | <html> | 
|  | <head> | 
|  | <meta charset="utf-8"> | 
|  | <meta name="viewport" content="width=device-width, initial-scale=1" /> | 
|  | <script src="lib/simpleRequire.js"></script> | 
|  | <script src="lib/config.js"></script> | 
|  | <script src="lib/jquery.min.js"></script> | 
|  | <script src="lib/facePrint.js"></script> | 
|  | <script src="lib/testHelper.js"></script> | 
|  | <!-- <script src="ut/lib/canteen.js"></script> --> | 
|  | <link rel="stylesheet" href="lib/reset.css" /> | 
|  | </head> | 
|  | <body> | 
|  | <style> | 
|  | </style> | 
|  |  | 
|  |  | 
|  | <div id="main-no-dataZoom"></div> | 
|  | <div id="main-has-dataZoom-x"></div> | 
|  | <div id="main-has-dataZoom-y"></div> | 
|  | <div id="main-has-stack"></div> | 
|  | <div id="main-has-dataZoom-y-stack"></div> | 
|  |  | 
|  |  | 
|  | <script> | 
|  | var TOTAL_HEIGHT = 1200; | 
|  |  | 
|  | /** | 
|  | * @param opt: { | 
|  | *     dataZoomX: boolean; | 
|  | *     dataZoomY: boolean; | 
|  | *     stack: boolean; | 
|  | * } | 
|  | */ | 
|  | function makeMultiCartesian(echarts, opt) { | 
|  | var gridHeight = 100; | 
|  | var currTop = 40; | 
|  | var gap = 80; | 
|  |  | 
|  | var option = { | 
|  | grid: [], | 
|  | xAxis: [], | 
|  | yAxis: [], | 
|  | series: [], | 
|  | dataZoom: [] | 
|  | }; | 
|  |  | 
|  | function makeCartesian(option, partialOption, label) { | 
|  | option.grid.push({ | 
|  | top: currTop, | 
|  | height: gridHeight | 
|  | }); | 
|  |  | 
|  | option.xAxis.push(echarts.util.defaults({ | 
|  | gridIndex: option.grid.length - 1 | 
|  | }, partialOption.xAxis)); | 
|  |  | 
|  | option.yAxis.push(echarts.util.defaults({ | 
|  | name: label[ | 
|  | opt.dataZoomX ? 'dataZoomX' : | 
|  | opt.dataZoomY ? 'dataZoomY' : | 
|  | 'noDataZoom' | 
|  | ], | 
|  | nameTextStyle: { | 
|  | align: 'left' | 
|  | }, | 
|  | gridIndex: option.grid.length - 1 | 
|  | }, partialOption.yAxis)); | 
|  |  | 
|  | var xAxisIndex = option.xAxis.length - 1; | 
|  | var yAxisIndex = option.yAxis.length - 1; | 
|  |  | 
|  | var seriesList = partialOption.seriesList[opt.stack ? 'stackHas' : 'stackNon']; | 
|  | echarts.util.each(seriesList, function (series) { | 
|  | // FIXME: | 
|  | // currently (20200619) if series.stack is the same but series | 
|  | // on different grid, that would get wrong result. | 
|  | if (opt.stack) { | 
|  | series.stack = series.stack + '__' + xAxisIndex + '_' + yAxisIndex; | 
|  | } | 
|  | option.series.push(echarts.util.defaults({ | 
|  | label: { show: true }, | 
|  | itemStyle: { | 
|  | opacity: 0.8 | 
|  | }, | 
|  | xAxisIndex: xAxisIndex, | 
|  | yAxisIndex: yAxisIndex | 
|  | }, series)); | 
|  | }); | 
|  |  | 
|  | if (opt.dataZoomX) { | 
|  | option.dataZoom.push({ | 
|  | type: 'slider', | 
|  | filterMode: 'none', | 
|  | height: 15, | 
|  | top: currTop + gridHeight + 20, | 
|  | xAxisIndex: xAxisIndex | 
|  | }, { | 
|  | type: 'inside', | 
|  | filterMode: 'none', | 
|  | xAxisIndex: xAxisIndex | 
|  | }); | 
|  | } | 
|  | if (opt.dataZoomY) { | 
|  | option.dataZoom.push({ | 
|  | type: 'slider', | 
|  | filterMode: 'none', | 
|  | yAxisIndex: yAxisIndex | 
|  | }, { | 
|  | type: 'inside', | 
|  | filterMode: 'none', | 
|  | yAxisIndex: yAxisIndex | 
|  | }); | 
|  | } | 
|  |  | 
|  | currTop += gridHeight + gap; | 
|  | } | 
|  |  | 
|  | // --------------------------------------- | 
|  | // Cases in a single chart instance BEGIN | 
|  | // --------------------------------------- | 
|  |  | 
|  | makeCartesian(option, { | 
|  | xAxis: { | 
|  | type: 'category' | 
|  | }, | 
|  | yAxis: { | 
|  | }, | 
|  | seriesList: { | 
|  | stackNon: [{ | 
|  | type: 'bar', | 
|  | data: [['a', 22], ['b', 52], ['c', 659]] | 
|  | }], | 
|  | stackHas: [{ | 
|  | type: 'bar', | 
|  | stack: 's', | 
|  | data: [['a', 12], ['b', 32], ['c', 200]] | 
|  | }, { | 
|  | type: 'bar', | 
|  | stack: 's', | 
|  | data: [['a', 10], ['b', 20], ['c', 459]] | 
|  | }] | 
|  | } | 
|  | }, { | 
|  | noDataZoom: 'y-min: 0, y-max: niced from 659, x-min: "a", x-max: "c"', | 
|  | dataZoomX: 'y-min: 0, y-max: niced from 659, x-min: "a", x-max: "c"', | 
|  | dataZoomY: 'y-min: 0, y-max: niced from 659, x-min: "a", x-max: "c"', | 
|  | }); | 
|  |  | 
|  | makeCartesian(option, { | 
|  | xAxis: { | 
|  | type: 'category', | 
|  | max: 1 | 
|  | }, | 
|  | yAxis: { | 
|  | }, | 
|  | seriesList: { | 
|  | stackNon: [{ | 
|  | type: 'bar', | 
|  | data: [['a', 22], ['b', 52], ['c', 959]] | 
|  | }], | 
|  | stackHas: [{ | 
|  | type: 'bar', | 
|  | stack: 's', | 
|  | data: [['a', 12], ['b', 32], ['c', 359]] | 
|  | }, { | 
|  | type: 'bar', | 
|  | stack: 's', | 
|  | data: [['a', 10], ['b', 20], ['c', 600]] | 
|  | }] | 
|  | } | 
|  | }, { | 
|  | noDataZoom: 'y-min: 0, y-max: niced from 52, x-min: "a", x-max: "b"', | 
|  | dataZoomX: 'y-min: 0, y-max: niced from 959, x-min: "a", x-max: "b"', | 
|  | dataZoomY: 'y-min: 0, y-max: niced from 959, x-min: "a", x-max: "b"' | 
|  | }); | 
|  |  | 
|  | makeCartesian(option, { | 
|  | xAxis: { | 
|  | type: 'category', | 
|  | max: 2, | 
|  | min: 1 | 
|  | }, | 
|  | yAxis: { | 
|  | }, | 
|  | seriesList: { | 
|  | stackNon: [{ | 
|  | type: 'bar', | 
|  | data: [['a', 959], ['b', 22], ['c', 52], ['d', -959]] | 
|  | }], | 
|  | stackHas: [{ | 
|  | type: 'bar', | 
|  | stack: 's', | 
|  | data: [['a', 300], ['b', 12], ['c', 32], ['d', -259]] | 
|  | }, { | 
|  | type: 'bar', | 
|  | stack: 's', | 
|  | data: [['a', 659], ['b', 10], ['c', 20], ['d', -700]] | 
|  | }], | 
|  | } | 
|  | }, { | 
|  | noDataZoom: 'y-min: 0, y-max: niced from 52, x-min: "b", x-max: "c"', | 
|  | dataZoomX: 'y-min: niced from -959, y-max: niced from 959, x-min: "b", x-max: "c"', | 
|  | dataZoomY: 'y-min: niced from -959, y-max: niced from 959, x-min: "b", x-max: "c"' | 
|  | }); | 
|  |  | 
|  | makeCartesian(option, { | 
|  | xAxis: { | 
|  | type: 'category', | 
|  | max: 2, | 
|  | min: 1 | 
|  | }, | 
|  | yAxis: { | 
|  | max: 500 | 
|  | }, | 
|  | seriesList: { | 
|  | stackNon: [{ | 
|  | type: 'bar', | 
|  | data: [['a', 959], ['b', 22], ['c', 52], ['d', -959]] | 
|  | }], | 
|  | stackHas: [{ | 
|  | type: 'bar', | 
|  | stack: 's', | 
|  | data: [['a', 159], ['b', 2], ['c', 7], ['d', -59]] | 
|  | }, { | 
|  | type: 'bar', | 
|  | stack: 's', | 
|  | data: [['a', 800], ['b', 20], ['c', 45], ['d', -900]] | 
|  | }] | 
|  | } | 
|  | }, { | 
|  | noDataZoom: 'y-min: 0, y-max: 500, x-min: "b", x-max: "c"', | 
|  | dataZoomX: 'y-min: niced from -959, y-max: 500, x-min: "b", x-max: "c"', | 
|  | dataZoomY: 'y-min: niced from -959, y-max: 500, x-min: "b", x-max: "c"' | 
|  | }); | 
|  |  | 
|  | makeCartesian(option, { | 
|  | xAxis: { | 
|  | type: 'category', | 
|  | min: 1 | 
|  | }, | 
|  | yAxis: { | 
|  | scale: true | 
|  | }, | 
|  | seriesList: { | 
|  | stackNon: [{ | 
|  | type: 'line', | 
|  | areaStyle: {}, | 
|  | data: [['a', 359], ['b', 122], ['c', 152]] | 
|  | }], | 
|  | stackHas: [{ | 
|  | type: 'line', | 
|  | stack: 's', | 
|  | data: [['a', 159], ['b', 62], ['c', 100]] | 
|  | }, { | 
|  | type: 'line', | 
|  | stack: 's', | 
|  | areaStyle: {}, | 
|  | data: [['a', 200], ['b', 60], ['c', 52]] | 
|  | }] | 
|  | } | 
|  | }, { | 
|  | noDataZoom: '(yAxis.scale: true) y-min: niced from (noStack ? 122 : 62), y-max: niced from 152, x-min: "b", x-max: "c"', | 
|  | dataZoomX: '(yAxis.scale: true) y-min: niced from (noStack ? 122 : 62), y-max: niced from 359, x-min: "b", x-max: "c"', | 
|  | dataZoomY: '(yAxis.scale: true) y-min: niced from (noStack ? 122 : 62), y-max: niced from 359, x-min: "b", x-max: "c"' | 
|  | }); | 
|  |  | 
|  | makeCartesian(option, { | 
|  | xAxis: { | 
|  | type: 'category', | 
|  | min: 1, | 
|  | max: 2 | 
|  | }, | 
|  | yAxis: { | 
|  | boundaryGap: ['50%', '50%'] | 
|  | }, | 
|  | seriesList: { | 
|  | stackNon: [{ | 
|  | type: 'bar', | 
|  | data: [['a', 559], ['b', 82], ['c', 152], ['d', -559]] | 
|  | }], | 
|  | stackHas: [{ | 
|  | type: 'bar', | 
|  | stack: 's', | 
|  | data: [['a', 159], ['b', 22], ['c', 52], ['d', -159]] | 
|  | }, { | 
|  | type: 'bar', | 
|  | stack: 's', | 
|  | data: [['a', 400], ['b', 60], ['c', 100], ['d', -459]] | 
|  | }] | 
|  | } | 
|  | }, { | 
|  | // 187 = 152 + .5 * (152 - 82) | 
|  | // 217 = 152 + .5 * (152 - 22) | 
|  | // -43 = 22-.5 * (152 - 22) | 
|  | noDataZoom: '(boundaryGap: [.5, .5]) y-min: (noStack ? 0 : -43), y-max: niced from (noStack ? 187 : 217), x-min: "b", x-max: "c"', | 
|  | dataZoomX: '(boundaryGap: [.5, .5]) y-min: -1118, y-max: niced from 1118, x-min: "b", x-max: "c"', | 
|  | dataZoomY: '(boundaryGap: [.5, .5]) y-min: -1118, y-max: niced from 1118, x-min: "b", x-max: "c"' | 
|  | }); | 
|  |  | 
|  | // ------------------------------------- | 
|  | // Cases in a single chart instance END | 
|  | // ------------------------------------- | 
|  |  | 
|  | return option; | 
|  | } | 
|  | </script> | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | <script> | 
|  | require(['echarts'], function (echarts) { | 
|  | var option = makeMultiCartesian(echarts, {}); | 
|  |  | 
|  | var chart = testHelper.create(echarts, 'main-no-dataZoom', { | 
|  | title: [ | 
|  | 'Check xAxis, yAxis min/max' | 
|  | ], | 
|  | option: option, | 
|  | height: TOTAL_HEIGHT | 
|  | }); | 
|  | }); | 
|  | </script> | 
|  |  | 
|  |  | 
|  |  | 
|  | <script> | 
|  | require(['echarts'], function (echarts) { | 
|  | var option = makeMultiCartesian(echarts, { | 
|  | dataZoomX: true | 
|  | }); | 
|  |  | 
|  | var chart = testHelper.create(echarts, 'main-has-dataZoom-x', { | 
|  | title: [ | 
|  | '[has **dataZoom on X** filterMode: "none"] Check xAxis, yAxis min/max' | 
|  | ], | 
|  | option: option, | 
|  | height: TOTAL_HEIGHT | 
|  | }); | 
|  | }); | 
|  | </script> | 
|  |  | 
|  |  | 
|  |  | 
|  | <script> | 
|  | require(['echarts'], function (echarts) { | 
|  | var option = makeMultiCartesian(echarts, { | 
|  | dataZoomY: true | 
|  | }); | 
|  |  | 
|  | var chart = testHelper.create(echarts, 'main-has-dataZoom-y', { | 
|  | title: [ | 
|  | '[has **dataZoom on Y** filterMode: "none"] Check xAxis, yAxis min/max' | 
|  | ], | 
|  | option: option, | 
|  | height: TOTAL_HEIGHT | 
|  | }); | 
|  | }); | 
|  | </script> | 
|  |  | 
|  |  | 
|  |  | 
|  | <script> | 
|  | require(['echarts'], function (echarts) { | 
|  | var option = makeMultiCartesian(echarts, { | 
|  | stack: true | 
|  | }); | 
|  |  | 
|  | var chart = testHelper.create(echarts, 'main-has-stack', { | 
|  | title: [ | 
|  | '[has **stack**] Check xAxis, yAxis min/max' | 
|  | ], | 
|  | option: option, | 
|  | height: TOTAL_HEIGHT | 
|  | }); | 
|  | }); | 
|  | </script> | 
|  |  | 
|  |  | 
|  | <script> | 
|  | require(['echarts'], function (echarts) { | 
|  | var option = makeMultiCartesian(echarts, { | 
|  | stack: true, | 
|  | dataZoomY: true | 
|  | }); | 
|  |  | 
|  | var chart = testHelper.create(echarts, 'main-has-dataZoom-y-stack', { | 
|  | title: [ | 
|  | '[has **dataZoom on Y** has **stack**] Check xAxis, yAxis min/max' | 
|  | ], | 
|  | option: option, | 
|  | height: TOTAL_HEIGHT | 
|  | }); | 
|  | }); | 
|  | </script> | 
|  |  | 
|  |  | 
|  |  | 
|  | </body> | 
|  | </html> | 
|  |  |