/// <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; }
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); }
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); }
/// <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); } }
public override float InitialCalculations(IMinMax minMax) { Angel = 360 - ((minMax.Ymax - OriginalData.ElementAt(0).Y) / (minMax.Ymax - minMax.Ymin) * 360); return(Angel); }