Построение графика (диаграммы)

Для построения графиков и диаграмм в Borland C++ Builder используется компонента Chart. Эта компонента объединяет объекты Series типа TChartSeries – серии данных, характеризующихся различными стилями отображения. Каждая серия будет соответствовать одной кривой на графике.

Свойства объекта Chart:

AllowPanning Определяет возможность пользователя прокручивать наблюдаемую часть графика во время выполнения, нажимая правую кнопку мыши: pmNone – прокрутка запрещена; pmHorizontal – разрешена прокрутка только в горизонтальном направлении; pmVertical – только в вертикальном pmBoth – в обоих напрвлениях
AllowZoom Позволяет пользователю изменять во время выполнения масштаб изображения, вырезая фрагменты диаграммы или графика курсором мыши.
Title Определяет заголовок диаграммы
Foot Определяет подпись под диаграммой. По умолчанию отсутствует. Текст подписи определяется подсвойством Text
Frame Определяет рамку вокруг диаграммы
Legend Легенда диаграммы – список обозначений
MarginLeft, MarginRight MarginTop MarginButtom Значения левого, правого, верхнего и нижнего полей
ButtomAxis LeftAxis RightAxis Эти свойства определяют характеристики соответственно нижней, левой и правой осей. Задание этих свойств имеет смысл для графиков и некоторых других типов диаграмм
LeftWall ButtomWall BackWall Эти свойства определяют характеристики соответственно левой, нижней и задней граней области трехмерного отображения графика
SeriesList Список серий данных, отображаемых в компоненте
View3d Разрешает или запрещает трехмерное отображение диаграммы
View3dOptions Характеристики трехмерного отображения
Chart3DPersent Масштаб трехмерности (толщина диаграммы, ширина лент графика)

Редактор диаграмм можно вызвать следующим образом:

  • кнопкой с многоточием рядом с названием свойства в инспекторе объектов;
  • двойным щелчком на компоненте Chart при проектировании формы;
  • выбором команды Edit Chart в контекстном меню компонента

Рис. 6 Окно редактора диаграмм

Для задания отображаемых значений надо использовать методы серий Series:

1. Clear – очищает серию от занесенных ранее данных.

2. Add – позволяет добавить в диаграмму новую точку:

Add(Const AValue:Double; Const ALabel:String; AColor:TColor)

Параметр AValue соответствует добавляемому значению, параметр ALabel – название, которое буде отображаться на диаграмме и в легенде, параметр AColor – цвет. Параметр ALabel необязательный, его можно задавать пустым:’’.

3. AddXY – позволяет добавить новую точку в график функции:

AddXY(Const AXValue, AYValue: Double; Const ALabel: String; AColor: TColor);

Параметры AXValue и AYValue соответствуют аргументу и функции, параметры ALabel и AColor – те же, что и в методе Add.

Создадим приложение, которое будет выводить круговую диаграмму и графики Sin и Cos:


1. Открыть новое приложение. Поместить на него 2 панели Panel, так чтобы они занимали всю область формы.
Panel1->Align=alTop, Panel2->Align=alButtom, чтобы привязать их к верхней и нижней границам формы соответственно.
Поместить на Panel1 компоненту Chart1 и на Panel2 компоненту Chart2. Задать свойству Align этих компонент значение alClient, чтобы они при изменении размера формы изменяли свои размеры вместе с панелями.


2. Перейти в редактор диаграмм Chart1. На закладке Chart, на закладке Series щелкнуть на кнопке Add – добавить серию. Вы попадаете в окно, в котором можно выбрать тип диаграммы или графика. В данном случае выберем Pie – круговая диаграмма.
Закладка Titles – позволяет задавать заголовок диаграммы (Диаграмма продукции подразделений). Закладка Legend – позволяет задавать позволяет задавать параметры отображения легенды легенды диаграммы (списка обозначений) или вообще убирать ее с экрана.
Закладка Panel – определяет вид панели, на которой отображается диаграмма.
Закладка 3D – позволяет определить внешний вид диаграммы: сдвиг, наклон, толщину и т.д. Результат применения различных опций сразу отображается на условном примере.

3.В редакторе диаграмм Chart1, на закладке Series можно выбрать дополнительные характеристики отображения серии.
На закладке Format для круговой диаграммы можно включить опцию Circled Pie, которая обеспечит при любом размере компонента Chart отображение диаграммы в виде круга.
На закладке Marks кнопки группы Style определяют, что будет написано на ярлычках, относящихся к отдельным сегментам диаграммы: Value – значение, Percent – проценты, Label – названия данных и т.д. В приведенном примере включена кнопка Percent, а на закладке General установлен шаблон процентов, обеспечивающий отображение значений с точностью два десятичных знака.
4.Есть возможность отображать одни и те же данные с помощью разных типов диаграмм. Для этого в редакторе диаграмм Chart1, на закладке Chart, нажав на закладке Series кнопку Clone, а затем для этой новой серии нажать кнопку Change (изменить) и выбрать другой тип диаграммы, например, Bar. Чтобы эти два разных типа диаграммы не появлялись на одном рисунке одновременно, нужно выключить индикатор этой новой серии на закладке Series, а потом предоставить пользователю выбрать тот или иной вид отображения диаграммы, например с помощью события OnClick для диаграммы (ниже будет показано как это делается).

5.Повторить описанные выше действия для задания свойств компонента Chart2: надо задать две серии и выбрать тип диаграммы Line. Для графиков на закладках Axis и Walls можно задать координатные характеристики осей и трехмерных граней графика.

Рис. 7 Внешний вид формы приложения

7. Осталось написать код, задающий данные, которые нужно отображать. Для Chart1 зададим в круговой диаграмме некоторые константные данные, а в графиках для Chart2 – функции Sin и Cos. Процедуру загрузки данных можно включить просто в событие OnCreate формы.

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

//данные для круговой диаграммы

int A1,A2,A3;

A1=200;

A2=250;

A3=480;

//удаление старых данных

Series1->Clear();

//добавление данных для диаграммы

Series1->Add(A1,"",clRed);

Series1->Add(A2,"",clBlue);

Series1->Add(A3,"",clGreen);

//данные для графиков

Series3->Clear();

Series4->Clear();

float PI=3.14;

for(int i=0;i<100;i++)

{

Series3->AddXY(0.02*PI*i,sin(0.02*PI*i),"",clRed);

Series4->AddXY(0.02*PI*i,cos(0.02*PI*i),"",clBlue);

}

}

Операторы Clear нужны, если в процессе работы приложения нужно обновлять данные, т.к. без этих операторов повторное выполнение методов Add и AddXY только добавит новые точки, не удалив прежние. Если для данных, отображаемых в диаграмме предусмотрены две серии разных видов Pie и Bar: Series1 и Series2, то в событие OnClick диаграммы Chart1 можно ввести процедуру, изменяющую по требованию пользователя тип диаграммы.

void __fastcall TForm1::Chart1Click(TObject *Sender)

{

if(Series1->Active==true)

{

Series2->Assign(Series1);

Series2->Active=true;

Series1->Active=false;}

else

{if(Series2->Active==true)

{

Series1->Assign(Series2);

Series1->Active=true;

Series2->Active=false;

}

}

}

Для компонента Chart2 свойства AllowPanning и AllowZoom можно установить в true, что позволяет прокручивать наблюдаемую часть графика во время выполнения, нажимая правую кнопку мыши, и изменять во время выполнения масштаб изображения, вырезая фрагменты диаграммы или графика курсором мыши.

Компонент Chart также имеет метод Print, обеспечивющий печать. Предварительно может быть выполнен метод PrintPortrait, задающий книжную (вертикальную) ориентацию бумаги, или метод PrintLandscape, задающий альбомную (горизонтальную) ориентацию. Масштабировать размер печатаемого графика можно, вызвав предварительно метод PrintRect:

PrintRect(Const R: TRect);

в котрором параметр R определяет размер области принтера, в которой осуществляется печать.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  




Подборка статей по вашей теме: