Example #1
0
        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)}%)";
                }
            }
        }
Example #2
0
        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;
        }