public DelayChart(ApproachDelayOptions options, SignalPhase signalPhase) { Options = options; //Set the chart properties Chart = ChartFactory.CreateDefaultChart(options); ChartFactory.SetImageProperties(Chart); //Create the chart legend var chartLegend = new Legend(); chartLegend.Name = "MainLegend"; chartLegend.Docking = Docking.Left; Chart.Legends.Add(chartLegend); //Primary Y axis (delay per vehicle) if (Options.ShowDelayPerVehicle) { if (Options.YAxisMax != null) { Chart.ChartAreas[0].AxisY.Maximum = Options.YAxisMax.Value; } Chart.ChartAreas[0].AxisY.Minimum = 0; Chart.ChartAreas[0].AxisY.Enabled = AxisEnabled.True; Chart.ChartAreas[0].AxisY.MajorTickMark.Enabled = true; Chart.ChartAreas[0].AxisY.MajorGrid.Enabled = true; Chart.ChartAreas[0].AxisY.Interval = 5; Chart.ChartAreas[0].AxisY.TitleForeColor = Color.Blue; Chart.ChartAreas[0].AxisY.Title = "Delay Per Vehicle (Seconds) "; } //secondary y axis (total delay) if (Options.ShowDelayPerVehicle) { if (Options.Y2AxisMax != null && Options.Y2AxisMax > 0) { Chart.ChartAreas[0].AxisY2.Maximum = Options.Y2AxisMax.Value; } else { Chart.ChartAreas[0].AxisY2.Maximum = 10; } Chart.ChartAreas[0].AxisY2.Minimum = 0; Chart.ChartAreas[0].AxisY2.Enabled = AxisEnabled.True; Chart.ChartAreas[0].AxisY2.MajorTickMark.Enabled = true; Chart.ChartAreas[0].AxisY2.MajorGrid.Enabled = false; Chart.ChartAreas[0].AxisY2.Interval = 5; Chart.ChartAreas[0].AxisY2.Title = "Delay per Hour (hrs) "; Chart.ChartAreas[0].AxisY2.TitleForeColor = Color.Red; } //Add the point series var delayPerVehicleSeries = new Series(); delayPerVehicleSeries.ChartType = SeriesChartType.Line; delayPerVehicleSeries.Color = Color.Blue; delayPerVehicleSeries.Name = "Approach Delay Per Vehicle"; delayPerVehicleSeries.YAxisType = AxisType.Primary; delayPerVehicleSeries.XValueType = ChartValueType.DateTime; var delaySeries = new Series(); delaySeries.ChartType = SeriesChartType.Line; delaySeries.Color = Color.Red; delaySeries.Name = "Approach Delay"; delaySeries.YAxisType = AxisType.Secondary; delaySeries.XValueType = ChartValueType.DateTime; var pointSeries = new Series(); pointSeries.ChartType = SeriesChartType.Point; pointSeries.Color = Color.White; pointSeries.Name = "Posts"; pointSeries.XValueType = ChartValueType.DateTime; pointSeries.IsVisibleInLegend = false; Chart.Series.Add(pointSeries); Chart.Series.Add(delaySeries); Chart.Series.Add(delayPerVehicleSeries); //Add points at the start and and of the x axis to ensure //the graph covers the entire period selected by the user //whether there is data or not Chart.Series["Posts"].Points.AddXY(Options.StartDate, 0); Chart.Series["Posts"].Points.AddXY(Options.EndDate, 0); AddDataToChart(Chart, signalPhase, Options.SelectedBinSize, Options.ShowTotalDelayPerHour, Options.ShowDelayPerVehicle); if (Options.ShowPlanStatistics) { SetPlanStrips(signalPhase.Plans, Chart, Options.StartDate, Options.ShowPlanStatistics); } }
public ArriveOnRedChart(AoROptions options, SignalPhase signalPhase) { Options = options; Chart = ChartFactory.CreateDefaultChart(options); //Set the chart properties ChartFactory.SetImageProperties(Chart); //Create the chart legend var chartLegend = new Legend(); chartLegend.Name = "MainLegend"; chartLegend.Docking = Docking.Left; Chart.Legends.Add(chartLegend); if (Options.YAxisMax != null) { Chart.ChartAreas[0].AxisY.Maximum = Options.YAxisMax.Value; } Chart.ChartAreas[0].AxisY.Minimum = 0; Chart.ChartAreas[0].AxisY.Title = "Volume (Vehicles Per Hour)"; Chart.ChartAreas[0].AxisY.Interval = 500; Chart.ChartAreas[0].AxisY2.Title = "Percent AoR"; Chart.ChartAreas[0].AxisY2.Maximum = 100; Chart.ChartAreas[0].AxisY2.Interval = 10; Chart.ChartAreas[0].AxisY2.Enabled = AxisEnabled.True; //Add the point series var AoRSeries = new Series(); AoRSeries.ChartType = SeriesChartType.Line; AoRSeries.BorderDashStyle = ChartDashStyle.Dash; AoRSeries.Color = Color.Red; AoRSeries.Name = "Arrivals on Red"; AoRSeries.XValueType = ChartValueType.DateTime; var TVSeries = new Series(); TVSeries.ChartType = SeriesChartType.Line; TVSeries.BorderDashStyle = ChartDashStyle.Dash; TVSeries.Color = Color.Black; TVSeries.Name = "Total Vehicles"; TVSeries.XValueType = ChartValueType.DateTime; var PARSeries = new Series(); PARSeries.ChartType = SeriesChartType.Line; PARSeries.Color = Color.Red; PARSeries.Name = "Percent Arrivals on Red"; PARSeries.BorderWidth = 2; PARSeries.XValueType = ChartValueType.DateTime; PARSeries.YAxisType = AxisType.Secondary; var pointSeries = new Series(); pointSeries.ChartType = SeriesChartType.Point; pointSeries.Color = Color.White; pointSeries.Name = "Posts"; pointSeries.XValueType = ChartValueType.DateTime; pointSeries.IsVisibleInLegend = false; Chart.Series.Add(pointSeries); Chart.Series.Add(AoRSeries); Chart.Series.Add(PARSeries); Chart.Series.Add(TVSeries); //Add points at the start and and of the x axis to ensure //the graph covers the entire period selected by the user //whether there is data or not Chart.Series["Posts"].Points.AddXY(Options.StartDate, 0); Chart.Series["Posts"].Points.AddXY(Options.EndDate, 0); AddDataToChart(Chart, signalPhase); SetPlanStrips(signalPhase.Plans, Chart, Options.StartDate, Options.ShowPlanStatistics); }