§ 15. Построение графиков функций и диаграмм

15.3. Использование компонента Chart (Диаграмма) для построения графиков функций и диаграмм

С помощью компонента Chart (Диаграмма) можно строить красивые двух- и трехмерные диаграммы на основе различных данных. Компонент Chart находится на палитре TeeChart STD и изображен в виде . Компонент Chart, помещенный на форму, получает имя  ChartN, где N — номер 1, 2, 3… (пример 15.5)

Настройка диаграммы выполняется с помощью редактора, который вызывается двойным щелчком по компоненту (пример 15.6). Параметры отображения диаграммы в окне определяются в разделе Chart, состоящей в свою очередь из набора дополнительных подразделов (General, Axis, Title, Legend, Panal, Walls, 3D). Подробнее о настройке подразделов можно почитать в приложении.

Компонент Chart является контейнером объектов Series — серий данных, которые могут быть визуализированы с помощью различных графических представлений. Свойства серий устанавливаются с помощью редактора диаграмм или непосредственно в программном коде. Для добавления серии используется кнопка Add. Затем происходит выбор внешнего вида диаграммы (пример 15.7) и настройка параметров ее отображения. При добавлении серия получает имя SeriesN, где N — номер 1, 2, 3…

Все серии добавляются на диаграмму со случайными данными, поэтому при программной обработке серию необходимо очистить командой: Series1 -> Clear();

Для добавления данных в серию используется метод Add. Если данные должны отображаться в декартовой системе координат, то используют метод AddXY (пример 15.8).

При использовании компонента Chart масштабирование выполняется автоматически.

Пример 15.9. Создать проект, в котором необходимо построить гистограмму по данным из файла. Для построения диаграммы следует использовать компонент Chart.

Этапы выполнения задания

  1. Поместить на форму компоненты: диаграмма (Chart) и кнопка (Button).
  2. Изменить свойства Caption у компонента Button1 на «Построить».
  3. Выбрать тип диаграммы — гистограмма (Bar).
  4. Настроить следующие свойства:
    4.1. Изменить подпись: Title — заменить текст TChart на Гистограмма.
    4.2. Изменить положение легенды: Legend → Position — заменить Right на Bottom.
  5. Подключить библиотеки для работы с файлами и строками.
  6. Использовать тот же файл, который был создан для примера 15.3.
  7. Написать обработчик события OnClick для компонента Button1.
    7.1. Очистить серию от случайных данных.
    7.2. В цикле считывать данные из файла и добавлять их к данным серии.

Пример 15.10. Создать проект, в котором необходимо построить графики функций y = x cosx  и   в одной системе координат. Для построения диаграммы следует использовать компонент Chart.

Этапы выполнения задания

  1. Поместить на форму компоненты: диаграмма (Chart), два компонента LabeledEdit и компонент Button.
  2. Изменить свойства Caption у компонентов LabeledEdit1, LabeledEdit2 на x0 и xn соответственно.
  3. Изменить свойства Text у компонентов LabeledEdit1 и LabeledEdit2 на -30 и 30 соответственно.
  4. Изменить свойства Caption у компонента Button1 на «Построить».
  5. Добавить две серии, для которых выбрать тип диаграммы — точечная (Point), убрать галочку 3D.
  6. Изменить название серий: кнопка Title — заменить Series1 на y=x*x+xcosx и Series2 на y=(x(x^2+5)^(1/2) / (x-3)
  7. Настроить следующие свойства:
    7.1. Свойсво Title — удалить текст TChart.
    7.2. Изменить положение легенды: Legend → Position — заменить Right на Bottom.
    7.3. Изменить положение осей: Axis → Left значение Axis → Position — установить 50%; аналогично для Axis → Bottom изменить значение Axis → Position на 50%.
    7.4. Для каждой серии:
       7.4.1. изменить размер точки: Size — 1;
       7.4.2. удалить границу вокруг точки: Border — убрать галочку Visible.
  8. Написать обработчик события OnClick для компонента Button1.
    8.1. Очистить серии от случайных данных.
    8.2. В цикле с шагом 0.001вычислять значения функций и добавлять данные к соответствующей серии.
    8.3. Для второй серии добавить проверку на равенство знаменателя нулю. Если знаменатель по модулю меньше 0.01, то следует пропускать итерацию цикла.

*Пример 15.11. Создать проект, в котором необходимо построить астроиду, заданную параметрическими уравнениями:

 .

Для построения диаграммы использовать компонент Chart.

Этапы выполнения задания

  1. Поместить на форму компоненты: диаграмма (Chart), компонент LabeledEdit и компонент Button.
  2. Изменить свойства Caption у компонента LabeledEdit1 на а.
  3. Изменить свойства Text у компонента LabeledEdit1 на 5.
  4. Изменить свойства Caption у компонента Button1 на «Построить».
  5. Добавить серию, для которой выбрать тип диаграммы — точечная (Point).
  6. Настроить следующие свойства:
    6.1. Изменить подпись: Title — заменить текст TChart на Астроида.
    6.2. Удалить легенду: Legend → Style — убрать галочку Visible.
    6.3. Положение осей и размер точки установить так же, как и в примере 15.10.
  7. Написать обработчик события OnClick для компонента Button1.
    7.1. Очистить серии от случайных данных.
    7.2. В цикле изменять параметр t от 0 до 2p[1] с шагом 0.001.
    7.3. Вычислять значения x и y и добавлять данные к серии.

Пример 15.5. Компонент Chart на форме:

Пример 15.6. Редактор диаграммы:

Пример 15.7. Выбор типа диаграммы:

Пример 15.8. Методы добавления данных в серию:

  Series1->Add(z, s, color);  

Параметры:

z — число, соответствующее значению данных;

s — подпись данных;

color — цвет.

   Series1-> AddXY(x,y,"",color);  

Параметры:

x, y — координаты отображаемой точки в декартовой системе координат;

"" — здесь может быть текст подписи к точке;

color — цвет.

Параметр color может быть опущен. В этом случае цвет элемента диаграммы определяется настройками редактора.

Пример 15.9. Форма на этапе конструирования:

Обработчик события OnClick для кнопки.

void __fastcall TForm1::Button1Click
                (TObject *Sender)

{

  ifstream fin("date.txt");

  int n;

  fin >> n;

  Series1 -> Clear();

  for(int i = 0; i < n; i++) {

    string s;

    int d;

    fin >> s >> d;

    Series1 -> Add(d, s.c_str());

  }

}

 Работающее приложение:

Пример 15.10. Форма на этапе конструирования:

Изменение названия серии:

Обработчик события OnClick для кнопки

void __fastcall TForm1::Button1Click
                TObject *Sender)

{

  double x0 = StrToFloat

  (LabeledEdit1 -> Text);

  double xn = StrToFloat

  (LabeledEdit2 -> Text);

  Series1 -> Clear();

  Series2 -> Clear();

  for (double x = x0; x <= xn; x += 0.001) {

    double y = x * x  + x * cos(x);

    Series1 -> AddXY(x, y, "", clBlue);

    if ( abs(x - 3) < 0.01 ) continue;

    double y1 = x * sqrt(x * x + 5) / (x - 3);

    Series2 -> AddXY(x, y1, "", clRed);

  }

}

Работающее приложение:

Пример 15.11. Форма на этапе конструирования:

Обработчик события OnClick для кнопки.

void __fastcall TForm1::Button1Click
                (TObject *Sender)

{

  double a = StrToFloat

   (LabeledEdit1 -> Text);

  Series1 -> Clear();

  for (double t = 0

       t <= 2 * acos(-1.);

        t += 0.001) {

    double x = a * cos(t) * cos(t) * cos(t);

    double y = a * sin(t) * sin(t) * sin(t);

    Series1 -> AddXY(x, y, "", clRed);

  }

} 

Работающее приложение:

пример