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));
     }
 }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        /// <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]));
                    }
                }
            }
        }