private void CreateChart(ChartInfo chartInfo) { chart.Series.Clear(); chart.Titles.Clear(); chart.Titles.Add(chartInfo.Title); chart.Legends[0].Docking = Docking.Bottom; chart.ChartAreas[0].AxisY.Title = "Messages"; chart.ChartAreas[0].AxisX.MinorGrid.LineWidth = 0; chart.ChartAreas[0].AxisX.MajorGrid.LineWidth = 0; chart.ChartAreas[0].AxisX.MajorTickMark.TickMarkStyle = TickMarkStyle.None; chart.ChartAreas[0].AxisX.MinorTickMark.TickMarkStyle = TickMarkStyle.None; chart.ChartAreas[0].AxisX.MajorTickMark.Enabled = false; chart.ChartAreas[0].AxisX.MinorTickMark.Enabled = false; chart.ChartAreas[0].AxisX.Interval = 0; chart.ChartAreas[0].AxisX.IsMarginVisible = false; chart.ChartAreas[0].AxisX.Enabled = AxisEnabled.False; List<ChartItem> items = chartInfo.Items.OrderBy(o => o.GetValue("Count")).ToList(); ; int total = items.AsEnumerable().Sum(a => (Convert.ToInt32(a.GetValue("Count")))); if (items.Count < 3) { Series series = chart.Series.Add("Count"); series.ChartType = SeriesChartType.Pie; foreach (var item in items) { ulong itemValue = Convert.ToUInt64(item.GetValue("Count")); decimal perc = total > 0 ? itemValue / (decimal)total : 0; series.Points.Add(itemValue); series.Points.Last().Label = $"{itemValue} = {itemValue} ({decimal.Round(perc * 100, 2)}%)"; series.Points.Last().LegendText = item.Author; } } else { foreach (var item in items) { Series series = chart.Series.Add(item.Author); series["PointWidth"] = "1.5"; series.ChartType = SeriesChartType.Column; ulong itemValue = Convert.ToUInt64(item.GetValue("Count")); decimal perc = total > 0 ? itemValue / (decimal)total : 0; series.Points.Add(itemValue); series.Points.Last().Label = $"{itemValue} ({decimal.Round(perc * 100, 2)}%)"; } } }
internal static ChartInfo Create(List<ConversationStatistics> statistics, MainScreenComponentArgs args) { ChartInfo info = new ChartInfo(); info.Title = string.Format("{0} [{1}]", args.Conversation.Title, args.StatisticsType); foreach (ConversationStatistics item in statistics) { ChartItem chartItem = new ChartItem(item.Identity); chartItem.Count = item.TotalMessages; info.Items.Add(chartItem); } return info; }