private void add_chart_element(string group, double value) { if (group == "") { return; } if (!chart_series.Any(x => x.title == group)) { chart_series.Add(new chart_element { x_value = chart_series.Count + 1, title = group, total = value, min = value, max = value, count = 1 }); } else { chart_element element = chart_series.FirstOrDefault(x => x.title == group); element.total += value; if (element.min > value) { element.min = value; } if (element.max < value) { element.max = value; } element.count += 1; } }
public void populate_comparison_chart() { if (match_history.Count <= 0) { return; } double y_axis_max = 0; //if (!force_refresh) //{ // new_selection = filter.filter_string(filter_selections); // if (new_selection == previous_selection) // return; //} force_refresh = false; previous_selection = new_selection; Filter.ResetFilters(filter_selections); reset_comparison_data(); foreach (FileTraceManagment.MatchRecord match in match_history.OrderByDescending(x => x.MatchData.MatchStart)) { if (!Filter.CheckFilters(filter_selections, match, build_records, session, translations)) { continue; } process_match(match); } if (current_x_axis.ordering == ordering.TIME_DESC) { chart_series = chart_series.OrderByDescending(x => DateTime.Parse(x.title)).ToList(); } else if (current_x_axis.ordering == ordering.VALUE_DESC && mode == "Total") { chart_series = chart_series.OrderByDescending(x => x.total).ToList(); } else if (current_x_axis.ordering == ordering.VALUE_DESC && mode == "Maximum") { chart_series = chart_series.OrderByDescending(x => x.max).ToList(); } else if (current_x_axis.ordering == ordering.VALUE_DESC && mode == "Minimum") { chart_series = chart_series.OrderBy(x => x.min).ToList(); } else if (current_x_axis.ordering == ordering.VALUE_DESC && mode == "Average") { chart_series = chart_series.OrderByDescending(x => (double)x.total / (double)x.count).ToList(); } else { return; } int current_group_count = 0; foreach (chart_element element in chart_series.ToList()) { if (element.count < current_min_sample_size) { chart_series.Remove(element); } if (current_group_count > current_result_limit - 1 && current_result_limit != 0) { if (!chart_series.Any(x => x.title == "Other")) { chart_series.Add(new chart_element { x_value = current_group_count, title = "Other", count = element.count, max = element.max, min = element.min, total = element.total }); } else { chart_element other = chart_series.FirstOrDefault(x => x.title == "Other"); other.total += element.total; other.count += element.count; if (other.min < element.min) { other.min = element.min; } if (other.max > element.max) { other.max = element.max; } } chart_series.Remove(element); } current_group_count += 1; } double x_value = 1; foreach (chart_element element in chart_series.OrderBy(x => x.title == "Other" ? 0 : 1)) { double y_value; if (mode == "Total") { y_value = element.total; } else if (mode == "Maximum") { y_value = element.max; } else if (mode == "Minimum") { y_value = element.min; } else if (mode == "Average") { y_value = (double)element.total / (double)element.count; } else { break; } if (y_value > y_axis_max) { y_axis_max = y_value; } DataPoint data = new DataPoint(x_value, y_value); data.LegendText = element.title; data.AxisLabel = element.title; data.LabelBackColor = session.BackColor; data.LabelForeColor = session.ForeColor; data.ToolTip = string.Format(@"{0}: {1}", element.title, Math.Round(y_value, 1)); current_series.Points.Add(data); x_value += 1; } ch_comparison.ChartAreas[0].AxisY.Maximum = y_axis_max * 1.05; Filter.PopulateFilters(filter_selections, cb_game_modes, cb_grouped, cb_power_score, cb_versions, cb_weapons, cb_movement, cb_cabins, cb_modules); }