mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-30 05:08:48 +00:00
修复Axis的Time时间轴在有DataZoom缩放时文本显示异常的问题
This commit is contained in:
@@ -80,6 +80,8 @@ slug: /changelog
|
|||||||
|
|
||||||
## master
|
## master
|
||||||
|
|
||||||
|
* (2025.04.06) 修复`Axis`的`Time`时间轴在有`DataZoom`缩放时文本显示异常的问题
|
||||||
|
* (2025.03.28) 修复`Pie3D`的`avoidLabelOverlap`不生效的问题
|
||||||
* (2025.03.27) 增加`Legend`的`itemInactiveOpacity`可设置非激活状态时的颜色透明度 (#343)
|
* (2025.03.27) 增加`Legend`的`itemInactiveOpacity`可设置非激活状态时的颜色透明度 (#343)
|
||||||
* (2025.03.27) 增加`Axis`的`onLabelClick`回调事件
|
* (2025.03.27) 增加`Axis`的`onLabelClick`回调事件
|
||||||
* (2025.03.26) 增加`Animation`的`Exchange`排序交换动画
|
* (2025.03.26) 增加`Animation`的`Exchange`排序交换动画
|
||||||
|
|||||||
@@ -146,22 +146,30 @@ namespace XCharts.Runtime
|
|||||||
/// <param name="splitNumber"></param>
|
/// <param name="splitNumber"></param>
|
||||||
internal static float UpdateTimeAxisDateTimeList(List<double> list, int minTimestamp, int maxTimestamp, int splitNumber)
|
internal static float UpdateTimeAxisDateTimeList(List<double> list, int minTimestamp, int maxTimestamp, int splitNumber)
|
||||||
{
|
{
|
||||||
var firstValue = list.Count > 0 ? list[0] : 0;
|
|
||||||
var secondValue = list.Count > 1 ? list[1] : 0;
|
|
||||||
list.Clear();
|
|
||||||
var range = maxTimestamp - minTimestamp;
|
var range = maxTimestamp - minTimestamp;
|
||||||
if (range <= 0) return 0;
|
if (range <= 0)
|
||||||
|
{
|
||||||
|
list.Clear();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
var dtMin = DateTimeUtil.GetDateTime(minTimestamp);
|
var dtMin = DateTimeUtil.GetDateTime(minTimestamp);
|
||||||
var dtMax = DateTimeUtil.GetDateTime(maxTimestamp);
|
var dtMax = DateTimeUtil.GetDateTime(maxTimestamp);
|
||||||
int tick = 0;
|
int tick = 0;
|
||||||
if (range >= ONE_YEAR * MIN_TIME_SPLIT_NUMBER)
|
if (range >= ONE_YEAR * MIN_TIME_SPLIT_NUMBER)
|
||||||
{
|
{
|
||||||
var num = splitNumber <= 0 ? GetSplitNumber(range, ONE_YEAR) : Math.Max(range / (splitNumber * ONE_YEAR), 1);
|
var num = splitNumber <= 0 ? GetSplitNumber(range, ONE_YEAR) : Math.Max(range / (splitNumber * ONE_YEAR), 1);
|
||||||
var dtStart = (firstValue == 0 || secondValue == 0 || (minTimestamp > firstValue && minTimestamp > secondValue))
|
var dtStart = GetDateTime(GetFirstMaxValue(list, minTimestamp));
|
||||||
? (new DateTime(dtMin.Year, dtMin.Month, 1).AddMonths(1))
|
|
||||||
: (minTimestamp > firstValue ? DateTimeUtil.GetDateTime(secondValue) : DateTimeUtil.GetDateTime(firstValue));
|
|
||||||
tick = num * 365 * 24 * 3600;
|
|
||||||
dtStart = new DateTime(dtStart.Year, dtStart.Month, 1);
|
dtStart = new DateTime(dtStart.Year, dtStart.Month, 1);
|
||||||
|
while (dtStart > dtMin)
|
||||||
|
{
|
||||||
|
dtStart = dtStart.AddYears(-num);
|
||||||
|
}
|
||||||
|
if (dtStart < dtMin)
|
||||||
|
{
|
||||||
|
dtStart = dtStart.AddYears(num);
|
||||||
|
}
|
||||||
|
tick = num * 365 * 24 * 3600;
|
||||||
|
list.Clear();
|
||||||
while (dtStart.Ticks < dtMax.Ticks)
|
while (dtStart.Ticks < dtMax.Ticks)
|
||||||
{
|
{
|
||||||
list.Add(DateTimeUtil.GetTimestamp(dtStart));
|
list.Add(DateTimeUtil.GetTimestamp(dtStart));
|
||||||
@@ -171,11 +179,18 @@ namespace XCharts.Runtime
|
|||||||
else if (range >= ONE_MONTH * MIN_TIME_SPLIT_NUMBER)
|
else if (range >= ONE_MONTH * MIN_TIME_SPLIT_NUMBER)
|
||||||
{
|
{
|
||||||
var num = splitNumber <= 0 ? GetSplitNumber(range, ONE_MONTH) : Math.Max(range / (splitNumber * ONE_MONTH), 1);
|
var num = splitNumber <= 0 ? GetSplitNumber(range, ONE_MONTH) : Math.Max(range / (splitNumber * ONE_MONTH), 1);
|
||||||
var dtStart = (firstValue == 0 || secondValue == 0 || (minTimestamp > firstValue && minTimestamp > secondValue))
|
var dtStart = GetDateTime(GetFirstMaxValue(list, minTimestamp));
|
||||||
? (new DateTime(dtMin.Year, dtMin.Month, 1).AddMonths(1))
|
|
||||||
: (minTimestamp > firstValue ? DateTimeUtil.GetDateTime(secondValue) : DateTimeUtil.GetDateTime(firstValue));
|
|
||||||
dtStart = new DateTime(dtStart.Year, dtStart.Month, 1);
|
dtStart = new DateTime(dtStart.Year, dtStart.Month, 1);
|
||||||
|
while (dtStart > dtMin)
|
||||||
|
{
|
||||||
|
dtStart = dtStart.AddMonths(-num);
|
||||||
|
}
|
||||||
|
if (dtStart < dtMin)
|
||||||
|
{
|
||||||
|
dtStart = dtStart.AddMonths(num);
|
||||||
|
}
|
||||||
tick = num * 30 * 24 * 3600;
|
tick = num * 30 * 24 * 3600;
|
||||||
|
list.Clear();
|
||||||
while (dtStart.Ticks < dtMax.Ticks)
|
while (dtStart.Ticks < dtMax.Ticks)
|
||||||
{
|
{
|
||||||
list.Add(DateTimeUtil.GetTimestamp(dtStart));
|
list.Add(DateTimeUtil.GetTimestamp(dtStart));
|
||||||
@@ -187,6 +202,7 @@ namespace XCharts.Runtime
|
|||||||
tick = GetTickSecond(range, splitNumber, ONE_DAY);
|
tick = GetTickSecond(range, splitNumber, ONE_DAY);
|
||||||
var let = minTimestamp % tick;
|
var let = minTimestamp % tick;
|
||||||
var startTimestamp = let == 0 ? minTimestamp : (minTimestamp - let) + tick;
|
var startTimestamp = let == 0 ? minTimestamp : (minTimestamp - let) + tick;
|
||||||
|
list.Clear();
|
||||||
AddTickTimestamp(list, startTimestamp, maxTimestamp, tick);
|
AddTickTimestamp(list, startTimestamp, maxTimestamp, tick);
|
||||||
}
|
}
|
||||||
else if (range >= ONE_HOUR * MIN_TIME_SPLIT_NUMBER)
|
else if (range >= ONE_HOUR * MIN_TIME_SPLIT_NUMBER)
|
||||||
@@ -194,6 +210,7 @@ namespace XCharts.Runtime
|
|||||||
tick = GetTickSecond(range, splitNumber, ONE_HOUR);
|
tick = GetTickSecond(range, splitNumber, ONE_HOUR);
|
||||||
var let = minTimestamp % tick;
|
var let = minTimestamp % tick;
|
||||||
var startTimestamp = let == 0 ? minTimestamp : (minTimestamp - let) + tick;
|
var startTimestamp = let == 0 ? minTimestamp : (minTimestamp - let) + tick;
|
||||||
|
list.Clear();
|
||||||
AddTickTimestamp(list, startTimestamp, maxTimestamp, tick);
|
AddTickTimestamp(list, startTimestamp, maxTimestamp, tick);
|
||||||
}
|
}
|
||||||
else if (range >= ONE_MINUTE * MIN_TIME_SPLIT_NUMBER)
|
else if (range >= ONE_MINUTE * MIN_TIME_SPLIT_NUMBER)
|
||||||
@@ -201,6 +218,7 @@ namespace XCharts.Runtime
|
|||||||
tick = GetTickSecond(range, splitNumber, ONE_MINUTE);
|
tick = GetTickSecond(range, splitNumber, ONE_MINUTE);
|
||||||
var let = minTimestamp % tick;
|
var let = minTimestamp % tick;
|
||||||
var startTimestamp = let == 0 ? minTimestamp : (minTimestamp - let) + tick;
|
var startTimestamp = let == 0 ? minTimestamp : (minTimestamp - let) + tick;
|
||||||
|
list.Clear();
|
||||||
AddTickTimestamp(list, startTimestamp, maxTimestamp, tick);
|
AddTickTimestamp(list, startTimestamp, maxTimestamp, tick);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -208,11 +226,24 @@ namespace XCharts.Runtime
|
|||||||
tick = GetTickSecond(range, splitNumber, ONE_SECOND);
|
tick = GetTickSecond(range, splitNumber, ONE_SECOND);
|
||||||
var let = minTimestamp % tick;
|
var let = minTimestamp % tick;
|
||||||
var startTimestamp = let == 0 ? minTimestamp : (minTimestamp - let) + tick;
|
var startTimestamp = let == 0 ? minTimestamp : (minTimestamp - let) + tick;
|
||||||
|
list.Clear();
|
||||||
AddTickTimestamp(list, startTimestamp, maxTimestamp, tick);
|
AddTickTimestamp(list, startTimestamp, maxTimestamp, tick);
|
||||||
}
|
}
|
||||||
return tick;
|
return tick;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static double GetFirstMaxValue(List<double> list, int minTimestamp)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < list.Count; i++)
|
||||||
|
{
|
||||||
|
if (list[i] >= minTimestamp)
|
||||||
|
{
|
||||||
|
return list[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return minTimestamp;
|
||||||
|
}
|
||||||
|
|
||||||
private static int GetSplitNumber(int range, int tickSecond)
|
private static int GetSplitNumber(int range, int tickSecond)
|
||||||
{
|
{
|
||||||
var num = 1;
|
var num = 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user