Difference between revisions of "TAChart Tutorial: Getting started/ru"

From Lazarus wiki
Jump to navigationJump to search
Line 74: Line 74:
  
 
Скомпилируем программу. Мы видим три кривых, и ось x автоматически покрывает наш диапазон данных между -10 и 10. Ну не слишком плохо, но далеко от совершенства: диаграмма очень запутанная, нельзя различить индивидуальные линии, и трудно сказать какие серии какой функции принадлежат.
 
Скомпилируем программу. Мы видим три кривых, и ось x автоматически покрывает наш диапазон данных между -10 и 10. Ну не слишком плохо, но далеко от совершенства: диаграмма очень запутанная, нельзя различить индивидуальные линии, и трудно сказать какие серии какой функции принадлежат.
== Formatting the series ==
+
== Форматирование серий ==
Why don't we change the color of each series? To do this select each series in the object tree and, in the object inspector below, change the [[Property|property]] <syntaxhighlight lang="pascal" inline>SeriesColor</syntaxhighlight> as you want it to be - <syntaxhighlight lang="pascal" inline>SeriesColor</syntaxhighlight> is the color of the lines connecting the data points.
+
Почему бы не изменить цвет каждой линии? Для этого нужно найти серию в дереве объектов и в инспекторе объектов изменить [[Property|свойство]] <syntaxhighlight lang="pascal" inline>SeriesColor</syntaxhighlight> на желаемый вами — <syntaxhighlight lang="pascal" inline>SeriesColor</syntaxhighlight> это цвет линии соединяющей точки.
  
When you recompile you will see the series colored. But we still cannot distinguish between the different functions. What we need is a legend.
+
После перекомпиляции увидите окрашенные линии. Но пока мы не можем различить разные функции. Нам нужна легенда.

Revision as of 20:50, 30 May 2023

Deutsch (de) English (en) suomi (fi) français (fr) 日本語 (ja) русский (ru)

Введение

tachart getting started step6.png

Если вам хочется добавить график или диаграмму на форму, вам надо ознакомиться с TAChart. Это стандартный пакет Lazarus для рисования графиков и диаграмм.

В этом руководстве мы нарисуем с помощью TAChart несколько элементарных математических функций. Мы создадим диаграмму с тремя рядами данных (line series) для функций

  • y=cos(x),
  • y=sin(x), и
  • y=cos(x)*sin(x).

Возможно здесь стоит пояснить слова "series" и "chart" (диаграмма): вся диаграмма в целом — это "chart", а каждая из функций будет отображаться в виде кривой, называемой "series". Мы соединим точки линейными отрезками и поэтому будем использовать название "line series". TAChart, конечно, позволяет использовать много других типов данных, например, столбики (bar series), площади (area series), круговые диаграммы (pie series), или даже такие продвинутые типы как сплайны или fit series.

Что нужно?

Это руководство будет очень элементарным. Конечно, вам необходимы базовые знания языка Object Pascal и Lazarus IDE.

TAChart включён в Lazarus, так что нет необходимости искать этот пакет где-то в Интернете. Однако не используйте слишком старые версии Lazarus, так как TAChart активно развивается и некоторые особенности могут меняться от версии к версии.

Лучше всего изучите это руководство шаг за шагом. Но если хотите, можете использовать исходный код завершённого проекта в конце этой статьи.

Новый проект

TAChart component palette.png

Для начала создадим в Lazarus новый проект и выберем в палитре компонентов страницу "Chart". Кликнем по самой левой иконке, компоненту TChart, и добавим его на форму. Увидите пустую диаграмму со стандартными осями X и Y.

TAChart GettingStarted Step1.png

Добавление серий

Теперь давайте добавим серию. Для этого дважды кликнем по нашей диаграмме (или кликнем правой клавишей и выберем "Редактор диаграмм" в контекстном меню). Появится редактор серий TAChart. Он ещё пуст, но когда нажмём "Добавить", то увидим меню со всеми типами серий доступных в пакете TAChart. Выберем "График(line series)". Повторим дважды, чтобы создать три графика, приданных этой диаграмме. Они ещё не отображаются на диаграмме, потому что ещё не содержат данных. Нет данных — нет отображения. Мы поправим это за минуту.

TAChart GettingStarted Step1a.png

Перед тем, как мы это сделаем, посмотрим на дерево инспектора объектов. TAChart использует довольно сложную архитектуру классов и контейнеров, поэтому важно понимать дерево объектов. В нашем проекте мы видим компонент TChart и его потомков: три графика (line series) и AxisList с левой(Left) и нижней (Bottom) осями тоже в качестве потомков. Имена графиков (series) созданы в соответствии с шаблоном Chart<number><SeriesType><Number>.

tachart getting started object tree.png

Почему бы нам не дать им более понятные имена, например, SinSeries, CosSeries, and SinCosSeries? Для этого кликните на каждой серии и поменяйте Name в соответствующем поле инспектора объектов.

Добавление данных

Теперь пора добавить данные. Простейший способ — создать данные вместе с формой, т.е. мы пишем обработчик для события формы OnCreate. Конечно, в «реальном» проекте, вы добавите данные по-другому, например, после нажатия кнопки, которое может запустить вычисления или чтение данных из файла.

procedure TForm1.FormCreate(Sender: TObject);
const
  N = 100;
  MIN = -10;
  MAX = 10;
var
  i: Integer;
  x: Double;
begin
  for i:=0 to N-1 do begin
    x := MIN + (MAX - MIN) * i /(N - 1);
    SinSeries.AddXY(x, sin(x));
    CosSeries.AddXY(x, cos(x));
    SinCosSeries.AddXY(x, sin(x)*cos(x));
  end;
end;

Эта процедура создаёт 100 точек с данными на каждую серию. Значения x вычисляются эквидистантными между MIN и MAX, т.е. -10 and 10. Важными строками являются вызовы методаAddXY по всем сериям. Этот метод берёт координаты x и y каждой точки и добавляет их во внутренний список. Существуют также перегруженные версии этих методов где можно передать текстовую метку для каждой точки, а также индивидуальный цвет, но нам здесь не нужна эта функция.

Вышеупомянутый список — так называемый исходник диаграммы (chart source) — это класс класс, который обеспечивает данные для построения диаграммы. Вы можете использовать встроенный источник данных (chart source), или связать серии с самостоятельным источником. На палитре компонентов есть много источников данных, например

  • TListChartSource запоминает данные в списке (этот тип используется нашими сериями по умолчанию)
  • TDBChartSource обращается к записям и полям в базе данных
  • TUserDefinedChartSource даёт очень общий доступ к данным, хранимым, например, в массиве записей, определённых пользователем
  • TCalculatedChartSource позволяет анализировать одну серию и отображать результаты в другой серии.

Но достаточно об источниках диаграммы — встроенных источников достаточно для этого ознакомительного проекта.

tachart getting started step2.png

Скомпилируем программу. Мы видим три кривых, и ось x автоматически покрывает наш диапазон данных между -10 и 10. Ну не слишком плохо, но далеко от совершенства: диаграмма очень запутанная, нельзя различить индивидуальные линии, и трудно сказать какие серии какой функции принадлежат.

Форматирование серий

Почему бы не изменить цвет каждой линии? Для этого нужно найти серию в дереве объектов и в инспекторе объектов изменить свойство SeriesColor на желаемый вами — SeriesColor это цвет линии соединяющей точки.

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