Учебник Grace

Edward Vigmond evigmon@tulane.edu

for Grace-5.1.4
Перевод: Иван Хахаев, 2007 ikh1@yandex.ru
Для Grace-5.1.20

Перевод по возможности буквальный, однако несколько изменен стиль: вместо выражений типа "если Вы хотите сделать..." использованы обезличенные варианты. Некоторые выражения, близкие к идиоматичнеским, переведены другими словами, по возможности, без утраты смысла изложения. В связи с большим различием версий актуализированы названия элементов меню. Все примечания переводчика выделены именно этим шрифтом.

Показания к применению: Для использования этого учебника должен быть установлен пакет Grace. Он присутствует в ALT Linux Master, ALT Linux Compact 3.0 DVD edition, Debian 3.1 Sarge и Debian 4.0 Etch, а также в SUSE Linux 10.0 и 10.1. Возможно, что он есть и в Scientific Linux.

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


1. Введение

2. Создание простого графика

3. Блоки данных

4. Создание рядов данных средствами Grace

5. Пакетный режим построения графиков

6. Подгонка кривых

7. Преобразования

8. Использование каналов

9. Множественные графики

10. Связи


1. Введение

Учебник предназначен для новичков в Grace, однако имееющих некоторое знакомство с оконной системой. Он создан, чтобы показать основные операции в Grace, а также ее некоторые менее очевидные возможности. В пределах описанных здесь действий открывается довольно много полезных возможностей использования Grace.

1.1 Назначение

Назначение этого учебника - дать небольшие примеры, демонстрирующие как делать определенные вещи. Чтобы дать пользователю представление о возможностях программы, будут продемонстрированы как основные, так и более эзотерические особенности Grace. Невозможно продемонстрировать все, что способна делать Grace. Знание приходит только при использовании и экспериментировании. Рекомендуется проделывать все вещи, описанные в этом учебнике, и понимание придет. В конце концов, для помощи можно обращаться к руководству пользователя.

1.2 Обозначения

При указании выбираемых элементов в учебнике используется форма типа snaf:/foo/bar/bell , что означает: в диалоговом окне snaf выбирается меню foo, подменю bar и из подменю bar элемент bell. Диалоговое окно main - это главное окно программы Grace (в режиме xmgrace). Если в элементе меню существует пробел, он заменяется на подчеркивание. Так, если элемент меню на самом деле "Bell jar" вместо bell из предыдущего примера, пример будет выглядеть как snaf:/foo/bar/Bell_jar.

То, что требуется набрать (напечатать), будет представлено моноширинным шрифтом, например "наберите y = 3*sin(x)".

Некоторые примеры требуют ввода данных из файла. В таких случаях это должны быть файлы из каталога учебника (/usr/share/grace/doc или /usr/share/doc/grace) с именами data.N или N.agr (возможно N.agr.gz, где N - номер урока. Например, для выполнения урока 7.1.3 нужно посмотреть файл 7.1.3.agr. Подразумевается, что каждый большой урок начинается с чистого листа.

1.3 Системные требования

Некоторые нижеследующие примеры требуют выполнения системных команд. Команды могут отличаться на разных машинах или иметь слегка разный синтаксис. Команды в этом учебнике максимально приближены к стандартам команд UNIX. Этот учебник был подготовлен на машине с Linux, ядро 2.0.32.


Перевод сделан на машине с Linux (правда, странно?) с ядром 2.6.18

1.4 Общие сведения

Перед тем как сделать Вашу жизнь легче, нужно сделать пару замечаний по поводу GUI.

  1. Часто возможно выделять более чем один элемент из списка одновременно (некоторые списки не позволяют это делать). Щелчок мышью на элементе списка без использования модификаторов клавиатуры отменит выбор для остальных элементов и выделит только нужный. Щелчок при нажатой клавише SHIFT позволяет выделить все элементы от ранее выделенного до текущего. Наконец, использование CTRL позволяет индивидуально переключать выделение элемента.
  2. В диалоговых окнах есть две кнопки: "Apply" и "Accept". Изменения не отображаются, пока не нажата ни одна из этих кнопок. Разница в том, что "Accept" закрывает диалог.

1.5 Отказ от гарантий

Можно предположить, что продукт становится лучше от версии к версии, но это не может быть гарантировано. Работа ведется непрерывно. Следовательно, если что-нибудь не так, об этом можно сообщить и это будет исправлено, но имейте ввиду, что все делается в свободное от основной работы время.

2. Создание простого графика

Предметом этого урока является выполнение нескольких основных действий в Grace: чтение некоторых данных из файла в график и затем аннотирование графика. В ходе урока будут использованы некоторые основные команды и диалоги Grace.

2.1 Чтение данных из файла

Начнем формирование ряда данных с диалога Main:Data/Import/ASCII. Выберем файл 2.1.dat (работают как двойной щелчок мышью, так и использование RETURN). В результате на графике появится черная линия.

Далее может понадобиться добавлять какие-то другие ряды данных, и в то же время файлы данных могут иметь несколько отличающийся формат. Просмотрев файл "2.1.dat" (любой программой на выбор), можно увидеть, что в нем несколько столбиков с числами. Один из вариантов интерпретации этого файла таков, что первый столбик - это значения по X, а остальные - значения по Y. Откроем в Grace диалог "Read Sets" (Main:Data/Import/ASCII) снова. На этот раз, из списка "Load as" выберем значение "NXY". Снова выберем файл "2.1.dat". Теперь получим несколько отличющихся по цвету линий.

Теперь мы имеем две копии первого ряда данных, поскольку файл открывался дважды. Хорошо бы убрать неудачную копию. Это наиболее просто делается вызовом списка всех рядов данных. Выбираем Main:Edit/Data_sets... и получаем диалог свойств рядов данных. В нем отображаются все ряды данных и для выбранного ряда он показывает некоторую статистику. Чтобы убарть ряд данных, его нужно выбрать и нажать правую кнопку мыши. Появится меню, в котором можно выбрать"Kill". Нужно отметить, что существует "Kill" (уничтожить) и "Kill data" (уничтожить данные). В первом случае полностью удалейтся все, связанное с рядом данных, в то время как во втором - удаляются данные, но сохраняются все настройки для них так что, если новые данные считываюся в ряд данных, он имеет такие же свойства (цвет и толщина линии и т.д.). Теперь сделаем "Kill" для ряда данных 0 (G0.S0).

2.2 Настройка рядов данных

Теперь нужно настроить наши ряды данных. Настраиваются практически все свойства линий, включая цвета, толщины и вид линий, символы, заливку и т.д. Эти операции доступны в диалоге "Set appearance", который вызывается выбором Main:Plot/Set appearance... или двойным щелчком по выбранному ряду данных прямо на графике.

В появившемся диалоге снова имеется список рядов данных с их номерами (например, G0.S1 означает ряд данных 1 на графике 0). Для последующих операций может потребоваться знание этого номера. Также, как и в диалоге Main:Edit/Data_sets..., щелчок правой кнопкой мыши в списке рядов данных вызывает меню операций с рядом данных.

Раскраска всех рядов данных в разные цвета

Простейший способ раскрасить все ряды данных в разные цвета - в главном меню диалога "Set appearance" выбрать Edit/Set different colors. Проделайте это с имеющимся графиком.

Настройка каждого ряда данных

Диалог изменяется, показывая настройки ряда данных, выбранного в списке. Настраиваются практически все параметры. Попробуйте изменить цвет и толщину линий, добавить символы в точки ряда данных, убрать линии между точками данных и закрасить область между осью X и линией. Не зубудьте попробовать настройки во всех вкладках этого диалога, а не только в Main. Чтобы увидеть эффект от изменений, нужно нажать кнопку "Apply". N.B.: Каждый отображаемый объект имеет номер, так что если они перекрываются, объект с наибольшим номером будет сверху. Это относится к графикам и рядам данных на каждом графике.

2.3 Подписи осей с использованием панели "шрифт"

Параметры координатных осей управляются диалогом настройки вызываемым как Main:Plot/Axis properties или двойным щелчком по рамке графика. Можно изменить все параметры координатной оси, а именно заголовок, шрифт, цвет, наличие/остутсвие линий сетки, определить собственные метки и надписи. Существует много параметров для настройки, и лучший путь - это пробовать и смотреть, что делает каждый параметр.

Начнем с надписей по осям. Предположим, что кривая представляет количество задач, обрабатываемых процессором как функцию количества пользователей. Чтобы было интереснее, предположим, что все проиходит в Квебеке. Это означает, что должен быть график "Nombre de tâches vs. nombre d'usagers". Отметим важность наличия значка над "a" в слове tâches, иначе можно и не пытаться рисовать графики во многих других случаях.... Вызываем диалог настройки осей (Main:Plot/Axis properties), выбираем ось Y, и щелкаем в строке ввода "label string:" для ввода надписи для оси. Начинаем набирать Nombre de t. Теперь нужно ввести специальный символ (â). Для этого открываем панель "шрифт" (font tool) нажатием на Control-E. Символы, которые уже набраны, отображаются в строке "Cstring" этого диалога. Переместим курсор в то место, куда надо ставить специальный символ, и щелкнем по этому символу в наборе символов. Теперь этот символ появился в строке. Можно закончить ввод строки тут же, или нажать "Accept" и вернуться в диалог настройки осей. Теперь можно сделать метку и для оси X. Панель "шрифт" (font tool) доступна всегда, когда нужно вводить текст.


Прим. переводчика: это замечательная возможность ввода кириллицы в случаях, когда прямо с клавиатуры ее ввести невозможно (несовпадение локалей, кодировок и пр.). Нужно только, чтобы шрифт в font tool совпадал со шрифтом, который выбирается для надписи.

Все атрибуты, относящиеся к надписям по осям, такие как позиция, шрифт, цвет и размер букв, могут быть изменены.

2.4 Заголовки графика

Следующее упражнение - создание заголовков графика. Все действия, требуемые для этого, совершаются в диалоге "Graph appearance", который вызывается выбором Main:Plot/Graph appearance или двойным щелчком над рамкой графика.

Теперь можно написать заголовок графика и, выбрав вкладку "Titles", установить шрифт и цвет заголовка. Область "Viewport" в нижней части вкладки"Main" определяет 4 угла рамки графика (в относительных координатах). Эти позиции можно изменить, редактируя числа вручную, или перемещая черный квадратик в углу рамки графика, предварительно дважды щелкнув по нему.

В этом диалоге настраиваются и другие свойства графика: рамка, цвет фона и наличие легенды. Легенда будет разобрана чуть дальше.

2.5 Легенды

Если на графике имеется несколько кривых, имеет смысл их как-то обозначить, чтобы другие люди могли понять, что означает этот рисунок. Первое, что нужно сделать - установить метку для каждого ряда данных. Это делается вводом строки "Legend" в диалоге "Set appearance". Теперь на вкладке "Main" диалога "Graph appearance" включаем переключатель "Display legend" чтобы увидеть область легенды. Положение и внешний вид этой области настраивается на вкладке "Leg. box". Расположение и пространство между элементами легенды настраивается на вкладке "Legends". Для простоты, назовем ряды данных буквами по алфавиту и затем посмотрим, что получается при различных вариантах настроек.

Указание расположения путем ввода координат может быть мучительным, особенно при точной настройке. Для облегчения задачи также доступен графический метод, хотя он и не очевиден. Когда легенда появляется, она может быть перетащена в другое место. Чтобы это сделать, надо нажать CTRL-L когда мышь расположена в главной рабочей области. Тогда курсор-"стрелка" превращается в "руку с пальцем". Если это не сработает, дважды щелкните по рабочему листу (чтобы переместить фокус ввода) и затем нажмите CTRL-L. Далее можно щелкнуть по области легенды и перетаскивать ее. Чтобы выйти из режима перетаскивания (так же как и из любого другого режима), нужно нажать правую кнопку мыши.

2.6 Вызов (A challenge)

Попробуйте ради упражнения или со скуки создать файл исходных данных и повторить то, что изображено на mygraph.png

3. Блоки данных

Блок данных - это таблица с числами, которая интерпретируется как столбики чисел. То, как из столбиков будут создаваться ряды данных, зависит от информации, которую хочется извлесь из файла.

Для начала нужно прочитать блок данных. Сделаем это, используя диалог Main:Data/Import/ASCII. Выберем файл "3.dat" и в списке вариантов "Load as" выберем "Block data". Если данные считаны успешно, должно появиться окно настройки рядов данных из блока данных. В самом верху этого окна можно увидеть, сколько столбцов данных было считано.

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

Затем выбираем, какой столбец содержит значения по координате X. Если такого нет, выбираем "Index", что означает, что по X будет порядковый номер элементов столбцов, начиная с 1.

Значения с Y1 по Y4 используются для выбора вариантов интервалов ошибок (error bars) что может быть нужно для других типов рядов данных.

Последняя вещь, которую надо определить - график, в который нужно загрузить ряд данных, если имеется более чем 1 график.

Наконец, нажимаем "Accept" и создаем ряд данных.

После закрытия этого диалога его можно вызвать снова, используя список рядов данных (напр. Main:Edit/Data_sets) и затем выбрав "Create_new/From_block_data" из меню, появляющегося при нажатии правой кнопки мыши на списке рядов данных.

Попробуем создать новый ряд данных типа XYdY. Это кривая XY с интервалами ошибок (error bars). Выбираем X, Y и Y1 (ошибки) из разных столбцов.

4. Создание рядов данных средствами Grace

Кроме чтения файлов данных, Grace позволяет использовать (для создания рядов данных) развитый язык сценариев с большим количеством встроенных математических функций. Эти функции включают как базовые сложение, умножение, квадратный корень и т.д., так и библиотеку функций высшей математики типа функций Бесселя и гамма-функции. Поэтому использование функций в Grace ничем не ограничено. Для прояснения деталей можно посмотреть руководство пользователя. Вдобавок, пользователи могут динамически добавлять в Grace библиотеки с любыми желаемыми функциями. Кроме того, данные могут добавляться в ряды данных вручную с помощью текстовых редакторов. Для начала, выберем Main:Edit/Data sets. Для создания ряда данных щелкнем правой кнопкой мыши где-нибудь в области списка рядов данных (который может быть и пустым) и выберем "Create new". Появится меню с 4 различными способами создания новых рядов данных. Далее последовательно рассмотрим эти способы.

4.1 По формуле

Если выбран этот способ, появляется окно "Load and evaluate".

  1. Первый шаг - установить параметры сетки, который определяют диапазон и количество значений переменной $t. Чаще всего $t просто будет абсциссой.
  2. Далее, выбираем тип ряда данных, который надо получить.
  3. В соответствии с синтаксисом командного языка, в выражениях в качестве X используется $t как независимая переменная. Функции могут быть достаточно сложными.
  4. Так же как выражение для Y, вводятся и любые другие формулы, которые могут понадобиться. Строки ввода после Y обозначаются Y1, Y2, Y3 и Y4. Например, если выбран тип ряда данных XYdXdY, Y1 будет соответствовать dx, а Y2 будет соответствовать dY и может понадобиться определить формулы для них.
  5. При нажатии "Apply" или "Accept" вычисления будут выполнены и создан новый ряд данных. Для того, чтобы увидеть его правильно, лучше использовать автомасштабирование по осям.

Ниже приведены некоторые примеры:

  1. Чтобы изобразить один период синуса, устанавливаем следующие значения: Start at: 0, Stop at: 2*pi, Length: 100, Y=sin($t) ($t - в качестве X)
  2. Параметрическая единичная окружность: Start at:0, Stop at: 2*pi, Length: 100, X=cos($t), Y=sin($t)

4.2 В электронной таблице

Если в системе установлена библиотека диалоговых элементов Xbae, при выборе этого варианта будет вызван редактор, похожий на электронную таблицу, который позволяет вводить точки рядов данных вручную. Числа вводятся в ячейки слева направо. Использование "Edit/Add row" возволяет вставить копию текущей строки после нее. Использование "Edit/Delete selected rows" дает возможность удалить выделенные строки (строка выделяется нажатием левой кнопкой мыши на номер строки). Этот метод хорошо подходит для анализа или изменения существующих данных, а атакже для создания небольших рядов данных. Данные добавляются/изменяются при нажатии на ENTER в ячейке или при переходе на другую ячейку.

4.3 В текстовом редакторе

Если в системе не установлена библиотека диалоговых элементов Xbae, или хочется использовать возможности любимого текстового редактора, редактор также может использоваться для ввода данных. Редактор устанавливается в переменной окружения GRACE_EDITOR. В процессе редактирования другие операции недоступны. Значения ряда данных будут добавлены/изменены после выхода из редактора.

4.4 Из блока данных

В этом случае новый ряд данных создается из считанного откуда-либо блока данных. См. раздел 3.

5. Пакетный режим построения графиков

Grace поддерживает большое число параметров командной строки, что позволяет пользователям управлять внешним видом и расположением графиков. Это очень полезно, если надо что-то быстро напечатать без вызова GUI. Использование сценариев для автоматического создания графиков или для получения графика с заданными установками может быть гораздо быстрее, чем щелканье по меню в GUI.

5.1 Печать без GUI

Вызов Grace командой "gracebat" из командной строки приведет к запуску Grace, созданию графика и выводу его на принтер (если не указан выходной файл), а затем к завершению работы Grace. В простейшем виде, для получения графика на основе файла a.agr, набираем

gracebat a.agr

Если gracebat в системе недоступен, то же самое делается с использованием параметра "hardcopy" команды "xmgrace". Считая, что выходное устройство - принтер PostScript, набираем

xmgrace -hdevice PostScript -hardcopy a.agr

5.2 Множественные графики

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

  1. Первый шаг в создании множественных графиков - указать Grace сколько графиков будет и как они расположены. Это выполнятеся командой интепретатора "arrange". Например, если нужно построить 4 графика, расположенных таблицей 2x2 , нужно указать -pexec "arrange ( 2, 2, .1, .1,.1,ON,ON,ON)" Точное значение всех параметров объясняется в руководстве пользователя.
  2. Затем указываются все глобальные параметры.
  3. Затем дял каждого графика указываются файл данных и другие параметры. Параметры нужно указывать в следующем порядке:
    1. "-graph g", где g-номер графика, начиная с 0. Это указание на применение параметров к данному графику.
    2. Параметры автомасштабирования. Автомасштабирование производится, когда считываются данные из файла, следовательно, оно должно быть указано до того, как данные будут прочитаны. Нужно помнить, что эта установка является постоянной (persistent).
    3. Тип ряда данных. Это тоже постоянная (persistent) установка.
    4. Тип графика и входной файл.
    5. Если читается блок данных, ряд данных должен создаваться с параметром "-bxy".
    6. Указывается общее масштабирование листа (world scaling). Важно, что это делается после формирования рядов данных (даже если автомасштабирование выключено), так как графики перемасшабируются после загрузки данных.
    7. Можно указать что-нибудь еще.

Пример

Рассмотрим пример. Пусть нужно построить 5 графиков, из которых первые 4 расположены вертикально друг под другом, а пятый - встроен внутри четвертого. Фалы данных a.dat, b.dat, c.dat и d.dat, а встроенный график - увеличенная часть d.dat. Предположим, что a.dat содержит несколько столбцов данных, b.dat - блок данных, из которого для построения кривой выбираются столбцы 2 и 4 с ошибками, определяемыми столбцом 3, c.dat должен быть представлен как столбиковая диаграмма, и во встроенном графике надо отобразить область от (0,0) до (1,1). Это может быть реализовано так:

gracebat -pexec "arrange (4,1,.1,.1,.1,ON,ON,ON)" -nxy a.dat -graph 1 -block b.dat -settype xydy -bxy 2:4:3 -graph 2 -settype bar c.dat -graph 3 -settype xy d.dat -graph 4 d.dat -world 0 0 1 1 -viewport .15 .3 .8 .88

Отметим, что графики нумеруются с 0 и 0 - значение по умолчанию, так что его не надо указывать для первого графика.


Прим. переводчика: файлы данных надо создать самостоятельно любыми доступными способами.

5.3 Вещи, для которых нет опций командной строки

Несомненно, можено попасть в ситуацию, когда хочется сделать что-либо, для чего не существует параметров (опций) в командной строке Grace (как это было сделано с командой "arrange"). В таком случае необходим язык файла параметров Grace. Параметр "-pexec" обрабатывает следующие аргументы, как будто они читаются из файла параметров или выполняются в командной строке. Если нужно сдулать что-то болле сложное, чем одна команда, можно использовать несколько вызовов "-pexec" или поместить команды в файл и запускать этот файл с параметром "-batch".

Пример "pexec"

Простейший способ прочитать данные из файлов foo.dat и bar.dat и умножить значения по Y файла foo.dat на 1000

xmgrace foo.dat bar.dat -pexec "s0.y = s0.y * 1000"

Пример пакетного файла

Чтобы сделать то же, что и в предыдущем примере, и вдобавок проименовать оси и изменить цвета линий, создаем файл с командами Grace с именем "bfile"


#Обязательный комментарий
s0.y = s0.y * 1000
s0 line color 3
s1 line color 4
title "A Gnasty Graph"
xaxis label "Time ( s )"
yaxis label "Gnats ( 1000's  )"
autoscale 

и затем вызываем xmgrace с параметрами

xmgrace foo.dat bar.dat -batch bfile

6. Подгонка кривых

В этом разделе разбираются некоторые возможности Grace по подгонке кривых. В Grace можно проволить два вида подгонки. Первый вид - регрессия или линейная подгонка, когдда оптимизация выполняется на основе линейного уравнения или уравнения, которое может быть сведено к линейному. Это работает для полиномов и схожих типов уравнений. Другой вид подгонки - нелинейная, в которой требуется указать желаемую функцию.

Построим кривую и посмотрим, как работает каждый вид подгонки. Для начала, построим кривую по функции y = sqrt(x) + exp(x)/3 -1 в диапазоне от 0 до 3 из 100 точек.

6.1 Линейная регрессия

Открываем диалог регрессии, выбрав Main:Data/Transformations/Regression.

  1. Выбираем только что созданный ряд данных
  2. Выбираем вид подгонки. В этом случае выбираем "Linear".
  3. В списке "Load" выбираем "Fitted values"
  4. Нажимаем "Accept" и видим результаты подгонки. Появляется окно (Console), в котором видны результаты вычислений параметров регрессии. Можно прокручивать окно для просмотра всех результатов.
  5. Можно посмотреть, какая степень полинома дает наиболее точное совпадение и попробовать другие типы функций. Заметим, что для не-полиномальной подгонки, A и B - параметры подгоночной функции.
  6. Однако, нет ограничений на вычисление подгоночной кривой только в точках исходной функции. Предположим, что эти данные - ежеквартальные продажи и хочется сделать прогноз на следующий квартал. Выбираем тип функции, который дает наилучшие результаты. Устанавливаем "Load: Function" вместо "Load: Fitted values". Теперь нижняя часть диалога тоже стала активной. При желании экстраполировать на следующий квартал, выбираем "Start load at:" 0, "Stop load at:" 4 и "#of points:" 100. Нажимаем "Accept" и видим результаты экстраполяции.

6.2 Нелинейная подгонка

Вызовем диалог Main:Data/Transformations/Non-linear curve fitting. Предыдущие рады данных, кроме оригинальной функции, следует уничтожить.

  1. Начнем с выбора ряда данных для подгонки, т.е. оригинальной функции.
  2. Далее, нужно написать желаемую функцию. Неизвестные коэффициенты обозначаются a0..a9. Начинать нужно с a0. В нашем случае, поскольку вид уравнения уже известен, попробуем: y = a0*sqrt(x) + a1*exp(x) + a2.
  3. Далее, нужно указать, что имеется три параметра для подгонки (a0, a1 и a2) и указать чувствительность решения.
  4. Нужно указать начальные значения параметров и границы их изменения при необходимости. В зависимости от функции, различные начальные условия могут приводить к существенно различным решениям.
  5. Процесс решения является итерактивным и нужно выбрать желаемое количество итераций. При каждой следующей итерации можно наблюдать за изменениями параметров кривой. В этом примере приемлемое решение достигается за 5 шагов. Более сложные функции с бОльшим количеством параметров могут потребовать от 20 до 100 или более шагов. При увеличении количества шагов вновь создаваемые кривые должны сходиться.
  6. Как и при линейной подгонке, можно наложить полученную кривую на точки исходной кривой в желаемом диапазоне, или показать ошибки в каждой точке. Для сравнения, наложим подгоночную кривую в интервале (3,4), выбрав "Load Options/Function" на вкладке "Advanced" этого диалога. Насколько похожий на правду результат получился в сравнении с предыдущей экстраполяцией?
  7. Подгонка некоторых кривых может быть сложным занятием. Очень важны начальные условия. Если хороший результат не получился сразу, нужно экспериментировать с различными величинами начальных параметров.
  8. Наконец, отметим, сто подгоночная кривая не добавляется на график, пока не нажата кнопка "Accept". Это дает возможность подобрать хорошее решение, не засоряя график ненужными линиями.

7. Преобразования

7.1 Графические преобразования

Простые геометрические преобразования

Можно вращать ряды данных вокруг указанной оси перпендикулярно плоскости графика (по оси Z). Это делается через Main:Data/Transformations/Geometric transforms....

Математические операции с рядами данных

С рядами данных можно выполнять математические операции. Однако во многих таких операциях требуется, чтобы оба ряда данных имели одинаковые абсциссы, то есть их значения по оси X должны совпадать. Это нужно, поскольку большинство операций выполняется поточечно (point by point). Например, перемножение двух рядов данных означает перемножение значений Y с получением новых значений Y. Этого не требуется только при фильтрации (Data filtering) и свертке (Linear convolution). К счастью, в Grace имеется возможность решения проблемы отличающихся абсцисс. Она называется "Интерполяция" и позволяет интерполировать значения одного рряда данных в области существования другого, создавая новую кривую.

Добавим косинус одного ряда данных к синусу другого ряда данных и создадим новую кривую. Этот пример выполним на рядах данных, имеющих разные диапазоны и разные точки выборки:

  1. Открываем 7.1.2.agr (в более новых версиях может быть 7.1.2.agr.gz)
  2. Посмотрев внимательно (в том числе во встроенном табличном редакторе), можно заметить, что абсциссы для этих рядов данных отличаются (количество точек, начальные значения, шаг по X). Начнем с использования интерполяции для создания третьего ряда данных, который представляет из себя второй ряд данных, вычисленный при значениях по X первого ряда данных. Вызовем диалог интерполяции Main:Data/Transformations/Interpolation/splines ...
  3. Выберем второй ряд (S1) как источник (Source), а ряд данных для результатов (Destination) не указываем. Он будет создан автоматически. Затем в списке "Method:" выбираем "Linear" и устанавливаем режим "Strict", а в списке "Sampling:" выбираем "Abscissas of another set" и из списка рядов данных ниже выбираем первый ряд данных (S0). После нажатия на "Apply" получим линию, в которой ряд S1 интерполирован в точках ряда S0. Заметим, что новая линия существует только в области X, общей для обоих рядов данных.
  4. Однако проблема остается, поскольку третий ряд (S2) существует в тех же точках по X, что и первый (S0), но в меньшей области X. Вычисления можно выполнять только в области, общей для рядов данных, так что нужно интерполировать ряд S0 в точках S2 и получить таким образом ряд S3. После этого ряды S2 и S3 имеют совершенно совпадающие абсциссы.
  5. Вызовем интерпретатор команд с помощью Main:Window/Commands ...
  6. Далее нужно создать ряд, в который будут записываться результаты, S4. Для этого можно или создать копию ряда S2 (используя Main:Edit/Set_operations...), что гарантирует его правильный размер, или можно использовать команду: s4 length s2.length
  7. Вычисления могут проводиться как с компонентами поX, так и с компонентами по Y. В данном случае нужно просто обеспечить те же самые значения по X. Конечный результат будет помещен в ряд S4, так что даем команду: s4.x = s2.x
  8. Теперь можно выполнить математические действия с интерполированными копиями рядов S0 и S1: s4.y = cos(s3.y) + sin(s2.y).
  9. А где же новый ряд? Он существует, но невидим. При помощи окна интерпретатора команд можно сдулать его видимым командой S4 on. При использовании GUI, нужно вызвать список рядов данных (например, Main:Edit/Data_sets или Main:Plot/Set_appearance), выбрать ряд S4 и сделать его видимым, выбрав "Show" из меню операций (правая кнопка мыши).

N.B. Если абсциссы исходных кривых совпадают, начинать надо с шага 5. Если выборки имеют одинаковое количество точек, можно пропустить шаг 4.

Выделение признаков

Выделение признаков (feature extraction) - это способ создания одной кривой из семейства кривых. При этом создается одна тоска данных на каждую кривую по результатам измерения параметроы кривой. Пусть, например, имеется семейство кривых, отображающих численность комаров как функцию времени. каждая кривая строится при некоторых условиях, например, с учетом численности антилоп в степи. При использовании выделения признаков (feature extraction), можно использовать это семейство кривых для создания новых зависимостей, таких как максимальная численность комаров в зависимости от количества антилоп или длительность максимальной численности комаров в зависимости от численности антилоп. Такой прием часто используется, когда надо анализировать более чем один график.

  1. Открываем файл 7.1.3.agr (7.1.3.agr.gz)
  2. Вызываем диалог выделения признаков (Main:Data/Feature_extraction).
  3. В списке графиков (Results to graph:) выбираем G1.
  4. В раскрывающемся списке "Feature:" выбираем признак для выделения, в данном случае "Y maximum".
  5. В раскрывающемся списке "X values from:" определяем, что будет координатой X для точек данных. Значение характеристики задает величины по Y. Значения по X могут определяются как номер исходного ряда данных. Также для определения абсциссы могут быть использованы величины по X или Y из выбранного ряда данных. В качестве значений по X могут использоваться даже элементы легенды. В нашем случае, элементы легенды обозначаются цифрами. В общем, выбираем "Index".
  6. Нажимаем "Accept", щелкаем по графику G1 и используем кнопки автомасштабирования, чтобы увидеть результат.
  7. Теперь можно выбрать другой признак, например, частоту (frequency), и получить значения по X из легенды. Проверьте, что при нажатии на "Accept" выделен график G0 как источник и G1 как цель.

7.2 Сужение областей (Restrictions)

Часто нужно исследовать только часть ряда данных или выполнить преобразования тоже только с частью ряда. Операция сужения областей позволяет определить область графика, в которой выполняются операции.

Определение областей

Существует несколько способов определения областей. Область может быть задана прямой линией (правее, левее, выше, ниже), многоугольником (внутри или снаружи), а также диапазонами значений (внутри или вне диапазона значений по X или по Y). Диалог определения области вызвается как Main:Edit/Regions/Define. Выбираем одну из областей (по номеру), которую надо определить, указываем тип области (Region type) и нажимаем кнопку "Define".

Region type по линии

Задаем концы линии щелчком левой кнопки мыши.

Region type по многоугольнику

Если выбран многоугольник, после нажатия на "Define" указываеми вершины многоугольника щелчками левой кнопкой мыши и завершаем определение правой кнопкой мыши.

Region type по диапазону

Выбираем две точки, задающие диапазон.

Использование областей

Области могут быть использованы только для ограничений при вычислении выражений. Вызовем диалог "evaluateExpression" (Main:Data/Transformations/Evaluate_expression). Укажем ряды данных для источника (source) и результатов (destination) и запишем формулу, которую нужно применить к интересующей нас области. Если формула не указана, это равносильно идентичности источника и результатов. Далее в списке "Restriction:" выберем область, в которой будет производиться преобразование. Если включен режим "Negated", то будет использовано дополнение к выбранной области (в смысле дополнения множеств).

После нажатия на "Apply" операция будет выполнена. Результирующий ряд данных будет создан на основе формулы, вычисленной только в точках, содержащихся в выбранной области. Таким образом, если никакой формулы на указано, в результате получится ряд данных, состоящий из точек, содержащихся в выбранной области. Соответственно, чтобы удалить все точки из области, оставляем поле для формулы пустым и включаем режим "Negate".

8. Использование каналов

Каналы - это способ получения выходных данных выполняющегося процесса без промежуточной стадии формирования файла данных. Вместо этого, работающая программа посылает данные на на один конец канала, а Grace читает их с другого канца канала.

8.1 Вместо файлов данных

В некоторых диалогах, например, Main:Data/Import/ASCII, может быть указан режим чтения данных из файла или из канала. Если выбран канал, будет запущена программа, указанная в строке "Selection" и ее стандартный вывод будет перенаправлен, как будто данные читаются из файла.

8.2 Именованные каналы

Именованный канал - это особый случай канала, описанного выше. В предыдущем случае после прекращения работы программы и заверешения чтения ее вывода канал уничтожается. Именованный канал - это статическая структура, которая позволяет многим процессам писать в него или читать из него. Назначение именованных каналов в Grace - запуск окна Grace и управление Grace путем посылки команд и данных через именованный канал. Это очень мощная технология и она позволяет сделать практически все, что можно сделать непосредственно в режиме GUI. Чтобы попробовать эту возможность, можно сделать следующее:

  1. Создать именованный канал (нужно найти команду, специфичную для конкретной операционной системы. Это может быть, например, mkfifo или mknod): mkfifo pvc. Если посмотреть список файлов в каталоге, можно увидеть, что появился файл pvc.
  2. Запустить Grace в фоновом режиме с указанием параметра именованного канала: xmgrace -npipe pvc&. Теперь Grace следит за любыми данными, которые посылаются в канал. Все происходит так, как будто данные посылаются через интерпретатор команд.
  3. В качестве простого теста, создадим с помощью канала простой график. В окне команд ("Main:Window/Commands") наберем: echo "read \"8.2.dat\"" > pvc. (Символы "backslash" нужны для экранирования кавычек, так что Grace получит команду :read "8.2.dat".) Таким образом, Grace получает указание считывать данные из файла. Если мы захотим использовать автомасштабирование, ничего не выйдет, поскольку точки формируются именованным каналом. В таком случае набираем echo autoscale > pvc, после чего набираем echo redraw > pvc. Теперь график будет автоматически масштабирован и перерисован. Завершаем работу Grace командой echo exit > pvc. Также нужно не забыть удалить pvc.
  4. Реальная мощь именованных каналов проявляется в управлении Grace другими программами. Управляющая программа может создавать именованный канал для записи, который воспринимается как обычный файл. Он может открываться функцией fopen() или любой другой функцией ввода/вывода. Затем команды и данные пишутся в файл, а дальше они интерпретирутся Grace.

9. Множественные графики

9.1 Выбор графика

Если на листе представлено несколько графиков, конкретный график выбирается щелчком мышью внутри рамки графика. Если рамки графиков перекрываются, щелчок будет циклически переключать выбор.

Работа с областями перекрывающихся графиков может вызывать затруднения. В таких случаях невозможно использовать двойной щелчок, поскольку каждый щелчок будет интерпретироваться как одиночный и приводить к изменению выбора графика. В таких ситуациях нужно отключать выбор графика по щелчку мыши. В диалоге Main:Edit/Preferences в списке Graph focus switch: нужно выбрать значение "As set". Это означает, что график для выбора можно указать однозначно. В списке графиков (например, Main:Edit/Overlay_graphs), выбираем график, с которым надо работать, и из меню, вызываемого правой кнопкой мыши, выбираем "Focus to".

Распределение графиков по листу

Распределить большое число графиков с одинаковыми интервалами между ними можно с помощью диалога Main:Edit/Arrange_graphs. При этом все размеры и интервалы будут вычислены автоматически:

  1. Если установить 3 строки и 3 столбца и нажать "Apply", то появится 9 графиков. Список "Order:" позволяет устанавливать порядок нумерации графиков. Начало линии в элементах списка "Order:" показывает, какой график имеет номер 0 и как изменяются номера по строкам и столбцам.
  2. Если необходимо соединить графики, например, горизонтально (чтобы не было промежутков по горизонтали), устанавливаем режим "Pack" рядом со счетчиком "Hgap/width" и нажимаем "Apply".
  3. Если вдруг оказывается, что нужно 6 графиков, а не 9, устанавливаем 2 строки и нажимаем "Apply". Однако остается небольшая проблема - графики 7, 8 и 9 остаются видимыми и "засоряют" лист. Эта особенность полезна, если не хочется случайно удалять графики. Однако лишние графики можно все-таки удалить, включив режим "Kill extra graphs". Теперь все графики, кроме специально выравниваемых, будут автоматически удаляться.
  4. Границы (поля листа) управляются счетчиками в группе "Page Offsets", а промежутки между графиками - счетчиками "Hgap/width" и "Vgap/heigth".
  5. Чтобы убрать этот диалог, нажимаем "Close".

Нужно отметить, что все вышеописанное касается только выбранных графиков. Так что, если нужно переразместить существующие графики, они должны быть выбраны, иначе будут созданы новые.

Размещение отдельных графиков

Размещение отдельных графиков может выполняться или (1) точно, указанием координат углов рамки (viewport coordinates) из диалога Main:Plot/Graph_appearance или с использованием ранее описанного диалога "Arrange graphs", или (2) приблизительно, двойным щелчком по маркерам выбранного (активного) графика и затем перетаскиванием этих маркеров.

9.2 Наложение графиков

Наложение одного графика на другой используется для графиков с двумя различающимисями осями X и/или Y. Пусть, например, один из графиков использует в качестве X номера месяцев года. На нем может быть две зависимости, одна из которых использует левую ось Y и показывает количество проданных антилоп, а другая использует правую ось Y и показывает количество комаров по логарифмической шкале. Аналогично, при отображении спектральных зависимостей, можно иметь одну ось X, в Hz и другую - в длинах волн. Рассмотрим гипотетический пример с антилопами.

  1. Используем Main:Edit/Overlay graphs для вызова диалога "Overlay graphs".
  2. Выберем номера графиков, которые нужно отобразить. В этом примере нужно наложить график G1 на график G0. Сейчас только график G0 является видимым. Мы не можем видеть график G1 и не можем его выбрать, поскольку он еще не существует. Чтобы его создать, нужно просто нажать правую кнопку мыши на списке графиков и выбрать "Create new".
  3. Способ наложения показывает, что общего есть у наложенных графиков. В нашем примере ось X является общей, а оси Y - разные, так сто в списке "Smart axis hints:" выбираем "Same X-axis scaling". Теперь в списке "Overlay graph:" (верхняя часть окна диалога) выбираем G1, а списке "Onto graph:" выбираем G0.
  4. Теперь можно называть оси и считывать данные. Есть одна вещь, которую нужно делать аккуратно при работе с такими наложенными графиками. Поселоку они перекрываются, щелчок левой кнопкой в рамке графика переключает активные графики циклически, и нельзя сказать, какой график выбран в данный момент. Соответственнго, если текущий активный график - G1, щелчок левой кнопкой сделает активным график G0.
  5. Делаем график G0 активным (см. п. 9.1), вызываем диалог "Axes" и назваем ось Y словом "Антилопы".
  6. Даелаем активным график G1 и назваем ось Y словом "Комары". Если надписи разместились правильно (Антилопы слева, Комары справа) - все в порядке. Если наоборот - можно поменять порядок наложения графиков. Если надписи наложились одна на другую, для оси "Комары" на вкладке "Axis label&bar" в списке "Side:" выбираем "Оpposite".
  7. Теперь даем подпись для оси X. Если активным является график G1, то при попытке это сделать все элементы ввода оказываются неавтивными, т.к. для двух графиков определена только одна ось X. Для того, чтобы задать параметры оси X активным должен быть G0.
  8. Теперь все готово для считывания данных. Опять нужно проверить, что активен именно тот график, куда нужно считывать данные и где создается ряд данных.

10. Связи

Связи - это способ обновления рядов данных без их удаления и перечитывания данных. Диалог настройки связей вызывается как Main:Data/Hot links.

10.1 Файл, содержащий одиночный ряд данных

Простейший случай связи - с файлом, содержащим только один ряд данных. Чтобы создать связь с одним рядом данных, сперва нужно указать ряд данных, который должен обновляться, а затем указать файл. Можно также установить связь с каналом, и в этом случае надо указать канал. Также можно указать команду, которая должна выполняться каждый раз при обновлении ряда данных. В общем случае это должна быть команда "autoscale", чтобы при каждом обновлении получался правильный размер. Можно также выполнять более чем одну команду. Возможно, например, иметь ряд данных, который является функцией двух рядов данных, и все должно пересчитываться, когда изменяются исходные данные. В таком случае команды записываются в файл и затем используется команда "READ BATCH".

Нажатие на кнопку "Link" создаст связь, и по нажатию кнопки "Update" ряд данных будет обновляться при обновлении исходного файла данных и будет также выполняться содержимое командного окна ("Window/Commands").

В качестве примера считаем файл 10.1.dat и создадим с ним связь (предварительно надо скопировать файлы 10.1.dat, 10a.dat, 10b.dat, 10c.dat и shiftdata.sh в домашний каталог). Теперь в командной строке запустим sh shiftdata.sh и обновим связь кнопкой "Update". Можно увидеть, что пик графика сдвинулся. Можно повторять эти два действия сколько угодно раз.

10.2 Несколько рядов данных в файле

Иногда файл данных может содержать несколько столбцов данных и нужно иметь возможность создать связь со всеми или только с некоторыми столбцами. Чтобы объяснить это программе, выбираем режим нескольких рядов данных (видимо, NXY) со столбцами XY в файле. Подразумевается формат "x y1 y2". Теперь устанавливаем связь с файлом данных. В списке связей можно имя файла будет дополнено доветочием и номером. Этот номер указывает на столбец файла данных, с которым установлена связь. Ненужные столбики можно выделить и сделать им "Unlink". При нажатии на "Update" все ряда данных на графике будут обновляться.

10.3 Обновление по горячим клавишам

Вместо использования постоянно открытого окна "Hot links", действия по одновлению можно делать комбинацией "ALT-u". Если оказалось, что "ALT-u" не действует, попробуйте дважды щелкнуть внутри графика, который нужно обновить и закройте появившееся окно. Такая процедура "сообщит" программе, что нужно обработать последующую комбинацию клавиш.


Прим. переводчика: не удалось заставить работать "ALT-u", хотя очень старался...