diff --git a/CHANGELOG.md b/CHANGELOG.md
index ea92c446..762e3cdb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -58,6 +58,7 @@
## master
+* (2022.09.05) 优化`Tooltip`在热力图为数值轴时的指示
* (2022.09.02) 增加`onPointerEnterPie`回调支持
* (2022.09.02) 优化`HeatmapChart`
* (2022.08.30) 优化`RadarChart`
diff --git a/Runtime/Component/Axis/Axis.cs b/Runtime/Component/Axis/Axis.cs
index 46bbb8e5..1a988b1f 100644
--- a/Runtime/Component/Axis/Axis.cs
+++ b/Runtime/Component/Axis/Axis.cs
@@ -719,6 +719,8 @@ namespace XCharts.Runtime
}
}
+
+
///
/// 获得指定区域缩放的类目数据列表
///
diff --git a/Runtime/Component/Axis/AxisHelper.cs b/Runtime/Component/Axis/AxisHelper.cs
index e24be302..73c96f5d 100644
--- a/Runtime/Component/Axis/AxisHelper.cs
+++ b/Runtime/Component/Axis/AxisHelper.cs
@@ -19,6 +19,24 @@ namespace XCharts.Runtime
return 0;
}
+ ///
+ /// 获得分割网格个数,包含次刻度
+ ///
+ ///
+ ///
+ public static int GetTotalSplitGridNum(Axis axis)
+ {
+ if (axis.IsCategory())
+ return axis.data.Count;
+ else
+ {
+ var splitNum = axis.splitNumber <= 0 ? GetSplitNumber(axis, 0, null) : axis.splitNumber;
+ return axis.minorTick.show ?
+ splitNum * axis.minorTick.splitNumber :
+ splitNum;
+ }
+ }
+
///
/// 获得分割段数
///
@@ -519,6 +537,34 @@ namespace XCharts.Runtime
return GetAxisPositionInternal(grid, axis, scaleWidth, value, false, true);
}
+ ///
+ /// 获得数值value在坐标轴上对应的split索引
+ ///
+ ///
+ ///
+ ///
+ public static int GetAxisValueSplitIndex(Axis axis, double value, int totalSplitNumber = -1)
+ {
+ if (axis.IsCategory())
+ {
+ return (int) value;
+ }
+ else
+ {
+ if (value == axis.context.minValue)
+ return 0;
+ else
+ {
+ if (totalSplitNumber == -1)
+ totalSplitNumber = GetTotalSplitGridNum(axis);
+ if (axis.minMaxType == Axis.AxisMinMaxType.Custom)
+ return Mathf.CeilToInt(((float) ((value - axis.min) / axis.max) * totalSplitNumber) - 1);
+ else
+ return Mathf.CeilToInt(((float) ((value - axis.context.minValue) / axis.context.minMaxRange) * totalSplitNumber) - 1);
+ }
+ }
+ }
+
private static float GetAxisPositionInternal(GridCoord grid, Axis axis, float scaleWidth, double value, bool includeGridXY, bool realLength)
{
var isY = axis is YAxis;
@@ -589,9 +635,5 @@ namespace XCharts.Runtime
startX += relativedAxis.context.offset;
return startX;
}
-
- public static void UpdateAxisOffset(){
-
- }
}
}
\ No newline at end of file
diff --git a/Runtime/Component/Tooltip/TooltipHandler.cs b/Runtime/Component/Tooltip/TooltipHandler.cs
index ba6b4526..2520cd79 100644
--- a/Runtime/Component/Tooltip/TooltipHandler.cs
+++ b/Runtime/Component/Tooltip/TooltipHandler.cs
@@ -241,7 +241,7 @@ namespace XCharts.Runtime
private void UpdateAxisPointerDataIndex(Serie serie, XAxis xAxis, YAxis yAxis, GridCoord grid, bool isTriggerAxis)
{
serie.context.pointerAxisDataIndexs.Clear();
- if (xAxis.IsCategory() && yAxis.IsCategory())
+ if (serie is Heatmap)
{
GetSerieDataByXYAxis(serie, xAxis, yAxis);
}
@@ -283,14 +283,14 @@ namespace XCharts.Runtime
private void GetSerieDataByXYAxis(Serie serie, Axis xAxis, Axis yAxis)
{
- var xAxisIndex = xAxis.context.pointerValue;
- var yAxisIndex = yAxis.context.pointerValue;
+ var xAxisIndex = AxisHelper.GetAxisValueSplitIndex(xAxis, xAxis.context.pointerValue);
+ var yAxisIndex = AxisHelper.GetAxisValueSplitIndex(yAxis, yAxis.context.pointerValue);
serie.context.pointerItemDataIndex = -1;
foreach (var serieData in serie.data)
{
- var x = serieData.GetData(0);
- var y = serieData.GetData(1);
+ var x = AxisHelper.GetAxisValueSplitIndex(xAxis,serieData.GetData(0));
+ var y = AxisHelper.GetAxisValueSplitIndex(yAxis,serieData.GetData(1));
if (xAxisIndex == x && y == yAxisIndex)
{
serie.context.pointerItemDataIndex = serieData.index;
diff --git a/Runtime/Serie/Heatmap/HeatmapHandler.cs b/Runtime/Serie/Heatmap/HeatmapHandler.cs
index 7f69c9cc..0edd024d 100644
--- a/Runtime/Serie/Heatmap/HeatmapHandler.cs
+++ b/Runtime/Serie/Heatmap/HeatmapHandler.cs
@@ -132,8 +132,8 @@ namespace XCharts.Runtime
yAxis.boundaryGap = true;
var visualMap = chart.GetVisualMapOfSerie(serie);
var emphasisStyle = serie.emphasisStyle;
- var xCount = xAxis.data.Count;
- var yCount = yAxis.data.Count;
+ var xCount = AxisHelper.GetTotalSplitGridNum(xAxis);
+ var yCount = AxisHelper.GetTotalSplitGridNum(yAxis);
var xWidth = m_SerieGrid.context.width / xCount;
var yWidth = m_SerieGrid.context.height / yCount;
@@ -173,8 +173,11 @@ namespace XCharts.Runtime
for (int n = 0; n < serie.dataCount; n++)
{
var serieData = serie.data[n];
- var i = (int) serieData.GetData(0);
- var j = (int) serieData.GetData(1);
+ var xValue = serieData.GetData(0);
+ var yValue = serieData.GetData(1);
+ var i = AxisHelper.GetAxisValueSplitIndex(xAxis, xValue, xCount);
+ var j = AxisHelper.GetAxisValueSplitIndex(yAxis, yValue, yCount);
+
if (serie.IsIgnoreValue(serieData, dimension))
{
serie.context.dataPoints.Add(Vector3.zero);
@@ -184,8 +187,8 @@ namespace XCharts.Runtime
var value = serieData.GetCurrData(dimension, dataChangeDuration, yAxis.inverse,
yAxis.context.minValue, yAxis.context.maxValue);
if (serieData.IsDataChanged()) dataChanging = true;
- var pos = new Vector3(zeroX + (i + (xAxis.boundaryGap ? 0.5f : 0)) * xWidth,
- zeroY + (j + (yAxis.boundaryGap ? 0.5f : 0)) * yWidth);
+ var pos = new Vector3(zeroX + (i + 0.5f) * xWidth,
+ zeroY + (j + 0.5f) * yWidth);
serie.context.dataPoints.Add(pos);
serie.context.dataIndexs.Add(serieData.index);
serieData.context.position = pos;
diff --git a/Runtime/Serie/SerieHelper.cs b/Runtime/Serie/SerieHelper.cs
index 7e7491f8..95e04f70 100644
--- a/Runtime/Serie/SerieHelper.cs
+++ b/Runtime/Serie/SerieHelper.cs
@@ -144,6 +144,11 @@ namespace XCharts.Runtime
}
}
}
+ if (min == double.MaxValue && max == double.MinValue)
+ {
+ min = 0;
+ max = 0;
+ }
}
///
@@ -180,6 +185,11 @@ namespace XCharts.Runtime
}
}
}
+ if (min == double.MaxValue && max == double.MinValue)
+ {
+ min = 0;
+ max = 0;
+ }
}
///