private static float GetDataHig(Axis axis, double value, float totalWidth) { if (axis.IsLog()) { int minIndex = axis.GetLogMinIndex(); float nowIndex = axis.GetLogValue(value); return((nowIndex - minIndex) / axis.splitNumber * totalWidth); } else if (axis.IsCategory()) { if (axis.boundaryGap) { float tick = (float)(totalWidth / (axis.context.minMaxRange + 1)); return(tick / 2 + (float)(value - axis.context.minValue) * tick); } else { return((float)((value - axis.context.minValue) / axis.context.minMaxRange * totalWidth)); } } else { return((float)((value - axis.context.minValue) / axis.context.minMaxRange * totalWidth)); } }
private static float GetAxisPositionInternal(GridCoord grid, Axis axis, float scaleWidth, double value, bool includeGridXY, bool realLength) { var isY = axis is YAxis; var gridHeight = isY ? grid.context.height : grid.context.width; var gridXY = isY ? grid.context.y : grid.context.x; if (axis.IsLog()) { int minIndex = axis.GetLogMinIndex(); float nowIndex = axis.GetLogValue(value); return(includeGridXY ? gridXY + (nowIndex - minIndex) / axis.splitNumber * gridHeight : (nowIndex - minIndex) / axis.splitNumber * gridHeight); } else if (axis.IsCategory()) { var categoryIndex = (int)value; return(includeGridXY ? gridXY + (axis.boundaryGap ? scaleWidth / 2 : 0) + scaleWidth * categoryIndex : (axis.boundaryGap ? scaleWidth / 2 : 0) + scaleWidth * categoryIndex); } else { var yDataHig = 0f; if (axis.context.minMaxRange != 0) { if (realLength) { yDataHig = (float)(value * gridHeight / axis.context.minMaxRange); } else { yDataHig = (float)((value - axis.context.minValue) / axis.context.minMaxRange * gridHeight); } } return(includeGridXY ? gridXY + yDataHig : yDataHig); } }
/// <summary> /// 获得标签显示的名称 /// </summary> /// <param name="index"></param> /// <param name="minValue"></param> /// <param name="maxValue"></param> /// <param name="dataZoom"></param> /// <returns></returns> public static string GetLabelName(Axis axis, float coordinateWidth, int index, double minValue, double maxValue, DataZoom dataZoom, bool forcePercent) { int split = GetSplitNumber(axis, coordinateWidth, dataZoom); if (axis.type == Axis.AxisType.Value) { if (minValue == 0 && maxValue == 0) { maxValue = axis.max != 0 ? axis.max : 1; } double value = 0; if (forcePercent) { maxValue = 100; } value = axis.GetLabelValue(index); if (axis.inverse) { value = -value; minValue = -minValue; maxValue = -maxValue; } if (forcePercent) { return(string.Format("{0}%", (int)value)); } else { return(axis.axisLabel.GetFormatterContent(index, value, minValue, maxValue)); } } else if (axis.type == Axis.AxisType.Log) { double value = axis.logBaseE ? System.Math.Exp(axis.GetLogMinIndex() + index) : System.Math.Pow(axis.logBase, axis.GetLogMinIndex() + index); if (axis.inverse) { value = -value; minValue = -minValue; maxValue = -maxValue; } return(axis.axisLabel.GetFormatterContent(index, value, minValue, maxValue, true)); } else if (axis.type == Axis.AxisType.Time) { if (minValue == 0 && maxValue == 0) { return(string.Empty); } if (index > axis.context.labelValueList.Count - 1) { return(string.Empty); } var value = axis.GetLabelValue(index); return(axis.axisLabel.GetFormatterDateTime(index, value, minValue, maxValue)); } var showData = axis.GetDataList(dataZoom); int dataCount = showData.Count; if (dataCount <= 0) { return(""); } int rate = axis.boundaryGap ? (dataCount / split) : (dataCount - 1) / split; if (rate == 0) { rate = 1; } if (axis.insertDataToHead) { if (index > 0) { var residue = (dataCount - 1) - split * rate; var newIndex = residue + (index - 1) * rate; if (newIndex < 0) { newIndex = 0; } return(axis.axisLabel.GetFormatterContent(newIndex, showData[newIndex])); } else { if (axis.boundaryGap && coordinateWidth / dataCount > 5) { return(string.Empty); } else { return(axis.axisLabel.GetFormatterContent(0, showData[0])); } } } else { int newIndex = index * rate; if (newIndex < dataCount) { return(axis.axisLabel.GetFormatterContent(newIndex, showData[newIndex])); } else { if (axis.boundaryGap && coordinateWidth / dataCount > 5) { return(string.Empty); } else { return(axis.axisLabel.GetFormatterContent(dataCount - 1, showData[dataCount - 1])); } } } }