Gnuplot — это кроссплатформенная unix-way утилита для рисования графиков. Вы можете сделать графики в привычном MS Excel или LibreOffice Calc, но… Что вы будете делать, если понадобится нарисовать нечто более сложное, быстро и не руками? Например, такое:
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
, куда запишем магические заклинания:
Только что я создал скрипт. Теперь откроем его в гнуплоте (это делается немного по-разному на Windows и Linux).
$ gnuplot sin_cos.plt
И вот результат:
Рекомендуемые расширения для скриптов: .plt
, .gnu
, .gpi
, .gih
. В текстовом редакторе Vim есть подсветка скриптов гнуплота, но она автоматически включается только для .gpi
. Для неискушенных пользователей сойдет режим подсветки языка bash. Разумеется, без подсветки всё тоже будет работать.
В линуксе можно использовать sha-bang
#!/usr/bin/gnuplot -persist
. Опция-persist
не даёт окну с графиком закрыться по окончании работы скрипта.
С чего начать?
- Успокоиться и взять себя в руки.
- Самое сложное поначалу — не пытаться работать с этим как с MS Excel. У вас не получится построить график, просто потыкав мышкой.
- Рекомендую пройтись по всем разделам примеров, чтобы взять какой-нибудь за основу. К сожалению, там описаны не все фишки.
- Сперва нужно четко понять, что вы хотите изменить (хочу легенду слева, линии другим цветом, подписи к осям), затем найти команду, отвечающую за эти действия. Поменять можно почти всё. Я до сих пор нахожу что-то новое.
- В конце статьи я привел несколько хороших, проверенных ссылок. Когда сам что-то забываю, они меня выручают.
- Если ничего не помогает, тогда читать документацию. К сожалению, в официальном 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 tips (not so FAQ) — неплохое руководство, переведенное на русский. К сожалению, несколько устарело.
- Много записей по теме есть в записках дебианщика.
- Gnuplotting.org — красивые и сложные примеры.
- блог gnuplot-tricks — неочевидные приемы и эффекты.
- Краткое описание в журнале Linux Format.
- Поскольку на блогспоте сидит много линуксоидов, логично поискать именно там.