[improve][axis] improve max value and division of y axis

This commit is contained in:
monitor1394
2022-10-18 08:33:12 +08:00
parent a78eed9c5c
commit b1eae7045b
3 changed files with 16 additions and 4 deletions

View File

@@ -59,6 +59,7 @@
## master
* (2022.10.18) 优化`Axis`的数值表现
* (2022.10.15) 修复`Axis``Label``DataZoom`开启时可能显示不正常的问题 (#227)
* (2022.10.14) 增加`DataZoom`对数值轴的支持
* (2022.10.13) 修复`Pie`的环形饼图设置边框时效果异常的问题 (#225)

View File

@@ -233,7 +233,9 @@ namespace XCharts
{
var each = GetTick(range);
tick = each;
if (range / tick > 8)
if (range / 4 % each == 0)
tick = range / 4;
else if (range / tick > 8)
tick = 2 * each;
else if (range / tick < 4)
tick = each / 2;
@@ -273,6 +275,7 @@ namespace XCharts
private static double GetTick(double max)
{
if (max <= 1) return max / 5;
if (max > 1 && max < 10) return 1;
var bigger = Math.Ceiling(Math.Abs(max));
int n = 1;
while (bigger / (Mathf.Pow(10, n)) > 10)

View File

@@ -635,12 +635,20 @@ namespace XCharts.Runtime
n++;
}
double mm = bigger;
var pown = Mathf.Pow(10, n);
var powmax = Mathf.Pow(10, n + 1);
var aliquot = mm % pown == 0;
if (mm > 10 && n < 38)
{
mm = bigger - bigger % (Mathf.Pow(10, n));
mm += max > 0 ? Mathf.Pow(10, n) : -Mathf.Pow(10, n);
mm = bigger - bigger % pown;
if (!aliquot)
mm += max > 0 ? pown : -pown;
}
var mmm = mm - Mathf.Pow(10, n) / 2;
var mmm = mm;
if (max > 100 && !aliquot && (max / mm < 0.8f))
mmm -= Mathf.Pow(10, n) / 2;
if (mmm >= (powmax - pown) && mmm < powmax)
mmm = powmax;
if (max < 0) return -Math.Ceiling(mmm > -max ? mmm : mm);
else return Math.Ceiling(mmm > max ? mmm : mm);
}