Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
unijcoder
0 / 0 / 5
Регистрация: 08.01.2012
Сообщений: 132
1

Графики на форме в чарте

01.12.2016, 21:02. Просмотров 448. Ответов 14
Метки нет (Все метки)

В программе считается некоторая функция в цикле.

C#
1
double f1 = P(a, XD, sigma1, 0);
Результаты расчетов выводятся в листбокс:
C#
1
listBox1.Items.Add(string.Format(шаблон, x, f1));
Нужно построить график этой функции: ось У это f1, ось Х это х.
Настройка чарта мне понятна вроде, но построить не могу. Как исправить?
Пытаюсь строить так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
System.Windows.Forms.DataVisualization.Charting.Series[] Generate()
        {
            
            double[] y1 = new double[] { f1 };
            double[] x1 = new double[] { x };
        
            chart1.ChartAreas[0].AxisX.Minimum = 0;
            chart1.ChartAreas[0].AxisX.Maximum = 10;
            chart1.ChartAreas[0].AxisY.Minimum = 0;
            chart1.ChartAreas[0].AxisY.Maximum = 1;
            chart1.ChartAreas[0].AxisX.Interval = 0.1; 
            chart1.ChartAreas[0].AxisY.Interval = 0.1;
          
            chart1.BackColor = Color.Gray;
            chart1.BackSecondaryColor = Color.WhiteSmoke;
            chart1.BackGradientStyle = GradientStyle.DiagonalRight;
 
            chart1.BorderlineDashStyle = ChartDashStyle.Solid;
            chart1.BorderlineColor = Color.Gray;
            chart1.BorderSkin.SkinStyle = BorderSkinStyle.Emboss;
 
            chart1.Series.Clear();
            System.Windows.Forms.DataVisualization.Charting.Series s1 = new System.Windows.Forms.DataVisualization.Charting.Series("Дальняя граница")
            {
                ChartType = SeriesChartType.Spline,
                BorderWidth = 3,
                Color = Color.Blue,
 
            };
          
            s1.Points.DataBindXY(x1, y1);
            
            return new System.Windows.Forms.DataVisualization.Charting.Series[] {
            s1,
          
         };
 
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2016, 21:02
Ответы с готовыми решениями:

Печать графики на форме
Ребятки, нужна помощь! Я нарисовал графику на форме, мне нужно ее распечатать...

как сделать экселевские графики на форме C#
Мне надо сделать графики на форме, хотелось бы использовать такие же графики...

Создать PictureBox на второй форме с размерами из TextBox'ов, расположенных на первой форме
Добрый вечер, столкнулся с проблемой. У меня есть 2 TextBox'a, они находятся...

Как в дочерней форме определить какой контрол нажат в родительской форме
Есть textbox на дочерней форме и если на родительской форме нажат button1, то...

После нажатия кнопки в первой форме, становится невидимым TextBox во второй форме
у меня 2 формы .в первой форме, после нажатия кнопки открывается вторая форма. ...

14
ViterAlex
6462 / 3633 / 1484
Регистрация: 11.02.2013
Сообщений: 7,990
Завершенные тесты: 3
02.12.2016, 02:35 2
Series — это график — то, что ты видишь в виде линии, точек и т.п. Чтобы в chart построить график, нужно добавить в chart объект типа Series. В строках 23-31 ты создаёшь такой объект, но не добавляешь его в chart chart1.Series.Add(s1). Далее, ты биндишь график к массивам, содержащим только одно значение, значит и на графике будет только одно значение. Тебе же нужно много значение, значит их нужно куда-то записать, прежде чем добавлять в график. Например, в словарь
Dictionary<double, double> chartData = new Dictionary<double, double>();
В цикле добавляешь значения
chartData.Add(x, f1);
Когда цикл выполнен, биндишься к графику
chart1.Series[0].Points.DataBindXY(chartData.Keys, chartData.Values);
Рабочий пример вышесказанного:
C#
1
2
3
4
5
6
7
8
9
//Данные для графика
Dictionary<double, double> chartData = new Dictionary<double, double>();
//Заполняем значениями
for (double i = -100; i < 101; i += 0.2)
    chartData.Add(i, i * i);
//Один объект Series уже добавлен по умолчанию. Настраиваем его
chart1.Series[0].Name = "Парабола";//Имя. Будет отображаться рядом с линией
chart1.Series[0].ChartType = SeriesChartType.Spline;//Тип графика
chart1.Series[0].Points.DataBindXY(chartData.Keys, chartData.Values);//Значения
1
unijcoder
0 / 0 / 5
Регистрация: 08.01.2012
Сообщений: 132
02.12.2016, 11:11  [ТС] 3
Что то не получается:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 System.Windows.Forms.DataVisualization.Charting.Series[] Generate()
        {
            Dictionary<double, double> chartData = new Dictionary<double, double>();
            for (double x= 0; x < 10; x += 0.1)
                      chartData.Add(x, f1);
 
          chart1.Series[0].Points.DataBindXY(chartData.Keys, chartData.Values);
            
            chart1.ChartAreas[0].AxisX.Minimum = 0;
            chart1.ChartAreas[0].AxisX.Maximum = 10;
            chart1.ChartAreas[0].AxisY.Minimum = 0;
            chart1.ChartAreas[0].AxisY.Maximum = 1;
            chart1.ChartAreas[0].AxisX.Interval = 0.1; 
            chart1.ChartAreas[0].AxisY.Interval = 0.1;
          
            chart1.BackColor = Color.Gray;
            chart1.BackSecondaryColor = Color.WhiteSmoke;
            chart1.BackGradientStyle = GradientStyle.DiagonalRight;
 
            chart1.BorderlineDashStyle = ChartDashStyle.Solid;
            chart1.BorderlineColor = Color.Gray;
            chart1.BorderSkin.SkinStyle = BorderSkinStyle.Emboss;
 
            chart1.Series.Clear();
            System.Windows.Forms.DataVisualization.Charting.Series s1 = new System.Windows.Forms.DataVisualization.Charting.Series("Дальняя граница")
            {
                ChartType = SeriesChartType.Spline,
                BorderWidth = 3,
                Color = Color.Blue,
 
            };
          
         
            s1.Points.DataBindXY(x, f1);
            
            return new System.Windows.Forms.DataVisualization.Charting.Series[] {
            s1,
          
         };
 
        }
0
ViterAlex
6462 / 3633 / 1484
Регистрация: 11.02.2013
Сообщений: 7,990
Завершенные тесты: 3
02.12.2016, 12:39 4
unijcoder, ну нужно хоть немного включать голову. Ты вставил мой код, а свой при этом не изменил.
  1. Зачем тебе из метода возвращать массив графиков?
  2. Зачем ты очищаешь коллекцию Series?
  3. Зачем создаёшь массивы x1, y1?
0
unijcoder
0 / 0 / 5
Регистрация: 08.01.2012
Сообщений: 132
02.12.2016, 20:19  [ТС] 5
Я не понял. Что мне поменять, у меня в основном там настройки чарта?
0
ViterAlex
6462 / 3633 / 1484
Регистрация: 11.02.2013
Сообщений: 7,990
Завершенные тесты: 3
02.12.2016, 22:42 6
Ответь на заданные вопросы и поймёшь, что поменять
0
unijcoder
0 / 0 / 5
Регистрация: 08.01.2012
Сообщений: 132
03.12.2016, 18:36  [ТС] 7
вопрос 2 понятен. Убираю:
C#
1
 chart1.Series.Clear();
Добавлено через 1 минуту
По третьему вопросу - я не создаю массивы. Это было в начальном коде. Сейчас вроде нету.

Добавлено через 1 минуту
На 1 вопрос:
Это?
C#
1
2
 return new System.Windows.Forms.DataVisualization.Charting.Series[] {
            s1,
Добавлено через 9 часов 17 минут
Так не строит график:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 System.Windows.Forms.DataVisualization.Charting.Series[] Generate()
        {
            Dictionary<double, double> chartData = new Dictionary<double, double>();
            for (double x= 0; x < 10; x += 0.1)
                      chartData.Add(x, x*x);
 
          chart1.Series[0].Points.DataBindXY(chartData.Keys, chartData.Values);
            
            chart1.ChartAreas[0].AxisX.Minimum = 0;
            chart1.ChartAreas[0].AxisX.Maximum = 10;
            chart1.ChartAreas[0].AxisY.Minimum = 0;
            chart1.ChartAreas[0].AxisY.Maximum = 1;
            chart1.ChartAreas[0].AxisX.Interval = 0.1; 
            chart1.ChartAreas[0].AxisY.Interval = 0.1;
          
            chart1.BackColor = Color.Gray;
            chart1.BackSecondaryColor = Color.WhiteSmoke;
            chart1.BackGradientStyle = GradientStyle.DiagonalRight;
 
            chart1.BorderlineDashStyle = ChartDashStyle.Solid;
            chart1.BorderlineColor = Color.Gray;
            chart1.BorderSkin.SkinStyle = BorderSkinStyle.Emboss;
 
           // chart1.Series.Clear();
            System.Windows.Forms.DataVisualization.Charting.Series s1 = new System.Windows.Forms.DataVisualization.Charting.Series("Дальняя граница")
            {
                ChartType = SeriesChartType.Spline,
                BorderWidth = 3,
                Color = Color.Blue,
 
            };
          
         
           // s1.Points.DataBindXY(x, x*x);
            
            return new System.Windows.Forms.DataVisualization.Charting.Series[] {
      //      s1,
          
         };
В чем тут дело?
0
ViterAlex
6462 / 3633 / 1484
Регистрация: 11.02.2013
Сообщений: 7,990
Завершенные тесты: 3
03.12.2016, 23:34 8
Должно строить. Удали всё лишнее, замени тип метода на void
Сначала сам, если не получится — смотри пример под спойлером
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 void Generate()
{
    Dictionary<double, double> chartData = new Dictionary<double, double>();
    for (double x= 0; x < 10; x += 0.1)
              chartData.Add(x, x*x);
 
    chart1.Series[0].Points.DataBindXY(chartData.Keys, chartData.Values);
    chart1.ChartAreas[0].AxisX.Minimum = 0;
    chart1.ChartAreas[0].AxisX.Maximum = 10;
    chart1.ChartAreas[0].AxisY.Minimum = 0;
    chart1.ChartAreas[0].AxisY.Maximum = 1;
    chart1.ChartAreas[0].AxisX.Interval = 0.1; 
    chart1.ChartAreas[0].AxisY.Interval = 0.1;
  
    chart1.BackColor = Color.Gray;
    chart1.BackSecondaryColor = Color.WhiteSmoke;
    chart1.BackGradientStyle = GradientStyle.DiagonalRight;
 
    chart1.BorderlineDashStyle = ChartDashStyle.Solid;
    chart1.BorderlineColor = Color.Gray;
    chart1.BorderSkin.SkinStyle = BorderSkinStyle.Emboss;
}
0
unijcoder
0 / 0 / 5
Регистрация: 08.01.2012
Сообщений: 132
04.12.2016, 12:25  [ТС] 9
График не строится.
0
ViterAlex
6462 / 3633 / 1484
Регистрация: 11.02.2013
Сообщений: 7,990
Завершенные тесты: 3
04.12.2016, 13:03 10
Строится
0
unijcoder
0 / 0 / 5
Регистрация: 08.01.2012
Сообщений: 132
04.12.2016, 17:12  [ТС] 11
Блин, у меня нет...
0
ViterAlex
6462 / 3633 / 1484
Регистрация: 11.02.2013
Сообщений: 7,990
Завершенные тесты: 3
04.12.2016, 17:50 12
Плохо, конечно. Но гадать без кода я не умею
0
unijcoder
0 / 0 / 5
Регистрация: 08.01.2012
Сообщений: 132
04.12.2016, 20:20  [ТС] 13
Вот проект.
0
Вложения
Тип файла: rar прога.rar (114.0 Кб, 2 просмотров)
ViterAlex
6462 / 3633 / 1484
Регистрация: 11.02.2013
Сообщений: 7,990
Завершенные тесты: 3
04.12.2016, 22:05 14
Метод Generate ты добавил, но нигде его не вызываешь. Как же он будет строить? Исправляй. Я так понимаю, что метод нужно вызвать из обработчика нажатия на кнопку «График».
Кроме того, в самом методе ты обращаешься к какому-то полю f1, которое из метода не видно. Тоже нужно поправить.
0
unijcoder
0 / 0 / 5
Регистрация: 08.01.2012
Сообщений: 132
12.12.2016, 11:48  [ТС] 15
А как подправить? Можете скинуть подправленный рабочий проект?
0
12.12.2016, 11:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2016, 11:48

Заменить картинку у кнопки на 1-ой форме по клику на кнопку на 2-ой форме
Есть две формы . На первой форме есть одна кнопка с картинкой &quot;А&quot; , когда...

Счетчик. При нажатии кнопки на второй форме должно изменяться значение метки в первой форме
Подскажите вот есть две формы,при нажатии кнопки на второй форме должно...

Точки в Чарте
Есть программа, которая находит несколько точек в Chart( кол-во зависит от...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru