- Использование gnuplot в ОС Windows
- LaurVas
- Что мы тут установили?
- Что нужно сделать после установки?
- Хак для C/C++ программистов
- LaurVas
- Gnuplot or not: когда это нужно?
- Гнуплот не нужен, если
- Различия между Linux и Windows версиями
- Начинаем строить
- С чего начать?
- О терминалах
- Ещё один короткий пример
- Ссылки
- Gnuplot 5.2
- Построение двумерных графиков
- Построение объемных графиков
- Сохранение готовых документов
- Достоинства
- Недостатки
- gnuplot шаг за шагом
- Комментарии ( 44 )
Использование gnuplot в ОС Windows
Если gnuplot не установлен, то сначала его нужно загрузить через Интернет и установить:
- На странице версий gnuplot выберите последнюю версию, перейдя по ссылке в соответствующую папку и загрузите файл с расширением exe. На момент написания статьи последние версии соответствовали файлам gp503-win32-mingw.exe для 32-разрядной версии системы и gp503-win64-mingw.exe для 64-разрядной версии Windows.
- Запустите скаченный файл и следуйте инструкциям мастера установки.
Для запуска gnuplot перейдите по кнопке Пуск в папку gnuplot и запустите wgnuplot. Если ваши скрипты используют данные из внешних файлов, то необходимо указать папку, где эти расположенны эти файлы и сами скрипты. Для этого нажмите на кнопку ChDir в панели инструментов и выберите рабочий каталог с файлами с данными.
Последующая работа в gnuplot проходит в режиме интерпретации вводимых команд вводимых с клавиатуры или через меню. Например, для построения графика функции, заданной в виде файла данных data, вводим
Гораздо удобнее собрать все необходимые для построения графика команды в отдельный файл, например, plot.plt. В этом файле необходимо указать следующие строки:
- Тип терминала для обработки графики, например, для создания графиков в формате PostScript используется команда
Дополнительные команды, задающие стиль оформления указываются после определения типа терминала, но до команды построения графика. Например, добавим подписи для осей, и укажем диапазон значений по оси Ox:
В файл скрипта, помимо указанных команд, можно включать все поддерживаемые gnuplot комманды (соответствующие выбраному терминалу).
Все команды сохраняются в отдельный текстовый файл plot.plt соответственно используемой кодировки. Если используются русские символы, то скрипт должен использовать кодировку KOI8-R.
В консоли загрузить и запустить скрипт можно командой
После выполнения скрипта в рабочей папке появится файл plot.eps, содержащий график.
Формат получаемого графического файла зависит от типа используемого терминала. В приведенных выше примерах использовался формат PostScript, удобный для вставки графиков в LaTeX. Для публикации графики в сети Интернет, удобно использовать формат PNG. В этом случае, команда определения терминала (с размером изображения) и имени файла задаются в следующем виде
LaurVas
Если под линуксом гнуплот работает без нареканий и сюрпризов, то под Windows могут возникнуть странности. Далее я поведаю обо всех найденных особенностях Windows-версии этой утилиты. Их не много, так что пост получился коротким.
Что мы тут установили?
В папке binary присутствуют несколько исполнимых файлов: gnuplot.exe , wgnuplot.exe , pgnuplot.exe . Первый предназначен для работы из консоли Windows:
Второй — эмулятор консоли в более привлекательном виде — по сути то же самое, но не отпугивает чернотой:
Третий нужен для работы с каналами (pipeline).
Для “ручной работы” рекомендуется использовать wgnuplot. Там есть кнопочки и работает drag&drop.
В папке demo лежат скрипты примеров. Запустите wgnuplot.exe и откройте любой файл с расширением .dem . Кстати, где эти же скрипты находятся в линуксовой версии, я не знаю.
Разумеется, не стоит забывать про папку docs . Хотя мой внутрениий голос подсказывает, что вы туда не полезете.
Что нужно сделать после установки?
Можете почитать README-Windows.txt . Я советую назначить wgnuplot программой по умолчанию для файлов с расширением .gp , .gpl , .plt или другим, как больше нравится (я использую .plot ). Двойной клик по такому файлу запустит построение графика. Если картинка появляется и тут же гаснет, добавьте в конец скрипта паузу: pause -1; . Должен быть способ получше, но мне лень экспериментировать. Я пересел на линукс, там все хорошо.
Хак для C/C++ программистов
Если вы не собираетесь запускать гнуплот из C-программ, то дальше можно не читать.
Мы будем использовать старые добрые каналы (pipes) — один из инструментов ОС Unix. Windows их поддерживает, но, боюсь, никто ими не пользуется. А жаль, ибо штука удобная.
Функция popen() волшебным образом запускает гнуплот и теперь мы печатаем в него, как в обычный файл. Попробуйте скомпилировать эту программу. Возможно придётся заменить функцию popen() на _popen() , зависит от компилятора. Несмотря на правильный код, нас ждёт облом — Windows попросту не знает, где находится pgnuplot.exe , когда мы просим его открыть. Чтобы получить возможность запуска гнуплота через канал, я нашел три способа:
Поселить exe-шник разрабатываемой программы вместе с содержимым папки binary в одну папку. Этот вариант выглядит наиболее убого (мало кому понравится таскать 20–30 лишних файлов вместо двух-трех), но зато всё будет работать на машинах, где гнуплот не установлен (получаем такую portable-версию).
Прописать полный путь к гнуплоту, не забывая, что обратный слеш экранируется. Например команда FILE *gpipe = popen(«gplt\\pgnuplot -persist»,»w»); заставляет ОС искать гнуплот в папке gplt в папке с проектом. Получаем ту же portable-версию, но без помойки. Не сложно догадаться как работает строка FILE *gpipe = popen(«C:\\Program\ files\\gnuplot\\binary\\pgnuplot -persist»,»w»);
Самый правильный способ — добавить директорию гнуплота в переменную PATH . Вот как это сделать. Сразу может не заработать, перезагружаемся.
Остаётся один неприятный косяк — размер окна определяется автоматически (видимо в процентах от разрешения экрана) и задать в коде его нельзя. Т. е. если вы хотите получить окно квадратной формы, придется каждый раз изменять его размер вручную. В линуксе можно задать размер окна, а в винде нет.
LaurVas
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 — вот, по сути, и все отличия. Однако, есть слабо заметные нюансы, из-за которых гнуплот в линуксе мне больше нравится. Например, анимация выглядит плавнее.
Начинаем строить
Команды можно вводить сразу в интерпретатор:
А можно сохранить их в файл, чтобы автоматизировать процесс. Продемонстрирую на примере. Создадим файл с именем sin_cos.plt , куда запишем магические заклинания:
Только что я создал скрипт. Теперь откроем его в гнуплоте (это делается немного по-разному на Windows и Linux).
И вот результат:
Рекомендуемые расширения для скриптов: .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 — делаем вывод картинки на экран. Отрисовкой окна занимается 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 5.2
Весьма целесообразным при построении графиков различных математических функций будет обратиться за помощью к специализированным программным средствам. Это сможет обеспечить достаточную точность и облегчит выполнение данной задачи. Среди подобных программ выделяется Gnuplot.
Построение двумерных графиков
Все действия в Gnuplot выполняются в командной строке. Не является исключением и построение графиков математических функций на плоскости. Стоит отметить, что в программе возможно одновременное построение нескольких линий на одном графике.
Готовый график после этого отобразится в отдельном окне.
В Gnuplot присутствует довольно большой набор встроенных функций, которые все находятся в отдельном меню.
Также в программе имеется возможность настройки параметров графика и выбора одного из альтернативных способов введения математических функций, таких как параметрический вид или через полярные координаты.
Построение объемных графиков
Так же, как и в случае с двумерными графиками, создание объемных изображений функций выполняется при помощи командной строки.
Построенный график также будет отображаться в отдельном окне.
Сохранение готовых документов
Для вывода готовых графиков из программы присутствует несколько возможностей:
- Добавление графика в виде изображения в буфер обмена для последующего перемещения в какой-либо другой документ;
- Создание бумажной версии документа путем вывода изображения на печать;
- Сохранение построенного графика в файле с форматом .emf.
Достоинства
- Бесплатная модель распространения.
Недостатки
- Необходимость наличия базовых навыков программирования;
- Отсутствие перевода на русский язык.
Gnuplot может стать вполне качественным инструментом для создания графиков математических функций в руках человека, обладающего некоторыми навыками программирования. В целом же, существует огромное количество более простых в использовании программ, которые могут стать лучшей альтернативой Gnuplot.
gnuplot шаг за шагом
Первый шаг
Итак. У нас есть данные, полученные в результате эксперимента. Скажем, вот такого вида:
Построить график? Что может быть проще! (При условии, что у нас есть gnuplot, установленный под Linux или Cygwin)
Данные сохраним в файл data1.txt и запустим gnuplot:
В файле data_1.0.jpg нас ждёт построенный график.
По умолчанию, gnuplot будет выводить график в окно x11 терминала. Эта команда заставит выводить картинку в формате jpeg.
Эта команда указывает в какой файл выводить.
Собственно, строим график.
Выход из gnuplot
Всё просто, но не очень удобно.
Создаём комфортную среду
Согласитесь, не очень удобно каждый раз вводить однотипные команды.
gnuplot, как и любая уважающая себя GNU утилита, умеет читать сценарий своей работы.
Создаём текстовый файл и записываем туда все команды, которые нужно выполнить.
Имя этого файла передаём gnuplot как аргумент. Это самый простой работающий способ.
Для меня это не самый удобный путь. Обычно, перед тем как нарисовать график, например, преобразую данные с помощью скрипта на perl.
Есть простой способ вызова gnuplot из shell скрипта:
Результат работы этого скрипта такой же, как и в первом случае.
Вид графика
У нас крестики обозначают точки на графике. Нормальные люди рисуют линии 🙂
А мы чем хуже?
Разница только в этой строчке:
Кроме линий существует ещё целая туча способов рисования. Гляньте ссылки в конце.
Результат будет таким:
Данные бывают разные
А что, если данные, которые нужно отобразить, устроены чуть сложнее?
Нет проблем! Например, у нас нет повторяющихся данных, зато есть время измерения:
(Первая колонка — время в секундах, вторая — напряжение)
Строим график таким скриптом:
Результат будет такой же, как и в предыдущем случае 🙂
Эта строчка в файле данных воспринимается как комментарий.
datafile — это имя переменной, и мы присвоили ей значение data2.txt.
а здесь мы эту переменную использовали.
Много графиков
Два — это уже много 🙂
Хотим мы посмотреть ток и напряжение на одной временной шкале. Нет проблем!
Пусть данные будут такими:
Построим график таким скриптом:
И получим такой результат:
gnuplot воспринимает это как одну строку. Первая часть использует умолчания и интерпретируется как:
Вторая часть рисует второй график, используя ось X и вторую (правую) шкалу Y, беря данные из 1-й(время, x) и 3-й(ток, y2) колонок файла данных.
Рюшечки
Немного улучшим вид конечного продукта:
И получим такой график:
Сделаем шрифт чуть поменьше.
Нарисуем координатную сетку.
Надпишем, что обозначают оси X и левая Y.
Оформим правую ось Y.
Напишем нормальную «легенду».
Что дальше?(ссылки)
- Куча примеров с домашней странички gnuplot
- Отличный сайт с разнообразными примерами
Вообще, gnuplot штука очень мощная. Может хоть глобус вращающийся нарисовать 🙂
Есть возможность построения математических функций, определение степени корреляции экспериментальных данных и заданой функции, работа в разных видах полярных и сферических координат, рисование псевдо 3D графиков и много чего ещё…
Отмазки
2 Mb — многовато для статьи. Здесь отображены, как экспериментальные данные, так и результаты фильтрации (SMA, EMA, WMA) с помощью самописных скриптов на perl.
P.S. На опечатки укажите, пожалуйста, глаз уже замылился — не вижу.
Комментарии ( 44 )
А чем плох Эксель?
В особо тяжелых случаях Маткад или матлаб?
Нууу, приемлемое (возможно, за счет сжатия с высоким параметром Q). Но даже невооруженным глазом видно размазанность линий, а при увеличении — мусорные точки рядом с ними (эти особенности кстати не позволяют пересжать из JPEG и PNG — они в десятки раз снижают его эффективность). Куда хуже подписывать фоточки — в PNG они жмутся отвратительно, а JPEG превращает текст в говно (можно в моей статье про DSO201 посмотреть подписи к элементам на фото платы — до JPEG’а они были четкие и разборчивые).
Еще, чтобы оценить — можно преобразовать в спектр (БПФ) прямоугольный импульс, срезать хвост спектра (частоты выше той, где график спектра падает до 20-50% максимума), преобразовать обратно и оценить результат 🙂
Ну и старые IE врядли этот сайт переварят. Кроме того, есть GIF, и он даже уже лицензионно чист (хотя изначально открытый PNG мне больше по душе, да и технически намного лучше). Он работает очень похоже на PNG.