Если под линуксом гнуплот работает без нареканий и сюрпризов, то под 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 их поддерживает, но, боюсь, никто ими не пользуется. А жаль, ибо штука удобная.
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *gpipe = popen("pgnuplot -persist","w");
if(!gpipe)
return -1;
fprintf(gpipe, "set terminal win\n");
fprintf(gpipe, "plot x*x\n");
fprintf(gpipe, "pause -1 \"hit enter to exit\"\n");
fprintf(gpipe, "exit\n");
pclose(gpipe);
return 0;
}
Функция 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
. Вот как это сделать. Сразу может не заработать, перезагружаемся.
Остаётся один неприятный косяк — размер окна определяется автоматически (видимо в процентах от разрешения экрана) и задать в коде его нельзя. Т. е. если вы хотите получить окно квадратной формы, придется каждый раз изменять его размер вручную. В линуксе можно задать размер окна, а в винде нет.