В этом разделе мы упомянем некоторые средства построения графиков и карт. Именно графиков и карт, то есть графическое отображение данных - просто вопрос рисования мы не рассматриваем. Рассмотрим следующие системы.
GrADS (Grid Analysis and Display System) - система рисования карт, в основном, а вообще - данных на сетках. Понимает много форматов, в том числе netCDF и сырые данные в виде массивов, записанных в файл. Знает много проекций, умеет рисовать линии уровня, линии тока и множество других типов графиков. Знает очертания морей, в результате чего данные на сетке, будучи нарисованы, окаймлены береговой линией. Представляет собой командный интерпретатор с командной строкой в той консоли, откуда вызван, и с отдельным графическим окном, позволяющим любоваться картинкой. Ее потом можно сохранить в EPS или растровом формате. Возможностей очень много, но я их, честно, знаю плохо. Что мне надо - могу нарисовать, более или менее, в остальном несложно разобраться. Хотя, конечно, правило "а ты знаешь, какие возможности тебе доступны" во весь рост стоит и здесь. Качество графики - не чрезмерное, контуры морей грубоваты, попыток вписать сетку в контур не предпринимается - не без недостатоков. Небольшое введение и ссылки - прилагаются.
ODV (Ocean Data View) - новая система анализа и рисования данных по океану и вообще геофизических. Осваиваю, буду делиться опытом по ходу дела. Пока только ссылки. У кого есть качественное введение - поделитесь, не сочтите за труд.
GNUPlot - раз он уже у вас есть, надо о нем немного знать.
Octave - бесплатный аналог Matlab. По интерфейсу - рядом не стоял; по базовым возможностям - примерно то же; пакетов - масса, но у Матлаба, наверное, побольше (но за денежку); по количественным возможностям - уступает (был случай, когда Матлаб 4Мб базу прожевал и переварил, а Октэйв загнулся, причем нехорошо - жалуется на что-то, всесто того, чтобы признать - нимагу... урезанную съел, так что дело в количестве); по языку - совместим, что приятно; пакеты не совместимы, что понятно. Для тех кто не в курсе: это системы численной математики, со своим языком и множеством графических функций. Есть еще средства для создания моделей, чтения данных извне, да мало ли еще чего. Язык векторный, вполне достойный, более интерпретируемый, чем Фортран, что и достоинство, и недостаток. Переменная по определению - массив двойной точности, возможно, комплексный. Разницы между скаляром и массивом нет, размерность и конфигурация меняются на лету. Отличительная черта - операции "с точкой": символ операции означает матричную операцию, а поэлементная операция - это знак с точкой. Так, A * B - это умножение матриц, а A .* B - поэлементное умножение. Для скаляров, понятно, разницы нет. A \ B и B / A - решение систем линейных уравнений Ax=B. Читайте доку. A^B - матричная степень; рад за Вас, если она Вам реально нужна. Особо важна графическая система - "что хочешь" нарисовать можно. К PDL графику подключать надо, к Фортрану тоже (но нужды нет). Графика Octave основана на GNUPlot.
Scilab - еще один бесплатный аналог Matlab. Язык немного, но отличается. Но несущественно. Основное отличие - в Matlab (и Octave) каждая функция лежит в одноименном m-файле (во всяком случае, так задумано), и подгружается при вызове; в Scilab удобнее все функции писать в одном файле и загружать его специальной командой. Из файла AUTOLOAD не производится. Пакетов вроде меньше, чем у Octave. Графика основана на чем-то своем, в результате плохо работает на платах NVIDIA. Нужны какие-то драйвера... Попробовали побороть, сразу не вышло, перешли на Octave. Имена функций тоже отличаются, хотя не все - но Octave ближе к Matlab.
gplot - интерфейс к GNUPlot на Perl; скачать можно здесь и еще тут. Вот что пишет автор (я перевожу): "Иногда простейшие вещи на удивление сложно сделать. Иенно такой была моя реакция, когда я впервые попытался построить несколько простых графиков. Я знал про gnuplot, но на первый полезный график ушло слишком много времени. Наверное, самой печальной попыткой было сделать такую простую (для меня) вещь, как 'изобрази эти данные голубой линией' или шокирующе сложное 'изобрази эти данные голубой линией с треугольниками в точках'. Я нашел ответ на этот вопрос: set style line 10 lt 3 lw 1 pt 8 ps 0.55 plot 'my.data' with linespoints linestyle 10
Хорошо, но с меня хватит! Не хочу выяснять, 'lt 3' или 'lt 5' и 'pt 3' или 'pt 22'! Мне нужна простая команда, понятная, и делающая то, что мне надо:
gplot.pl -color red -point triangle my.data
Конечно, gplot.pl не может справиться с пятью или десятью миллионами тонкостей, с которыми справляется gnuplot -- но мне все равно. Все, что мне нужно - это способ нарисовать простые данные в столбцах и получить картинку или Postscript-файл, и я не хочу тратить на это слишком много времени. Если Вам тоже нужно это - gplot.pl подойдет и Вам тоже." Тут я выкладываю перевод руководства; обратите внимание, что это авторская POD-документация, внедренная в тело файла с программой на Perl. Ее можно вытащить и конверитровать в ТеХ, в roff (man), в html и другие форматы. А я ее перевел.
PGFPlots - пакет LaTeX для рисования; исключительно мощный, и способен, кроме вставик рисунков в tex-документ, создавать отдельные графические файлы.
PSPlot - моя собственная поделка для рисования по массивам (PDL) в формате EPS. В PDL не входит графическая библиотека, но можно поставить одну из нескольких известных и хорошо себя зарекомендовавших - к ним есть PDL-интерфейс. Влекомый желанием не усложнять без необходимости, я решил сделать свою маленькую библиотеку в отпуске - все одно Perl манит и влечет, и что-то надо делать. Да и сделать самому иногда проще, чем вникать в чужое. Да и свое - оно и есть свое, точно знаешь, что и как можно сделать, а чего сделать нельзя, и не пробуй. Пока что можно рисовать графики на плоскости кривыми в стиле Matlab - отмечать маркерами заданного стиля точки с координатами в одномерных piddles $x и $y и соединять их прямыми линиями заданного стиля. Стиль включает в себя толщину, цвет, пунктирность и т.п. Маркеры обычные, плюс есть фирменный маркер магендавид. Ам Исраэль хай! Ну и оси: сетка, стрелочки, риски, подписи. Подписи допускают некий уродливый упрощенный TeX - греческие буквы, некоторые символы, кое-какие акценты, курсив для формул, индексы (верхний и нижний). Радикала пока нет. Есть возможность создать и нарисовать оси типа meter - красные и отражающие реальные оси постскрипта - чтобы осознанно ставить объекты в нужные места. Суть в том, чтобы получить скаляр с текстом на Постскрипте - его можно записать в EPS файл и он откроется в любом просмотрщике. Проект будет потихоньку развиваться. Хочу добавить возможность брать данные из файлов и рисовать линии уровня и векторные поля.
PostScript - язык программирования графики. Ясное дело, необходимости знать его никакой. Но бывает полезно: сколько раз меня выручало знакомство с языком, когда надо было быстро увеличить шрифт подписей к осям, поставить номера над каждой кривой, убрать лишнюю подпись или исправить опечатку. А еще на Постскрипте бывает удобно запрограммировать некоторые картинки - быстрее, чем вырисовывать. Знание Постсрипта также полезно, когда есть программка типа PSPlot - если что-то не устраивает, можно оперативно подправить.
Собственно, это язык программирования - ps- или EPS-файл - это просто программа. Язык постфиксный, то есть операции после операндов, типа 2 3 add. Язык стековый, нет присваиваний и т.п. - все делается через стек. В стек можно положить число, массив, строку. И куча команд для графики, работы с осями и т.п. Еще есть словари, то есть пары ключ-значение, которые заменяют переменные и все такое. Можно определять процедуры и на их базе - циклы, условия, рекурсия. Язык полный, так что в принципе можно на нем что хочешь вычислять. Вроде бы даже тех на постскрипте существует. Недостаток - Postscript не развивается. Например, поддержки Юникода там нет. Либо рисуй руками, либо как-то выкручивайся. Знак частного дифференциала (кривое d) я сказать как рисовал? выводил цифру 6, предварительно отзеркалив ось абсцисс. Вообще Постскрипт ориентирован на удобство программы, а не программиста - поэтому там много команд, но удобства никто не обещал, это не Перл. Но как уже сказано - не в том счастье. Нарисовать какой-нибудь фрактал удобно, можно и потерпеть, а исправить что-нибудь так вообще удобств не надо. Все зависит еще от генератора, который EPS нарисовал. В некоторых разобраться нелегко. Существует пакет для LaTeX, называется PSTricks - реализует много их Постскрипта командами Латеха - и можно рисовать прямо в документе.
Исчерпывающе тема раскрыта здесь, человек отлично владеет Постскриптом и делится с нами - респект ему и уважуха!