mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-14 20:00:09 +00:00
[improve][tooltip] improve tooltip for heatmap
This commit is contained in:
@@ -58,6 +58,7 @@
|
||||
|
||||
## master
|
||||
|
||||
* (2022.09.05) 优化`Tooltip`在热力图为数值轴时的指示
|
||||
* (2022.09.02) 增加`onPointerEnterPie`回调支持
|
||||
* (2022.09.02) 优化`HeatmapChart`
|
||||
* (2022.08.30) 优化`RadarChart`
|
||||
|
||||
@@ -719,6 +719,8 @@ namespace XCharts.Runtime
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获得指定区域缩放的类目数据列表
|
||||
/// </summary>
|
||||
|
||||
@@ -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(){
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user