修复Serie添加double.MaxValue时坐标绘制失败的问题

This commit is contained in:
monitor1394
2023-12-11 13:43:03 +08:00
parent a50bda5344
commit 53c7ddf9d4
3 changed files with 15 additions and 12 deletions

View File

@@ -70,6 +70,7 @@ slug: /changelog
## master ## master
* (2023.12.11) 修复`Serie`添加`double.MaxValue`时坐标绘制失败的问题
* (2023.12.10) 增加`Serie``minShowLabel`可隐藏小于指定值的`label` * (2023.12.10) 增加`Serie``minShowLabel`可隐藏小于指定值的`label`
* (2023.12.09) 增加`LevelStyle``LineStyle``depth`支持 * (2023.12.09) 增加`LevelStyle``LineStyle``depth`支持
* (2023.12.09) 增加`Serie``Link`可用于桑基图添加节点边关系 * (2023.12.09) 增加`Serie``Link`可用于桑基图添加节点边关系

View File

@@ -267,7 +267,11 @@ namespace XCharts
if (axis.interval == 0) if (axis.interval == 0)
{ {
if (axis.splitNumber > 0) if (range >= double.MaxValue / 2)
{
tick = range / 4;
}
else if (axis.splitNumber > 0)
{ {
tick = range / axis.splitNumber; tick = range / axis.splitNumber;
} }
@@ -865,7 +869,6 @@ namespace XCharts
for (int i = 0; i < size; i++) for (int i = 0; i < size; i++)
{ {
var scaleWidth = AxisHelper.GetScaleWidth(axis, axisLength, axis.IsTime() ? i : i + 1, dataZoom); var scaleWidth = AxisHelper.GetScaleWidth(axis, axisLength, axis.IsTime() ? i : i + 1, dataZoom);
if (axis.boundaryGap && axis.axisTick.alignWithLabel) if (axis.boundaryGap && axis.axisTick.alignWithLabel)
current -= scaleWidth / 2; current -= scaleWidth / 2;

View File

@@ -245,21 +245,20 @@ namespace XCharts.Runtime
{ {
if (index < 0) if (index < 0)
return 0; return 0;
int num = GetScaleNumber(axis, coordinateWidth, dataZoom);
int splitNum = GetSplitNumber(axis, coordinateWidth, dataZoom);
if (num <= 0)
num = 1;
if (axis.IsTime() || axis.IsValue()) if (axis.IsTime() || axis.IsValue())
{ {
var value = axis.GetLabelValue(index); var value = axis.GetLabelValue(index);
var lastValue = axis.GetLabelValue(index - 1); var lastValue = axis.GetLabelValue(index - 1);
return axis.context.minMaxRange == 0 ? 0 : var width = axis.context.minMaxRange == 0 ? 0 :
(float)(coordinateWidth * (value - lastValue) / axis.context.minMaxRange); (float)(coordinateWidth * ((value - lastValue) / axis.context.minMaxRange));
return width;
} }
else else
{ {
int num = GetScaleNumber(axis, coordinateWidth, dataZoom);
int splitNum = GetSplitNumber(axis, coordinateWidth, dataZoom);
if (num <= 0)
num = 1;
var data = axis.GetDataList(dataZoom); var data = axis.GetDataList(dataZoom);
if (axis.IsCategory() && data.Count > 0 && splitNum > 0) if (axis.IsCategory() && data.Count > 0 && splitNum > 0)
{ {