@Nulltiton

Как сделать два столбца в гистограмме C#?

Нужно на одном графике сделать отражение количества студентов по специальности и по курсу. Данные берутся из файла

Код на кнопку построения диаграммы:
requestChart.Series.Clear();
            requestChart.Series.Add("Количество");
            requestChart.Titles.Clear();
            requestChart.Series[0].Points.Clear();
            requestChart.Titles.Add("Name");
            requestChart.Titles[0].Text = "Распределение числа студентов по специальностям за последний год";
            requestChart.Series.Add("Курс");
            requestChart.Series[1].Points.Clear();

            requestChart.Series[0].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Column;
            requestChart.Series[1].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Column;

            var studentCount = Student.RequestStudentBySpecialities();

            for (int i = 0; i < studentCount.name.Length; i++)
                requestChart.Series[0].Points.AddXY(studentCount.name[i], studentCount.count[i]);

            for (int i = 0; i < studentCount.cources.Length; i++)
                requestChart.Series[1].Points.AddXY(1, studentCount.cources[i] + 1);


Код метода класса Student, который забирает информацию из файла и считает количество как по специальности, так и по курсу:
static public StudentCount RequestStudentBySpecialities()
        {
            string name = "database.txt";
            string[] list;
            int[] cources = new int[5];
            string buffer = "";
            var year = DateTime.Now.Year;
            List<string> specialities = new List<string>();
            List<string> students = new List<string>();
            //List<int> specialitiesCount = new List<int>();

            for (int i = 0; i < CreatingForm.SpecialtiesFill().Length; i++)
                specialities.Add(CreatingForm.SpecialtiesFill()[i]);

            string[] template = specialities.ToArray();
            int[] specialitiesCount = new int[specialities.Count];

            // чтение из файла
            FileStream file = new FileStream(name, FileMode.OpenOrCreate);
            using (StreamReader streamReader = new StreamReader(file))
            {
                while (!streamReader.EndOfStream)
                {
                    // разделение строки на элементы списка
                    buffer = streamReader.ReadLine();
                    list = buffer.Split(';');

                    if (!students.Contains(list[0]))
                    {
                        students.Add(list[0]);

                        int startYear = Convert.ToInt32(list[1].Substring(0, 4));

                        if (year - startYear <= 5)
                        {
                            cources[year - startYear]++;
                            for (int i = 0; i < template.Length; i++)
                            {
                                if (list[2] == template[i] && Convert.ToInt32(list[13]) == year)
                                    specialitiesCount[i]++;
                            }
                        }
                    }
                }

                StudentCount studentCount = new StudentCount();
                studentCount.name = template;
                studentCount.count = specialitiesCount;
                studentCount.cources = cources;

                return studentCount;
            }
        }


При построении гистограммы только по специальности все выводится правильно:
62ce79a643b63396756620.png

А при построении гистограммы по специальности и курсу получается такое:
62ce79f7cf5c6250255106.png

Как это исправить?
  • Вопрос задан
  • 86 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы