LaurVas

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

   gnuplot

Gnuplot — это кроссплатформенная unix-way утилита для рисования графиков. Вы можете сделать графики в привычном MS Excel или LibreOffice Calc, но… Что вы будете делать, если понадобится нарисовать нечто более сложное, быстро и не руками? Например, такое:

Пример сложного графика в Gnuplot

Gnuplot or not: когда это нужно?

  • Когда вы хотите автоматизировать процесс построения графиков, а не заниматься ручным набиванием чисел в таблицу Excel.
  • Если приходится (предстоит в ближайшем будущем) строить графики много и часто.
  • Когда вашей программе нужно простое средство визуализации.
  • Когда встроенных в Excel возможностей не хватает. Там можно строить в полярных координатах? А в сферических? А делать анимацию?
  • Когда нужна картинка в векторном формате (.svg, .eps).
  • Если вы верстаете в LaTeX и заинтересованы в качественных, векторных графиках.

Гнуплот не нужен, если

  • Имеющиеся инструменты вас вполне устраивают. Вы — гуру Matlab, Mathcad или Wolfram Mathematica.
  • Графики приходится строить редко.
  • Вы не дружите с программированием, командной строкой, скриптами и даже не хотите знать, что это такое.

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

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

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

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

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

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

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

set terminal x11
plot x*x

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

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, поэтому инструкций для чайников в интернете мало, и в основном на английском.

   gnuplot

Что я знаю о языке Пролог

comments powered by Disqus