コード例 #1
0
ファイル: BarChart.cs プロジェクト: geekhybrid/skia-chart
        /// <summary>
        /// Renders a bar chart on the canvas. This method is called by the Chart class.
        /// </summary>
        /// <param name="canvasWrapper">wrapper class containing info mation about the canvas and chart</param>
        /// <param name="axis">Axis orientation object</param>
        /// <param name="minMax">Data for the extreme values</param>
        /// <param name="gridPaint">Paint object for the grid lines</param>
        public override void RenderChart(CanvasWrapper canvasWrapper, Axis axis, IMinMax minMax)
        {
            CheckConstructionPolicy(nameof(BarChart));

            var drawingSpace = canvasWrapper.ChartArea.Right / ConstructionData.Count() * 0.9;
            var rectSpace    = (float)drawingSpace / canvasWrapper.NumberOfCharts;
            var columnSpace  = (float)((canvasWrapper.ChartArea.Right / ConstructionData.Count()) - drawingSpace) / 2;
            var pointX       = canvasWrapper.ChartArea.Width / ConstructionData.Count();
            var counter      = 0;

            foreach (var point in ConstructionData)
            {
                var x1 = (pointX * counter) + canvasWrapper.ChartArea.Left + columnSpace +
                         (canvasWrapper.NumberPlottedChart * rectSpace);
                var x2   = x1 + rectSpace - columnSpace;
                var rect = new SKRect(x1, point.Y, x2, canvasWrapper.ChartArea.Top);
                _chartPaint.IsStroke = IsStroked;
                canvasWrapper.Canvas.DrawRect(rect, _chartPaint);

                var xLabel = XLabel[counter];
                axis.DrawAndPositionXTickMark(xLabel, (x1 + (x2 - x1) / 2),
                                              canvasWrapper.ChartArea.Bottom, _labelPaint);

                var yLabel = GetYLabel(OriginalData.ElementAt(counter).Y);
                axis.DrawAndPositionYTickMark(yLabel, point.Y, (x1 + (x2 - x1) / 2), _labelPaint);
                counter++;
            }
            canvasWrapper.NumberPlottedChart += 1;
        }
コード例 #2
0
ファイル: BarChart.cs プロジェクト: NdubuisiJr/skia-chart
        private void RenderYTickMark(CanvasWrapper canvasWrapper, Axis axis, int counter, SKPoint point, SKRect rect)
        {
            var yLabel = GetYLabel(OriginalData.ElementAt(counter).Y);

            _labelPaint.TextSize = canvasWrapper.LabelTextSize;
            axis.DrawAndPositionYTickMark(yLabel, point.Y, rect.Left, _labelPaint);
        }
コード例 #3
0
        public override void RenderChart(CanvasWrapper canvasWrapper, Axis axis, IMinMax minMax)
        {
            var divisor     = 2.5f;
            var strokeWidth = 30;

            if (canvasWrapper.NumberOfCharts > 6)
            {
                switch (Device.RuntimePlatform)
                {
                case Device.WPF:
                case Device.GTK:
                case Device.macOS:
                case Device.UWP: {
                    divisor     = 2.0f;
                    strokeWidth = 15;
                    break;
                }

                default: {
                    divisor     = 1.5f;
                    strokeWidth = 30;
                    break;
                }
                }
                ;
            }


            var chartArea = canvasWrapper.ChartArea;
            var canvas    = canvasWrapper.Canvas;

            var radius = Math.Min(chartArea.MidX, chartArea.MidY) / divisor;

            radius = radius - (canvasWrapper.NumberPlottedChart * strokeWidth);

            _chartPaint.StrokeWidth = strokeWidth;
            _chartPaint.Style       = SKPaintStyle.Stroke;

            var teta = 360 - ((minMax.Ymax - OriginalData.ElementAt(0).Y) / (minMax.Ymax - minMax.Ymin) * 360);

            var rect = new SKRect(chartArea.MidX - radius, chartArea.MidY - radius, chartArea.MidX + radius, chartArea.MidY + radius);
            var path = new SKPath();

            path.AddArc(rect, 90, -teta);
            canvas.DrawPath(path, _chartPaint);

            _chartPaint.Color = ChartColor.WithAlpha(70);
            canvas.DrawCircle(chartArea.MidX, chartArea.MidY, radius, _chartPaint);
            canvasWrapper.NumberPlottedChart += 1;

            _chartPaint.Color = ChartColor;
            ChartName         = $"{Label} : {Value}";
            RenderLegend(canvasWrapper, axis, canvas, PointPlotVariant.ScatterChart);
        }
コード例 #4
0
ファイル: BarChart.cs プロジェクト: NdubuisiJr/skia-chart
        /// <summary>
        /// Renders a bar chart on the canvas. This method is called by the Chart class.
        /// </summary>
        /// <param name="canvasWrapper">wrapper class containing info mation about the canvas and chart</param>
        /// <param name="axis">Axis orientation object</param>
        /// <param name="minMax">Data for the extreme values</param>
        /// <param name="gridPaint">Paint object for the grid lines</param>
        public override void RenderChart(CanvasWrapper canvasWrapper, Axis axis, IMinMax minMax)
        {
            CheckConstructionPolicy(nameof(BarChart));

            var count        = ConstructionData.Count();
            var drawingSpace = canvasWrapper.ChartArea.Right / count * 0.9;
            var rectSpace    = (float)drawingSpace / canvasWrapper.NumberOfCharts;
            var columnSpace  = (float)((canvasWrapper.ChartArea.Right / count) - drawingSpace) / 2;
            var pointX       = canvasWrapper.ChartArea.Width / count;
            var counter      = 0;

            foreach (var point in ConstructionData)
            {
                var x1 = (pointX * counter) + canvasWrapper.ChartArea.Left + columnSpace +
                         (canvasWrapper.NumberPlottedChart * rectSpace);
                var x2   = x1 + rectSpace - columnSpace;
                var rect = new SKRect(x1, point.Y, x2, canvasWrapper.ChartArea.Top);
                _chartPaint.IsStroke = IsStroked;
                canvasWrapper.Canvas.DrawRect(rect, _chartPaint);

                var xLabel = XLabel[counter];
                _labelPaint.TextSize = canvasWrapper.LabelTextSize;
                if (canvasWrapper.NumberPlottedChart == 0)
                {
                    RenderXTickMark(canvasWrapper, axis, x1, x2, xLabel);
                    var yLabel = GetYLabel(OriginalData.ElementAt(counter).Y);
                    if (yLabel.Trim().Length > 5)
                    {
                        canvasWrapper.DrawYTickMarkOnBars = false;
                        DrawVerticalLabels(canvasWrapper, axis, minMax);
                    }
                }
                if (canvasWrapper.DrawYTickMarkOnBars)
                {
                    RenderYTickMark(canvasWrapper, axis, counter, point, rect);
                }
                counter++;
            }
            canvasWrapper.NumberPlottedChart += 1;
            if (canvasWrapper.CanShowLegend)
            {
                RenderLegend(canvasWrapper, axis, canvasWrapper.Canvas, PointPlotVariant.AreaChart);
            }
        }
コード例 #5
0
ファイル: DonutChart.cs プロジェクト: NdubuisiJr/skia-chart
 public override float InitialCalculations(IMinMax minMax)
 {
     Angel = 360 - ((minMax.Ymax - OriginalData.ElementAt(0).Y) / (minMax.Ymax - minMax.Ymin) * 360);
     return(Angel);
 }