internal override void UpdateAxisLabelText(Axis axis) { base.UpdateAxisLabelText(axis); if (axis.IsTime() || axis.IsValue()) { for (int i = 0; i < axis.context.labelObjectList.Count; i++) { var label = axis.context.labelObjectList[i]; if (label != null) { var pos = GetLabelPosition(0, i); label.SetPosition(pos); CheckValueLabelActive(component, i, label, pos); } } } }
/// <summary> /// 获得分割线条数 /// </summary> /// <param name="dataZoom"></param> /// <returns></returns> public static int GetScaleNumber(Axis axis, float coordinateWidth, DataZoom dataZoom = null) { int splitNum = GetSplitNumber(axis, coordinateWidth, dataZoom); if (splitNum == 0) { return(0); } if (axis.IsCategory()) { var dataCount = axis.GetDataList(dataZoom).Count; var scaleNum = 0; if (axis.boundaryGap) { scaleNum = dataCount > 2 && dataCount % splitNum == 0 ? splitNum + 1 : splitNum + 2; } else { if (dataCount < splitNum) { scaleNum = splitNum; } else { scaleNum = dataCount > 2 && dataCount % splitNum == 0 ? splitNum : splitNum + 1; } } return(scaleNum); } else if (axis.IsTime()) { return(splitNum); } else { return(splitNum + 1); } }
private void GetSerieDataIndexByAxis(Serie serie, Axis axis, GridCoord grid, int dimension = 0) { var currValue = 0d; var lastValue = 0d; var nextValue = 0d; var axisValue = axis.context.pointerValue; var isTimeAxis = axis.IsTime(); var dataCount = serie.dataCount; var themeSymbolSize = chart.theme.serie.scatterSymbolSize; var data = serie.data; if (!isTimeAxis) { serie.context.sortedData.Clear(); for (int i = 0; i < dataCount; i++) { var serieData = serie.data[i]; serieData.index = i; serie.context.sortedData.Add(serieData); } serie.context.sortedData.Sort(delegate(SerieData a, SerieData b) { return(a.GetData(dimension).CompareTo(b.GetData(dimension))); }); data = serie.context.sortedData; } serie.context.pointerAxisDataIndexs.Clear(); for (int i = 0; i < dataCount; i++) { var serieData = data[i]; currValue = serieData.GetData(dimension); if (i == 0) { nextValue = data[i + 1].GetData(dimension); if (axisValue <= currValue + (nextValue - currValue) / 2) { serie.context.pointerAxisDataIndexs.Add(serieData.index); break; } } else if (i == dataCount - 1) { if (axisValue > lastValue + (currValue - lastValue) / 2) { serie.context.pointerAxisDataIndexs.Add(serieData.index); break; } } else { nextValue = data[i + 1].GetData(dimension); if (axisValue > (currValue - (currValue - lastValue) / 2) && axisValue <= currValue + (nextValue - currValue) / 2) { serie.context.pointerAxisDataIndexs.Add(serieData.index); break; } } lastValue = currValue; } if (serie.context.pointerAxisDataIndexs.Count > 0) { var index = serie.context.pointerAxisDataIndexs[0]; serie.context.pointerItemDataIndex = index; axis.context.axisTooltipValue = serie.GetSerieData(index).GetData(dimension); } else { serie.context.pointerItemDataIndex = -1; axis.context.axisTooltipValue = 0; } }
/// <summary> /// 获得分割段宽度 /// </summary> /// <param name="coordinateWidth"></param> /// <param name="dataZoom"></param> /// <returns></returns> public static float GetScaleWidth(Axis axis, float coordinateWidth, int index, DataZoom dataZoom = null) { if (index < 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()) { var value = axis.GetLabelValue(index); var lastValue = axis.GetLabelValue(index - 1); return(axis.context.minMaxRange == 0 ? 0 : (float)(coordinateWidth * (value - lastValue) / axis.context.minMaxRange)); } else { var data = axis.GetDataList(dataZoom); if (axis.IsCategory() && data.Count > 0) { var count = axis.boundaryGap ? data.Count : data.Count - 1; int tick = count / splitNum; if (count <= 0) { return(0); } var each = coordinateWidth / count; if (axis.insertDataToHead) { var max = axis.boundaryGap ? splitNum : splitNum - 1; if (index == 1) { if (axis.axisTick.alignWithLabel) { return(each * tick); } else { return(coordinateWidth - each * tick * max); } } else { if (count < splitNum) { return(each); } else { return(each * (count / splitNum)); } } } else { var max = axis.boundaryGap ? num - 1 : num; if (index >= max) { if (axis.axisTick.alignWithLabel) { return(each * tick); } else { return(coordinateWidth - each * tick * (index - 1)); } } else { if (count < splitNum) { return(each); } else { return(each * (count / splitNum)); } } } } else { if (splitNum <= 0) { return(0); } else { return(coordinateWidth / splitNum); } } } }