You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by sh...@apache.org on 2019/10/29 15:02:24 UTC
[incubator-echarts] 01/01: fix(axis): fix extra ticks added caused
by rounding error. add test cases for splitArea
This is an automated email from the ASF dual-hosted git repository.
shenyi pushed a commit to branch test-for-splitArea
in repository https://gitbox.apache.org/repos/asf/incubator-echarts.git
commit 3b5461735cdd29bdc619f45cf98cca70d7520fb1
Author: pissang <bm...@gmail.com>
AuthorDate: Tue Oct 29 23:01:44 2019 +0800
fix(axis): fix extra ticks added caused by rounding error. add test cases for splitArea
---
src/coord/Axis.js | 8 ++-
test/axis-splitArea.html | 182 +++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 188 insertions(+), 2 deletions(-)
diff --git a/src/coord/Axis.js b/src/coord/Axis.js
index 2db0138..1af761a 100644
--- a/src/coord/Axis.js
+++ b/src/coord/Axis.js
@@ -18,7 +18,7 @@
*/
import {each, map} from 'zrender/src/core/util';
-import {linearMap, getPixelPrecision} from '../util/number';
+import {linearMap, getPixelPrecision, round} from '../util/number';
import {
createAxisTicks,
createAxisLabels,
@@ -307,7 +307,6 @@ function fixOnBandTicksCoords(axis, ticksCoords, tickCategoryInterval, alignWith
last = ticksCoords[1] = {coord: axisExtent[0]};
}
else {
-
var crossLen = ticksCoords[ticksLen - 1].tickValue - ticksCoords[0].tickValue;
var shift = (ticksCoords[ticksLen - 1].coord - ticksCoords[0].coord) / crossLen;
@@ -330,6 +329,7 @@ function fixOnBandTicksCoords(axis, ticksCoords, tickCategoryInterval, alignWith
var inverse = axisExtent[0] > axisExtent[1];
+ // Handling clamp.
if (littleThan(ticksCoords[0].coord, axisExtent[0])) {
clamp ? (ticksCoords[0].coord = axisExtent[0]) : ticksCoords.shift();
}
@@ -344,6 +344,10 @@ function fixOnBandTicksCoords(axis, ticksCoords, tickCategoryInterval, alignWith
}
function littleThan(a, b) {
+ // Avoid rounding error cause calculated tick coord different with extent.
+ // It may cause an extra unecessary tick added.
+ a = round(a);
+ b = round(b);
return inverse ? a > b : a < b;
}
}
diff --git a/test/axis-splitArea.html b/test/axis-splitArea.html
new file mode 100644
index 0000000..2ac8686
--- /dev/null
+++ b/test/axis-splitArea.html
@@ -0,0 +1,182 @@
+<!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/esl.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="main0"></div>
+ <div id="main1"></div>
+ <div id="main2"></div>
+
+
+
+
+ <script>
+ require(['echarts'/*, 'map/js/china' */], function (echarts) {
+ var option;
+
+ option = {
+ xAxis: {
+ type: 'category',
+ data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
+ axisLine: {
+ lineStyle: {
+ color: '#EAECF6'
+ }
+ },
+ axisTick: {
+ show: false
+ },
+ splitLine: {
+ show: true,
+ lineStyle: {
+ color: '#EAECF6'
+ }
+ },
+ axisLabel: {
+ show: true
+ },
+ splitArea: {
+ show: true,
+ areaStyle: {
+ color: ['white', 'white', 'white', 'white', 'white', 'white', '#008cd5'],
+ opacity: 0.1,
+ }
+ }
+ },
+ yAxis: {
+ type: 'value',
+ axisTick: {
+ show: false
+ },
+ axisLabel: {
+ show: false
+ },
+ splitLine: {
+ show: true,
+ lineStyle: {
+ color: '#EAECF6'
+ }
+ },
+ axisLine: {
+ lineStyle: {
+ color: 'transparent'
+ }
+ },
+ },
+ series: [{
+ data: [820, 932, 901, 934, 1290, 1330, 1320],
+ type: 'line'
+ }, {
+ data: [820, 932, 901, 934, 1290, 1330, 1320].map(t => t * 0.1),
+ type: 'line'
+ }]
+ };
+
+ var chart = testHelper.create(echarts, 'main0', {
+ title: [
+ 'Color array should be in right order in splitArea.',
+ "'white', 'white', 'white', 'white', 'white', 'white', '#008cd5'",
+ 'Case from issue #10948'
+ ],
+ option: option
+ });
+ });
+ </script>
+
+
+ <script>
+ require(['echarts'/*, 'map/js/china' */], function (echarts) {
+ var option;
+
+ option = {
+ color: ['#3398DB'],
+ tooltip : {
+ trigger: 'axis',
+ axisPointer : { // 坐标轴指示器,坐标轴触发有效
+ type : 'shadow' // 默认为直线,可选为:'line' | 'shadow'
+ }
+ },
+ grid: {
+ left: '3%',
+ right: '4%',
+ bottom: '3%',
+ containLabel: true
+ },
+ xAxis : [
+ {
+ type : 'category',
+ data : ['1', '2', '3', '4', '5', '6', '7','8'],
+ axisTick: {
+ alignWithLabel: true
+ },
+ splitArea:{
+ show:true,
+ areaStyle:{
+ color:['green','red','red','red','red','red','red','black']
+ }
+ }
+ }
+ ],
+ yAxis : [
+ {
+ type : 'value'
+ }
+ ],
+ series : [
+ {
+ name:'直接访问',
+ type:'bar',
+ barWidth: '60%',
+ data:[10, 52, 200, 334, 390, 330, 220,100]
+ }
+ ]
+ };
+
+ var chart = testHelper.create(echarts, 'main1', {
+ title: [
+ 'Color array should be in right order in splitArea.',
+ "'green','red','red','red','red','red','red','black'",
+ 'Case from issue #11438'
+ ],
+ option: option
+ });
+ });
+ </script>
+
+ </body>
+</html>
+
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org