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);
                }
            }
        }