Страницы

26 нояб. 2012 г.

Знакомимся с Gnuplot

Gnuplot — это кроссплатформенная «unix-way» утилита для рисования графиков. Да, конечно, вы можете сделать графики в любимом теплом, уютном MS Excel или Open Office Calc, но что, если понадобится нарисовать нечто посерьезнее, быстро и не руками? Например, такое:

Gnuplot or not: когда это нужно?
  • Когда вы хотите автоматизировать процесс построения графиков, а не заниматься ручным набиванием чисел в таблицу Excel. Да, я сравниваю гнуплот с экселем. А где обычно строят графики?
    Любой график можно построить одной командой. Это запредельно быстро по сравнению с Excel.
  • Если приходится (предстоит в ближайшем будущем) строить графики много и часто.
  • Когда вашей программе нужно простое средство визуализации.
  • Когда встроенных в Excel возможностей не хватает. Там можно строить в полярных координатах? А в сферических? А делать анимацию?
  • Когда нужна картинка в векторном формате (.svg, .eps).
  • Если вы верстаете в LaTeX и заинтересованы в качественных, векторных графиках.
Это не нужно, если
  • Имеющиеся инструменты вас вполне устраивают. Вы — мастер матлаба или маткада, где рисоватор графиков является частью системы.
  • Графики приходится строить редко.
  • Вы не дружите с программированием, командной строкой, скриптами и даже не хотите знать, что это такое. А тогда что же вы делаете в моем блоге?

Гнуплот прекрасен! Можно даже заявить, что я постиг все прелести CLI именно во время освоения этой утилиты. Рекомендую бегло ознакомиться с ее возможностями на официальном сайте.

Гнуплот поддерживает тонну форматов файлов, как векторных, так и растровых. Разумеется, можно выводить результат сразу на экран.

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

Различия между Linux и Windows версиями

Их почти нет. Аналог линуксового терминала x11 называется win — вот, по сути, и все отличия. Однако, есть слабо заметные нюансы, из-за которых гнуплот в линуксе мне больше нравится. Например, анимация выглядит плавнее.

Начинаем строить

Команды можно вводить сразу в интерпретатор:

set terminal x11 plot x*x

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

set terminal png size 600,400 set output "sin_cos.png" plot [-pi:pi] sin(x), cos(x)

Только что я создал скрипт. Теперь откроем его в гнуплоте (это делается немного по-разному на Windows и Linux).

gnuplot sin_cos.plt

И вот результат:

Рекомендуемые расширения для скриптов: .plt, .gnu, .gpi, .gih. В текстовом редакторе Vim есть подсветка скриптов гнуплота, но она автоматически включается только для .gpi. Для неискушенных пользователей сойдет режим подсветки языка bash. Разумеется, без подсветки все тоже будет работать.

Если вы под линуксом, можете использовать sha-bang #!/usr/bin/gnuplot -persist. Опция -persist не дает окну с графиком закрыться по окончании работы скрипта.

С чего начать?

  1. Успокоиться и взять себя в руки.
  2. Самое сложное поначалу — не пытаться работать с этим как с MS Excel. У вас не получится построить график, просто потыкав мышкой.
  3. Рекомендую пройтись по всем разделам примеров, чтобы взять какой-нибудь за основу. К сожалению, там описаны не все фишки.
  4. В конце статьи я привел несколько хороших, проверенных ссылок. Когда сам что-то забываю, они меня выручают.
  5. Сперва нужно четко понять, что вы хотите изменить (хочу легенду слева, линии другим цветом, подписи к осям), затем найти команду, отвечающую за эти действия. Поменять можно почти всё. Я до сих пор нахожу что-то новое.
  6. Если ничего не помогает, тогда читать документацию. К сожалению, в официальном FAQ нет ни одной картинки. Поиск выручает.

О терминалах

Терминал в данном случае — это то место, где вы увидите график. Приведу наиболее часто используемые:

  • Оконные: x11 (или win, если Windows), wxt.
  • Векторные: svg, epscairo, dxf, latex, epslatex.
  • Растровые: pngcairo, gif, jpeg.
Терминал pngcairo предпочтительнее терминала png, поскольку поддерживает альфа-канал (полупрозрачность), от чего линии и шрифты выглядят мягче.

Еще один короткий пример

set terminal wxt plot '-' u 1:2 w linespoints lw 2 lt 3 ps 2 pt 4 title 'линия' 0 0.5 1 1 3 -1 4 -0.5 4 0.5 3 1 1 -1 0 -0.5 e

set terminal wxt — делаем вывод картинки на экран. Отрисовкой окна занимается wxWidgets, отрисовкой содержимого — библиотеки cairo и pango;

plot — построить двухмерный график;
'-' — координаты будут переданы ниже в этом файле;
u 1:2 — используя первый и второй столбец (u — это алиас для using, можно писать и так, и так);
w linespoints — в виде линий с точками (w — это алиас для with);
lw 2 — толщина линии (linewidth) 2 пикселя;
lt 3 — тип линии (linetype). В данном случае задает цвет. Явно задать цвет можно с помощью lc (linecolor);
ps 2 — размер точки (poinsize);
pt 4 — точка в виде квадратика (pointtype);
title 'линия' — подпись в легенде.

Дальше идут координаты в виде "x y". Пустая строка посередине сделает разрыв в линии.
e указывает на конец потока чисел. Можно написать end, это одно и то же.

Получается вот так:

Ссылки

Гнуплот распространен не так широко, как MS Excel, поэтому инструкций для чайников в интернете мало, и в основном на английском.

обновлено 06.06.2013

Комментариев нет:

Отправить комментарий