GetDataSetsConverter() { Func <DateTime?, DateTime?, DateRangeGranulation?, Task <IEnumerable <IDataset> > > fnc = async(fromDate, toDate, granulation) => { var data = await LoadData(fromDate, toDate, granulation); var lineDataSets = new List <LineDataset <TimePoint> > { new() { Label = "Average water flow", BackgroundColor = ColorUtil.FromDrawingColor(Color.Green), BorderColor = ColorUtil.FromDrawingColor(Color.Green), Fill = FillingMode.Disabled }, new() { Label = "Maximum water flow", BackgroundColor = ColorUtil.FromDrawingColor(Color.Red), BorderColor = ColorUtil.FromDrawingColor(Color.Red), Fill = FillingMode.Disabled }, new() { Label = "Minimum water flow", BackgroundColor = ColorUtil.FromDrawingColor(Color.Blue), BorderColor = ColorUtil.FromDrawingColor(Color.Blue), Fill = FillingMode.Disabled } }; var barDataSet = new BarDataset <TimePoint> { Label = "Total water volume", BackgroundColor = ColorUtil.FromDrawingColor(Color.Orange), BorderColor = ColorUtil.FromDrawingColor(Color.Orange), YAxisId = TOTAL_WATER_VOLUME_Y_AXIS_ID }; foreach (var irrigationDataVm in data) { lineDataSets[0] .Add(new TimePoint(irrigationDataVm.Timestamp, irrigationDataVm.AverageWaterFlow)); lineDataSets[1].Add(new TimePoint(irrigationDataVm.Timestamp, irrigationDataVm.MaxWaterFlow)); lineDataSets[2].Add(new TimePoint(irrigationDataVm.Timestamp, irrigationDataVm.MinWaterFlow)); barDataSet.Add(new TimePoint(irrigationDataVm.Timestamp, irrigationDataVm.TotalWaterVolume)); } return(lineDataSets.Select(x => x as IDataset).Append(barDataSet)); }; return(fnc); }
private async Task GenerateBarChart() { Config.Data.Labels.Clear(); Config.Data.Datasets.Clear(); IDataset <int> expenseDataSet = new BarDataset <int>() { Label = "Expenses", BackgroundColor = ColorUtil.FromDrawingColor(Color.FromArgb(128, Color.Red)), BorderColor = ColorUtil.FromDrawingColor(Color.Red), BorderWidth = 1 }; IDataset <int> incomeDataSet = new BarDataset <int>() { Label = "Incomes", BackgroundColor = ColorUtil.FromDrawingColor(Color.FromArgb(128, Color.Green)), BorderColor = ColorUtil.FromDrawingColor(Color.Green), BorderWidth = 1 }; for (int i = 0; i < Constants.MonthsInYear; i++) { int expenseAmount = (int)Expenses.Where(e => e.DateTime.Month == i).Sum(e => e.Amount); expenseDataSet.Add(expenseAmount); int incomeAmount = (int)Incomes.Where(e => e.DateTime.Month == i).Sum(e => e.Amount); incomeDataSet.Add(incomeAmount); } ((List <string>)Config.Data.Labels).AddRange(Constants.Months); Config.Data.Datasets.Add(expenseDataSet); Config.Data.Datasets.Add(incomeDataSet); await Chart.Update(); }
public static Dictionary <DataPointType, BarConfig> GetDataSets(AppState appState) { Dictionary <DataPointType, BarConfig> dataSets = new Dictionary <DataPointType, BarConfig>(); CreateConfigs(dataSets); SortedDictionary <int, Dictionary <string, Dictionary <DataPointType, double> > > DataPoints = new SortedDictionary <int, Dictionary <string, Dictionary <DataPointType, double> > >(); foreach (var item in appState.SimulationHistories) { double totalDeliveryTime = 0; double totalDeliveryDistance = 0; double totalDistance = 0; double totalTime = 0; double totalCost = 0; double avgDeliveryTime = 0; double avgDeliveryDistance = 0; double avgDeliveryCost = 0; foreach (var order in item.Steps.Last().ClosedOrders) { totalDeliveryTime += order.DeliveryTime ?? 0; totalDeliveryDistance += order.DeliveryDistance ?? 0; } foreach (var veh in item.Steps.Last().Vehicles) { totalDistance += veh.TotalTravelDistance; totalTime += veh.TotalTravelTime; } totalCost = item.Parameters.VehicleTemplate.PurchasingCost * item.Parameters.NumberOfVehicles + totalDistance * item.Parameters.VehicleTemplate.CostPerKm + totalTime * item.Parameters.VehicleTemplate.CostPerHour / 60 / 60; avgDeliveryTime = totalDeliveryTime / item.Parameters.NumberOfOrders; avgDeliveryCost = totalCost / item.Parameters.NumberOfOrders; if (!DataPoints.ContainsKey(item.Parameters.NumberOfVehicles)) { DataPoints.Add(item.Parameters.NumberOfVehicles, new Dictionary <string, Dictionary <DataPointType, double> >()); } if (!DataPoints[item.Parameters.NumberOfVehicles].ContainsKey(item.Parameters.VehicleTemplate.Name)) { DataPoints[item.Parameters.NumberOfVehicles][item.Parameters.VehicleTemplate.Name] = new Dictionary <DataPointType, double>(); } DataPoints[item.Parameters.NumberOfVehicles][item.Parameters.VehicleTemplate.Name][DataPointType.avgDeliveryTime] = avgDeliveryTime; DataPoints[item.Parameters.NumberOfVehicles][item.Parameters.VehicleTemplate.Name][DataPointType.avgDeliveryCost] = avgDeliveryCost; } var vehicle_types = new List <string>(); foreach (var veh_number in DataPoints) { foreach (var veh in veh_number.Value) { if (!vehicle_types.Contains(veh.Key)) { vehicle_types.Add(veh.Key); dataSets[DataPointType.avgDeliveryTime].Data.Labels.Add(veh.Key); dataSets[DataPointType.avgDeliveryCost].Data.Labels.Add(veh.Key); } } } Random r = new Random(); foreach (var item in DataPoints) { BarDataset <double> dataSetAvgDelTime = new BarDataset <double>() { BackgroundColor = ColorUtil.FromDrawingColor(Color.FromArgb(r.Next(0, 255), r.Next(0, 255), r.Next(0, 255))), Label = $"{item.Key} vehicle(s)" }; BarDataset <double> dataSetAvgDeliveryCost = new BarDataset <double>() { BackgroundColor = ColorUtil.FromDrawingColor(Color.FromArgb(r.Next(0, 255), r.Next(0, 255), r.Next(0, 255))), Label = $"{item.Key} vehicle(s)" }; foreach (var veh in vehicle_types) { if (item.Value.ContainsKey(veh)) { dataSetAvgDelTime.Add(item.Value[veh][DataPointType.avgDeliveryTime]); dataSetAvgDeliveryCost.Add(item.Value[veh][DataPointType.avgDeliveryCost]); } else { dataSetAvgDelTime.Add(0); dataSetAvgDeliveryCost.Add(0); } } dataSets[DataPointType.avgDeliveryTime].Data.Datasets.Add(dataSetAvgDelTime); dataSets[DataPointType.avgDeliveryCost].Data.Datasets.Add(dataSetAvgDeliveryCost); } return(dataSets); }
public async Task <BarConfig> GetDailyReports() { var BarConfig = new BarConfig(); BarConfig.Options = new BarOptions { Legend = new Legend { Display = false }, Responsive = true, MaintainAspectRatio = false, Tooltips = new Tooltips { Enabled = true, Mode = InteractionMode.Index, Intersect = false, BorderWidth = 1, BorderColor = "rgba(0, 0, 0, 0.12)", BackgroundColor = "#ffffff", TitleFontColor = "rgba(0, 0, 0, 0.87)", BodyFontColor = "rgba(0, 0, 0, 0.54)", FooterFontColor = "rgba(0, 0, 0, 0.54)" }, Scales = new BarScales { XAxes = new List <CartesianAxis> { new BarCategoryAxis { BarThickness = 12, MaxBarThickness = 10, BarPercentage = 0.5, CategoryPercentage = 0.5, // Ticks = new CategoryTicks // { // FontColor = "rgba(0, 0, 0, 0.54)" // }, GridLines = new GridLines { Display = false, DrawBorder = false, OffsetGridLines = true }, Offset = true, OffsetGridLines = true } }, YAxes = new List <CartesianAxis> { new BarLinearCartesianAxis { BarThickness = 12, MaxBarThickness = 10, BarPercentage = 0.5, CategoryPercentage = 0.5, Ticks = new LinearCartesianTicks { BeginAtZero = true, Min = 0 // FontColor = "rgba(0, 0, 0, 0.54)" }, GridLines = new GridLines { BorderDash = new double [] { 2 }, DrawBorder = false, Color = "rgba(0, 0, 0, 0.12)", ZeroLineBorderDash = new int [] { 2 }, ZeroLineBorderDashOffset = 2, ZeroLineColor = "rgba(0, 0, 0, 0.12)" } } } } }; //Get grouped surveys by dates var bars = new List <BarDataset <DoubleWrapper> >(); var reports = await accountDbContext.AccountSurveys .ToListAsync(); //Grouped by dates var groupedDates = reports.OrderBy(p => p.SurveyDate) .GroupBy(p => p.SurveyDate.ToString("MMMM dd")) .Select(g => new { g.Key, UserSurveys = g.Select(survey => new AccountSurvey { UserSurveyStatus = survey.UserSurveyStatus, SurveyDate = survey.SurveyDate }) }); var lowBarSet = new BarDataset <DoubleWrapper> { Label = "Low", BackgroundColor = "#0f812e" }; var midBarSet = new BarDataset <DoubleWrapper> { Label = "Mid", BackgroundColor = "#f4be14" }; var HighBarSet = new BarDataset <DoubleWrapper> { Label = "High", BackgroundColor = "#FF0000" }; //Creates bottom labels by using dates foreach (var groupDate in groupedDates) { //Add data label BarConfig.Data.Labels.Add(groupDate.Key); var _survey = groupDate.UserSurveys .OrderByDescending(x => x.UserSurveyStatus) .GroupBy(x => x.UserSurveyStatus) .Select(g => new { Key = g.Key, Items = g.Select(item => new AccountSurvey { UserSurveyStatus = item.UserSurveyStatus, AccountSurveyId = item.AccountSurveyId }) }); lowBarSet.Add(_survey.FirstOrDefault(p => p.Key == UserSurveyStatus.Low) == null ? 0 : _survey.FirstOrDefault(p => p.Key == UserSurveyStatus.Low).Items.Count()); midBarSet.Add(_survey.FirstOrDefault(p => p.Key == UserSurveyStatus.Midium) == null ? 0 :_survey.FirstOrDefault(p => p.Key == UserSurveyStatus.Midium).Items.Count()); HighBarSet.Add(_survey.FirstOrDefault(p => p.Key == UserSurveyStatus.High) == null ? 0 :_survey.FirstOrDefault(p => p.Key == UserSurveyStatus.High).Items.Count()); } BarConfig.Data.Datasets.AddRange(new[] { lowBarSet, midBarSet, HighBarSet }); return(BarConfig); }