| <!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> | 
 |  |