[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

@@ -58,6 +58,7 @@
## master
* (2022.09.05) 优化`Tooltip`在热力图为数值轴时的指示
* (2022.09.02) 增加`onPointerEnterPie`回调支持
* (2022.09.02) 优化`HeatmapChart`
* (2022.08.30) 优化`RadarChart`

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;

View File

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

View File

@@ -144,6 +144,11 @@ namespace XCharts.Runtime
}
}
}
if (min == double.MaxValue && max == double.MinValue)
{
min = 0;
max = 0;
}
}
/// <summary>
@@ -180,6 +185,11 @@ namespace XCharts.Runtime
}
}
}
if (min == double.MaxValue && max == double.MinValue)
{
min = 0;
max = 0;
}
}
/// <summary>