[improve][tooltip] improve tooltip for heatmap

This commit is contained in:
monitor1394
2022-09-05 13:18:00 +08:00
parent a44eca0f91
commit ce702fd1e3
6 changed files with 73 additions and 15 deletions

View File

@@ -719,6 +719,8 @@ namespace XCharts.Runtime
}
}
/// <summary>
/// 获得指定区域缩放的类目数据列表
/// </summary>

View File

@@ -19,6 +19,24 @@ namespace XCharts.Runtime
return 0;
}
/// <summary>
/// 获得分割网格个数,包含次刻度
/// </summary>
/// <param name="axis"></param>
/// <returns></returns>
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;
}
}
/// <summary>
/// 获得分割段数
/// </summary>
@@ -519,6 +537,34 @@ namespace XCharts.Runtime
return GetAxisPositionInternal(grid, axis, scaleWidth, value, false, true);
}
/// <summary>
/// 获得数值value在坐标轴上对应的split索引
/// </summary>
/// <param name="axis"></param>
/// <param name="value"></param>
/// <returns></returns>
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(){
}
}
}

View File

@@ -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;