From 027f5f260cb66bb414fb3a86a933e5c46afd7805 Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Tue, 30 Aug 2022 08:04:18 +0800 Subject: [PATCH] [bug][datazoom] fix datazoom range error (#221) --- CHANGELOG.md | 3 ++- Runtime/Component/Axis/AxisContext.cs | 8 ++++---- Runtime/Serie/SerieHelper.cs | 8 ++++---- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f794c70..b7d156c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -58,8 +58,9 @@ ## master +* (2022.08.30) 修复`DataZoom`某些情况下计算范围不准确的问题 (#221) * (2022.08.29) 优化`BarChart`在数据过密时的默认表现 -* (2022.08.29) 优化`DataZoom`下Y轴的最大最小值计算 +* (2022.08.29) 优化`YAxis`在开启`DataZoom`时的最大最小值计算 * (2022.08.29) 优化`CandlestickChart`大量数据绘制 * (2022.08.28) 修复`LineChart`在堆叠和自定义Y轴范围的情况下显示不正常的问题 * (2022.08.26) 增加`Legend`新图标类型`Candlestick` diff --git a/Runtime/Component/Axis/AxisContext.cs b/Runtime/Component/Axis/AxisContext.cs index 5a50c1e4..fcc5a768 100644 --- a/Runtime/Component/Axis/AxisContext.cs +++ b/Runtime/Component/Axis/AxisContext.cs @@ -92,13 +92,13 @@ namespace XCharts.Runtime if (dataZoom.context.invert) { - end = Mathf.CeilToInt(data.Count * dataZoom.end / 100); + end = Mathf.RoundToInt(data.Count * dataZoom.end / 100); start = end - range; if (start < 0) start = 0; } else { - start = Mathf.FloorToInt(data.Count * dataZoom.start / 100); + start = Mathf.RoundToInt(data.Count * dataZoom.start / 100); end = start + range; if (end > data.Count) end = data.Count; } @@ -122,8 +122,8 @@ namespace XCharts.Runtime else range = dataZoom.minShowNum; } - if (range > data.Count - start - 1) - start = data.Count - range - 1; + if (range > data.Count - start) + start = data.Count - range; if (start >= 0) { dataZoomStartIndex = start; diff --git a/Runtime/Serie/SerieHelper.cs b/Runtime/Serie/SerieHelper.cs index e9e77d9c..7e7491f8 100644 --- a/Runtime/Serie/SerieHelper.cs +++ b/Runtime/Serie/SerieHelper.cs @@ -821,13 +821,13 @@ namespace XCharts.Runtime int start = 0, end = 0; if (dataZoom.context.invert) { - end = Mathf.CeilToInt(data.Count * dataZoom.end / 100); + end = Mathf.RoundToInt(data.Count * dataZoom.end / 100); start = end - range; if (start < 0) start = 0; } else { - start = Mathf.FloorToInt(data.Count * dataZoom.start / 100); + start = Mathf.RoundToInt(data.Count * dataZoom.start / 100); end = start + range; if (end > data.Count) end = data.Count; } @@ -845,8 +845,8 @@ namespace XCharts.Runtime if (dataZoom.minShowNum > data.Count) range = data.Count; else range = dataZoom.minShowNum; } - if (range > data.Count - start - 1) - start = data.Count - range - 1; + if (range > data.Count - start) + start = data.Count - range; if (start >= 0) { serie.context.dataZoomStartIndex = start;