private void CreateGraphs(float[] monthsAirFrostData, float[] monthsRainfallData, float[] monthsSunshineData, float[] monthsMinTempData, float[] monthsMaxTempData) { Graph sunshineHoursGraph = new Graph("Monthly Hours of Sunshine", "Number of Hours", 20f, 1000f, 0f, monthsSunshineData, Color.Yellow); Graph airFrostDaysGraph = new Graph("Monthly Days of Airfrost", "Number of Days", 5f, 1000f, 0f, monthsAirFrostData, Color.LightBlue); Graph rainfallGraph = new Graph("Monthly Amount of Rainfall", "Rainfall (mm)", 10f, 1000f, 0f, monthsRainfallData, Color.RoyalBlue); Graph minAndMaxTempGraph = new BoxPlotGraph("Monthly Minimum and Maximum Temperature", "Temperature", 2f, 100f, -100f, Color.Orange, monthsMinTempData, monthsMaxTempData); graphs = new Graph[] { minAndMaxTempGraph, sunshineHoursGraph, airFrostDaysGraph, rainfallGraph }; }
// Bars have a varied start point with provided min and max values private void DrawBoxPlotGraph(Graphics panelGraphics, SolidBrush writeBrush, float overallRange, float pixelsPerUnit, BoxPlotGraph bpGraph) { // Offset required due to negative values float offset = overallRange - bpGraph.YearMaxValue; for (int i = 0; i < monthNames.Length; i++) { // Min and Max temp of month float currentMinValue = bpGraph.MinDataSet[i]; float currentMaxValue = bpGraph.MaxDataSet[i]; float rangeBetweenMinAndMax = currentMaxValue - currentMinValue; // Calculates how box is drawn float startingPoint = (currentMinValue + offset) * pixelsPerUnit; float boxLength = rangeBetweenMinAndMax * pixelsPerUnit; RectangleF boxPlot = new RectangleF(graphStartPosX + startingPoint, yBarPositions[i], boxLength, graphBarThickness); using (SolidBrush solidBrush = new SolidBrush(bpGraph.GraphBarColour)) { panelGraphics.FillRectangle(solidBrush, boxPlot); } // Draw min and max values alongside boxplot (optional) if (chkShowValues.Checked) { PointF minValueTextPoint = new PointF(graphStartPosX + startingPoint, yBarPositions[i] + (graphBarThickness / 4)); PointF maxValueTextPoint = new PointF(graphStartPosX + startingPoint + boxLength, yBarPositions[i] + (graphBarThickness / 4)); string drawMinValue = currentMinValue.ToString(); string drawMaxValue = currentMaxValue.ToString(); panelGraphics.DrawString(drawMinValue, graphValuesFont, writeBrush, minValueTextPoint); panelGraphics.DrawString(drawMaxValue, graphValuesFont, writeBrush, maxValueTextPoint); } } }