"Лёгкие" пакеты научной графики
Имеется множество свободно распространяемых пакетов для обработки и визуализации данных. На sourceforge.net в разделе «Scientific/Engineering» одних только проектов визуализации данных насчитывается более 2000.
Также довольно обширный список программ приведён на nixp.ru, однако в этом списке не различаются свободные и несвободные (бесплатные, демонстрационные) пакеты.
Понятно, что такие мощные и известные пакеты как PAW++, Root, Scilab, Maxima, OpenDX нерационально использовать для простых задач типа построения графиков по имеющимся данным, особенно если этих данных не так уж много. Поэтому предметом рассмотрения будут достаточно специализированные и простые в использовании пакеты, ориентированные именно на построение различных видов графиков по известным точкам или по формулам.
Ещё одна часто встречающаяся в лабораторных работах и исследованиях задача — оцифровка графиков и диаграмм, полученных на бумажном носителе. Для этих целей могут использоваться пакеты g3data, imview или nip2, причём наиболее соответствующим задаче оказался пакет g3data.
Оцифровка графиков
Требуется, если экспериментальный график получен с самописца или из какой-то статьи (например, из журнала), а потом отсканирован (т.е. какая-то кривая существует в виде картинки).
Вот тестовый рисунок, взятый из книжки по экономическому анализу:
Хочется, например, определить, описывается ли данная кривая каким-то простым уравнением. Работа с данными, взятыми из этой кривой, будет тестовым примером для пакетов двумерной графики.
g3data
Позволяет установить максимальное и минимальное значение по осям X и Y, соответственно выполняется масштабирование по указанным шкалам значений. Оси могут быть настроены на логарифмический масштаб. Для точного позиционирования курсора есть окно с увеличенным предпросмотром, так что можно точно попадать в пикселы на отсканированной кривой. Количество снимаемых точек не ограничено.
Ниже показана g3data в работе:
Результат - пары значений XY, в указанным ранее масштабе (что приятно), а также (по желанию) ошибки измерений. Полученные значения можно вывести на STDOUT или записать в текстовый файл. В последнем случае разделитель - пробел.
Полученный текстовый файл (десятичные разделителя - запятые) без проблем открывается чем угодно для построения "парадного" графика, обработки и пр.
Пакет есть в репозиториях Debian, Fedora7 и ALTLinux. Графическая библиотека - GTK2.
imview
Хотя основное назначение этого пакета - просмотр и преобразование изображений, он может использоваться для извлечения числовых данных из графического файла. Однако решение этой задачи неочевидно - через пункт главного меню "Transform/Pointfile" нужно создать новый файл данных (Pointfile), после чего включить режим добавления точек (Add point mode) и начать выбирать точки. В процессе выбора показываются координаты X и Y (в реальных пикселах!), а также цвет выбираемой точки, что позволяет не промахнуться мимо линии графика. Также возможно масштабирование (Zoom) для более точного позиционирования курсора.
После завершения выбора всех точек дается команда сохранения (Save current pointfile) и в результате получается текстовый файл c разделителями-пробелами. Однако в нем первым столбцом идет Y, а вторым - X (а третьим - цвет точки). Кроме того, значения Y отсчитываются от верхнего края изображения. В результате перед воспроизведением графика требуется ряд манипуляций по преобразованию данных.
Пакет есть в репозитории Debian. Графическая библиотека похожа на GTK+.
nip2
В этом пакете имеется принципиальная возможность преобразования изображения в матрицу чисел (Toolkits/Matrix/Image to Matrix), после чего по этой матрице может быть построен точечный график (Toolkits/Matrix/Plot Scatter). Однако ни разу не удалось эту операцию благополучно выполнить (возникает ошибка переполнения данных).
Таким образом, эту программу нельзя рассматривать как эффективный инструмент для оцифровки графиков типа представленного выше.
Пакет есть в репозитории Debian. Графическая библиотека - GTK2.
2D-графика
Пакет можно рассматривать как инструмент научной графики, если он позволяет на одном графике отображать независимые серии данных, а также использовать разные системы координат (например, линейную и логарифмическую) одновременно и строить несколько вариантов регрессии.
Gnumeric
Хотя Gnumeric считается офисной электронной таблицей, она может отображать независимые серии данных (для XY-диаграмм).
К другим положительным качествам пакета можно отнести следующие:
- Возможность получения нескольких линий (и уравнений) регрессии по одному и тому же набору исходных данных;
- Возможность определения размеров графика в точках экрана и прямой экспорт графика в растровый формат (TIFF, PNG).
Вот пример двух вариантов регрессии по оцифрованной ранее кривой (исходные данные - точки, регрессии - линии, цвет линии соответствует цвету уравнения).
Пакет является кросс-платформенным (есть в дистрибутивах Linux и существуют сборки для Windows), графический интерфейс - GTK2.
Grace (xmgrace)
Несколько архаичный пакет, основанный на Motif (Open Motif), однако имеет великолепные возможности по работе с двумерными графиками. Большой недостаток - не поддерживает UTF-8.
Особенностью импорта данных является использования в качестве десятичного разделителя точки, а не запятой, поэтому в файлах данных требуется делать соответствующую коррекцию.
Ниже показаны результаты обработки тестового примера:
Исходные данные - точки, показаны уравнения регрессии для кривых соответствующих цветов.
Экспорт графиков производится через настройку виртуального принтера, возможен экспорт в PS (EPS), TIFF, JPEG, PNG и SVG. При экспорте в растровые форматы есть возможность устанавливать разрешение для выходного файла.
Имеется специальный режим работы в командной строке, причем источником данных может быть канал (pipe) и графики могут перестраиваться автоматически.
Пакет есть в дистрибутивах Debian, ALT Linux, SuSe (и наверное в других тоже).
3D-графика
Возможности визуализации данных есть в таких научных и математических пакетах, как PAW++, Root, Scilab, Maxima, в пакете OpenDX и во многих других (наверное). Однако, если возникает задача просто построить 3D-диаграмму по имеющимся данным, то проще использовать описанные ниже пакеты.
qtiplot
Лицензия GPL, однако для скачивания требуется регистрация. Весь написан на Python, графическая библиотека - Qt. Кросс-платформенный пакет. Поддерживает скрипты опять-таки на Python'e.
Результаты работы с тестовыми данными:
Точками обозначены исходные данные, красная и синяя линии - результаты приближения. К сожалению, уравнение не выводится в легенде и не получилось изменить позицию легенды. Однако вся информация о приближении появляется в дополнительном окне.
В качестве теста по построению 3D-графика была сделана таблица 21x21 для значений функции z = sin2(x)-cos2(y) в интервале по одной координате от 0 до 3, по другой - от -1,5 до 1,5.
Qtiplot позволяет строить трёхмерные графики по матрице значений, причём координатой X считаются столбцы, а Y - строки. Можно установить масштаб по осям путём установки значений для первой и последней строки (столбца), но десятичные дроби использовать нельзя. С учатом масштабного коэффициента получился следующий результат:
График может быть импортирован в различные растровые форматы. К недостаткам можно отнести некорректное отображение кириллицы в заголовках окон (окна по умолчанию имеют заголовки типа ???????1), а также отсутствие прорисовки чисел в легенде 3D-графика.
Достоинством является достаточно внятная, хотя и лаконичная документация (пока что не на русском языке). Еще одна интересная особенность - автоматическое вращение 3D-графика по всем осям.
Входит в дистрибутив ALT Linux. В Debian'e отсутствует.
Labplot
Позволяет импортировать текстовые файлы с данными (CSV), и строить двумерные и трехмерные графики. Также позволяет строить графики функций по формулам. Среди операций с графиками - сглаживание по нескольким точкам (количество задается), полиномиальная регрессия, численные дифференцирование и интегрирование, а также наложение шума и фильтрация сигнала.
Вот результат регрессии для тестовых данных (регрессия делается только полиномиальная):
Поразительно, но коэффициенты в точности совпадают с полученными в Gnumeric .
Экспорт картинки возможен в стандартные форматы (TIFF и JPEG2000), а также во многие другие растровые форматы. Также можно экспортировать график в PS (EPS), PDF и SVG.
Кириллица в UTF-8 поддерживается без проблем, все элементы графика (оси, линии, заголовки) достаточно просто настраиваются по щелчку мышью, графики получаются хорошего качества.
Теперь посмотрим, как Labplot строит трехмерные графики. В меню можно увидеть два варианта графиков - 3D Plot и 3D QWT Plot, каждый из которых может быть построен по матрице значений и по точкам XYZ. При построении по матрице нет возможности определить векторы X и Y, поэтому в качестве значений по осям берутся номера строк и столбцов. При построении графика XYZ должно быть три столбца, т.е. вся сетка значений должна быть "настрижена" на полосы при одинаковых Y и затем все полосы нужно "склеить" по вертикали. Разница во внешнем виде простого 3D-графика и 3D QWT иллюстрируется ниже (для табулированной функции z = sin2(x)-cos2(y) ).
Это просто 3D-график.
А это 3D QWT - график.
Имеющаяся документация (не на русском языке) не дала никаких сведений о построении трёхмерного графика по таблицам данных, поэтому её можно считать мало полезной.
Пакет входит в дистрибутив Debian.
Выводы
Пакеты imview и nip2 очевидно бесполезны для рассматриваемых задач. Очевидно полезен g3data.
Что же касается собственно пакетов визуализации, трудно сделать однозначные выводы. Видимо, нужны все: Gnumeric очень проста в освоении ибо электронная таблица, Grace - очень гибкая и с большими возможностями, хотя интерфейс архаичен, а Labplot и Qtiplot в чем-то даже дополняют друг друга.