Перейти к содержимому

Gnuplot как построить график из файла

  • автор:

Gnuplot и с чем его едят

Наверняка многие из вас листая западные научные издания видели красивые и простые графики. Возможно некоторые из вас задумывались в чём же эти учёные мужи визуализируют свою данные. И вот есть шикарный и очень простой инструмент для построения графиков, который есть практически везде: Windows, linux, android, и прочих, уверен даже есть под ДОС. Он надёжен, прост и позволяет представить в виде красивых графиков любые текстовые-табличные данные.

Почему именно gnuplot?

График из поста про генератор случайных чисел

Картинка из поста про speetest модемов

Графики простые и классные. Наиболее ценное преимущество gnuplot заключается в том, что для их построения вам нужен только текстовый файл с исходными данными, gnuplot на вашей любимой ОС (хоть OpenWRT) и любимый тестовый редактор vim.

На первый взгляд может показаться, что gnuplot сложнее в использовании для построения графиков чем MS Exel. Но это только так кажется, порог вхождения чуть выше (это вам не мышкой наклацать, тут надо документацию читать), но на практике выходит намного проще и удобнее. Один раз написал скрипт и используешь его всю жизнь. Мне реально намного сложнее построить график в Exel, где всё не логично, нежели в gnuplot. А главное преимущество gnuplot, то что его можно встраивать в свои программы и на ходу визуализировать данные. Так же gnuplot без особых проблем строит график с 30-ти гигабайтового файла статистических данных, тогда как Exel просто падал и не мог его открыть.

К плюсам gnuplot можно отнести то, что он легко интегрируется в код на стандартных языках программирования. Есть готовые библиотеки для многих языков, лично я сталкивался с php и python. Таким образом можно генерировать графики прямо из своей программы.

Для примера скажу, что моя хорошая подруга, когда писала диссертацию освоила gnuplot (с моей подачи). Она ни разу не технарь, но разобралась за один вечер. После чего строила графики только там, и уровень её работы стал выгодно отличаться на фоне коллег, использующих Excel. Лично для меня показателем высокого качества научной работы являются графики, построенные специализированными программами.

Таким образом, gnuplot — это просто, доступно и красиво. Едем дальше.

Gnuplot — применение

Работа с gnuplot возможна двумя способами: командный режим и режим выполнения скриптов. Рекомендую сразу использовать второй режим, как наиболее удобный и быстрый. Тем более, что функционал абсолютно тот же.

Но для старта погоняем gnuplot в командном режиме. Запускаем gnuplot из командной строки, либо тем способом который доступен для вашей ОС. Обучение можно начать даже не с чтения этой статьи, а прямо с самой первой команды help. Она выведет шикарную справку и дальше по ней можно идти. Но мы пробежимся по основным моментам.

График строится командой plot. В качестве параметров команды можно задать функцию, либо имя файла данных. А так же какой столбец данных использовать и чем соединять точки, как их обозначать и т.д. Давайте проиллюстрирую.

gnuplot> plot sin(x)

После выполнения команды у нас откроется окно, где будет график синуса, с подписями по умолчанию. Давайте улучшим этот график, заодно разберёмся с дополнительными опциями.
Подпишем оси.

set xlabel "X"

Задает подпись для оси абсцисс.

set ylabel "Y"

Задает подпись для оси ординат.

Добавим сетку, чтобы было видно где построен график.

set grid

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

set yrange [-1.1:1.1] 

Таким образом график у нас будет отрисован от минимального значения -1,1 до максимального 1,1.
Точно так же, устанавливаю диапазон для оси абсцисс, чтобы был виден только один период синусоиды.

set xrange[-pi:pi]

Надо бы добавить заголовок к нашему графику, чтобы всё по феншую было.

set title "Gnuplot for habr" font "Helvetica Bold, 20"

Обратите внимание, что можно задавать шрифты и их размер. Какие шрифты можно использовать, смотрите в документации на gnuplot.

Ну и наконец, давайте кроме синуса на графике ещё нарисуем и косинус, да ещё и зададим тип линии и её цвет. А так же добавим легенды, что же мы чертим.

plot sin(x) title "sinux" lc rgb "red", cos(x) title "cosinus" lc rgb "green"

Здесь мы рисуем два графика на одном холсте, красным и зелёным цветом. Вообще вариантов линий (пунктир, штрих, сплошная), тощин линий, цветов великое множество. Как и типов точек. Моя цель лишь продемонстрировать спектр возможностей. Сведём все команды в одну кучку и выполним их последовательно. Чтобы сбросить предыдущие настройки, введём reset.

reset set xlabel "X" set ylabel "Y" set grid set yrange [-1.1:1.1] set xrange[-pi:pi] set title "Gnuplot for habr" font "Helvetica Bold, 20" plot sin(x) title "sinux" lc rgb "red", cos(x) title "cosinus" lc rgb "green"

В результате получаем вот такую красоту.

График уже не стыдно публиковать в научном журнале.

Если вы повторяли честно всё это за мной, то могли заметить, что вручную каждый раз вводить это, даже копируя, как-то не комильфо. Но это же готовый скрипт? Так давайте же его и сделаем!
Выходим из командного режима, командой exit и создаём файл:

vim testsin.gpi
#! /usr/bin/gnuplot -persist set xlabel "X" set ylabel "Y" set grid set yrange [-1.1:1.1] set xrange[-pi:pi] set title "Gnuplot for habr" font "Helvetica Bold, 20" plot sin(x) title "sinux" lc rgb "red", cos(x) title "cosinus" lc rgb "green"

Делаем его исполняемым и запускаем. Ну не забываем как выйти из vim.

chmod +x testsin.gpi ./testsin.gpi

В результате получаем такое же окно с графиками. Если в заголовке не добавить “-persist”, то окно автоматически закроется после выполнения скрипта.

Но окно создавать часто не очень нужно, плюс не всегда удобно им пользоваться, да и вы можете работать в операционной системе без GUI. Значительно чаще нужно получать графические файлы. Лично я предпочитаю векторный формат postscript, так как при большом количестве точек можно приближать различные участки графика, без потери качества. И так же просмотрщик в линуксе автоматически обновляет окно с графиком, при изменении файла postscript, что тоже весьма удобно.

Для того, чтобы вывести данные в файл, а не на экран, надо переназначить терминал.

set terminal png size 800, 600 set output "result.png"

Как не трудно догадаться, указываем тип файла, его разрешение, затем указываем имя файла. Добавляем эти две строки в начало нашего скрипта, и получаем эту картинку в текущей папке.

Для того, чтобы сохранять в postscript нужно использовать следующие команды:

set terminal postscript eps enhanced color solid set output "result.ps"

Реальные данные

Синусы, косинусы рисовать конечно прикольно, но всё же реальные данные рисовать намного интереснее! Напомню недавнюю задачу, о которой писал статью — вывод графиков скорости интернета за длительные промежутки времени. Формат данных там был следующий.

Operator; #Test; Date; Time; Coordinates; Download Mb/s; Upload Mb/s; ping; Testserver
Rostelecom;0;21.05.2020;09:56:00;NA, NA;3.7877656948451692;5.231226008184113;132.227;MaximaTelecom (Moscow) [0.12 km]: 132.227 ms
Rostelecom;1;21.05.2020;10:01:02;NA, NA;5.274994541394363;5.1088572634075815;127.52;MaximaTelecom (Moscow) [0.12 km]: 127.52 ms
Rostelecom;2;21.05.2020;10:04:35;NA, NA;3.61044819424076;4.624132180211938;135.456;MaximaTelecom (Moscow) [0.12 km]: 135.456 ms

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

#! /usr/bin/gnuplot -persist set terminal postscript eps enhanced color solid set output "Rostelecom.ps" #set terminal png size 1024, 768 #set output "Rostelecom.png" set datafile separator ';' set grid xtics ytics set xdata time set timefmt '%d.%m.%Y;%H:%M:%S' set ylabel "Speed Mb/s" set xlabel 'Time' set title "Rostelecom Speed" plot "Rostelecom.csv" using 3:6 with lines title "Download", '' using 3:7 with lines title "Upload" set title "Rostelecom 2 Ping" set ylabel "Ping ms" plot "Rostelecom.csv" using 3:8 with lines title "Ping" 

В начале файла мы задаём выходной файл postscript (либо png, если будет нужен).

set datafile separator ‘;’ — мы задаём символ разделитель. По умолчанию столбцы разделяет пробел, но csv-файл предлагает множество вариантов разделителей, и нужно уметь использовать все.
set grid xtics ytics — устанавливаем сетку (можно сетку установить только по одной оси).
set xdata time — это важный момент, мы говорим о том, что по оси X формат данных будет время.
set timefmt ‘%d.%m.%Y;%H:%M:%S‘ — задаём формат данных времени. Обратите внимание, что в формат времени попал символ разделения столбцов(«;»), таким образом мы обработаем две колонки как одну.

Задаём подписи осей и графика. После чего строим график.

plot «Rostelecom.csv» using 3:6 with lines title «Download», » using 3:7 with lines title «Upload» — на одном графике мы строим как скорость скачивания, так и скорость отдачи. Using 3:6 — это номер столбца в нашем файле исходных данных, что от чего строим (X:Y).

Далее так же точно строим график для пинга. Результирующий график будет выглядеть следующим образом.

Это скриншот с postscript. Прямые линии в графике связанны с тем, что там пропуски данных. Вот вполне реальный пример построения графика.

А 3D.

Вы хотите 3D? Их есть у меня!

Долго думал, какой же пример трёхмерного графика привести, и не придумал ничего лучше, чем визуализировать картинку. Ведь по сути картинка — это трёхмерный график, где яркость пикселя — это координата по z. Поэтому давайте немного похулиганим.
Возьмём самое знаменитое фото Эйнштейна.

И сделаем из него график. Для этого конвертнём его в формат pgm ASCII и выкинем все пробелы, заменив переводом строки, такой простой командой.

convert Einstein.jpg -compress none pgm:- | tr -s '\012\015' ' ' | tr -s ' ' '\012'> outfile.pgm 

Кто не понял, что здесь происходит, поясняю: мы конвертируем с помощью imagemagic картинку в формат pgm, а потом с помощью tr заменяем перевод каретки с переносом на новую строку на пробел, а потом все пробелы на перенос каретки и сохраняем это всё в outfile.pgm. Кому это сложно, могут открыть файл в gimp и экспортировать его как pgm-ASCII.

После чего открываем получившийся файл нашим любимым редактором vim и удаляем у него заголовок. В моём случае это первые три строки. Из заголовка не забываем узнать разрешение файла, в данном случае было 325х408 пикселей. Всё, мы получили текстовый файл координат Z! Теперь наша задача добавить координаты X и Y, для этого прогоним всё это через питоновский скрипт.

f = open('outfile.pgm') for x in range(408): for y in range(325): line = f.readline() print ('%d %d %s' % (x, y, line)), f.close()

Сохраняем это как convert.py и запускаем:

python convert.py > res.txt

Всё, у нас теперь res.txt содержит координаты Эйнштейна… Хм, ну точнее сказать координаты его изображения. Ну в общем, вы поняли :).


406 317 60
406 318 54
406 319 30
406 320 41
406 321 84
406 322 101
406 323 112
406 324 119
407 0 128
407 1 53
407 2 89
407 3 95
407 4 87
.

Пример файла.

Скрипт для построения этой красоты выглядит следующим образом.

#! /usr/bin/gnuplot -persist #set terminal png size 1024, 768 #set output "result.png" #set grid xtics ytics #set terminal postscript eps enhanced color solid #set output "result.ps" set title "Albert Einstein" set palette gray set hidden3d set pm3d at bs set dgrid3d 100,100 qnorm 2 set xlabel "X" font "Helvetica Bold ,18" set ylabel "Y" rotate by 90 font "Helvetica Bold ,18" set zlabel "Z" font "Helvetica Bold ,18" set xrange [0:408] set yrange [0:325] set zrange [-256:256] unset key splot "./res.txt" with l 

Прежде чем мы пойдём разбирать скрипт, если вы будете это повторять, то настоятельно рекомендую выполнить строки скрипта в командном режиме, чтобы можно было мышкой вращать график (разумеется не указывая set terminal). Это очень круто!

Вначале мы устанавливаем тип выходных данных, а так же границы данных. Границы выставлены по размерам картинки, и плюс от низа я отступил по оси Z на 256 символов, чтобы была видна проекция картинки. Дальше мы озаглавливаем график, подписываем оси. Командой unset key — я отключаю легенды (она не нужна на графике). А вот далее идёт настоящая магия!

set palette gray — мы задаём палитру. Если оставить по умолчанию, то график будет цветным, как на тепловизоре. Чем выше, тем более жёлтое пятно, чем ниже тем темнее красный цвет.

set hidden3d — как бы натягивает изогнутую поверхность (удаляет линии), таким образом формируется красивая выпуклая повехность.

set pm3d at bs — включаем стиль рисования трёхмерный данных, который рисует данные с координатой сеткой и цветом. Подробнее читайте в документации, более детальное описание выходит за рамки статьи.

set dgrid3d 100,100 qnorm 2 — устанавливаем размер ячеек сетки 100х100, и сглаживание между ячейками. Значение 100х100 и так очень большое, и программа сильно тормозит. qnorm 2 — это сглаживание (интерполяция данных между ячейками).

splot «./res.txt» with l — рисуем получившийся график. «With l» — означает рисовать график линиями. Это мелкий хак, потому что точки видны на графике (можно задать маленькие точки).

После запуска ждём некоторое время, и получаем полигональный «барельеф». Попробуйте поэкспериментировать с настройками, чтобы получить другие варианты визуализации.

Изображение в командном режиме, после того как повращали.

Тут вспоминается сразу анекдот.

Как найти площадь Ленина?
Только необразованный человек ответит на этот вопрос, что нужно высоту Ленина умножить на ширину Ленина.
Образованный человек знает, что нужно взять интеграл по поверхности.

Применение gnuplot в своих программах

Пример взят со stackoverflow с моими небольшими доработками.

Код генерирует текстовый файл и постоянно вызывает перестроение графика. Код приложу под спойлер, чтобы не рвать статью.

Пример кода на Си использующего gnuplot

#include #include #include float s=10.; float r=28.; float b=8.0/3.0; /* Definimos las funciones */ float f(float x,float y,float z) < return s*(y-x); >float g(float x,float y,float z) < return x*(r-z)-y; >float h(float x,float y,float z) < return x*y-b*z; >FILE *output; FILE *gp; int main() < gp = popen("gnuplot -","w"); output = fopen("lorenzgplot.dat","w"); float t=0.; float dt=0.01; float tf=30; float x=3.; float y=2.; float z=0.; float k1x,k1y,k1z, k2x,k2y,k2z,k3x,k3y,k3z,k4x,k4y,k4z; fprintf(output,"%f %f %f \n",x,y,z); fprintf(gp, "splot './lorenzgplot.dat' with lines \n"); /* Ahora Runge Kutta de orden 4 */ while(tfclose(gp); fclose(output); return 0; > 

Код работает очень просто, мы открываем pipe:

gp = popen("gnuplot -","w");

Это аналогично вертикальной черте в bash, когда мы за одной командой пишем другую, только внутри программы. Пишем данные в файл lorenzgplot.dat. Один раз вызываем в gnuplot команду splot:

fprintf(gp, "splot './lorenzgplot.dat' with lines \n");

И далее при добавлении новой точки, мы перестраиваем график.

fprintf(gp, "replot \n");

В результате получаем очень красивое медленное построение Аттрактора Лоренца. Ниже видео, снятое почти десять лет назад, на старенький фотоаппарат, поэтому не ругайтесь сильно. Важно в видео другое, что всё это прекрасно работает на таком старом железе, как Nokia N800. Смотреть это желательно без звука.

Важно понимать, что команда replot очень хорошо кушает память и процессорное время, то есть, вот такое построение графика некисло так подтормаживает систему. Так что, при всей любви к gnuplot — это не лучший способ его использования. Ещё одна проблема, что данное окно не удастся ни закрыть, ни передвинуть.

Заключение

Напоследок хочу показать видео, в котором я собрал сотни графиков случайного логарифмического распределения регистраций радиоактивных частиц, реальные данные одного исследования. Видео можно и нужно смотреть со звуком.

В этой статье не смог рассказать и тысячной доли возможностей данного графопостроителя, разве что немного ознакомил читателя с данной программой. Далее вам следует самостоятельно искать примеры, читать документацию на официальном сайте gnuplot.sourceforge.net либо www.gnuplot.info. Обязательно загляните в примеры, там очень много интересного и полезного.

Для старта так же могу порекомендовать Краткое введение в gnuplot (рус). Искренне удивлён, что такая замечательная программа не изучается во всех технических ВУЗах наравне с Latex. У нас зачем-то учили MS Exel и Word.

Изучить gnuplot не сложно, я потратил буквально несколько дней в попытке разобраться с нуля. Но с данной статьёй, верю, что у вас всё будет быстрее. Теперь я забыл о всяких Exel/Calc в качестве графопостроителей, использую только гнуплот. Тем более, что я даже не знаю и десятой доли всех возможностей построения графиков.

Хочу отметить, что существуют множество других графопостроителей, не хуже, чем гнуплот, тем более, что он достаточно старый. Но для меня gnuplot оказался наиболее простым и исчерпывающим. Плюс он самый распространённый графопостроитель, и в сети громадное количество примеров его использования. Спасибо что дочитали!

  • gnuplot
  • графики
  • построение графиков
  • визуализация данных
  • Блог компании RUVDS.com
  • Визуализация данных
  • Лайфхаки для гиков

Построение числовых данных из файла (No.1)

Возможно, большинство из любителей gnuplot используют это приложение в области науки для посторения графика с целью построения графиков результатов от расчетов или экспериментальных данных. Они видят результаты на мониторе, вносят некоторые коррективы, сравнивают расчетные результаты с экспериментальными данными, и т.д. Если расчеты выполнены верно, то их сохраняют в формат postscript и печатаю на принтере, в противном случае файл EPS может быть включен в документ TeX научной статьи.

Что такое формат, который gnuplot может распознать?

2D данные

В файле столбцы данных разделяются пробелами и табуляторами. Если строка начинается со значка «#», то она игнорируется. Gnuplot может прочитать файлы любого формата, для этого необходимо указать формат файла. Смотри gnuplot help «using».

# X Y 1.0 1.2 2.0 1.8 3.0 1.6

Например, если у вас двумерный массив, одна строка содержит пары X и Y, как у казанно выше. Если X и Y неопределены, необходимо задать дополнительную колонку для погрешностей. Порядок столбцов не важен, потому что вы можете указать какой столбец используется для X, а какой для Y. Если первый столбец — значения X, а второй — значения Y, используем опцию using следующим образом:

gnuplot> plot "test.dat" using 1:2

Если опция using не используется, то первый столбец задается как значения X, а второй как значения Y автоматически.

Есть 2 способа заполнить бар погрешностей значениями Y. Первый способ — плюс/минус Z неопределенность значений Y. Второй способ — значения Y находящиеся в диапозоне [Z1,Z2]. В этом случае значения бара погрешностей больше и меньше значений Y. Первый случай требует 3 колонки данных, а последний — 4 колонки данных.

# X Y Z 1.0 1.2 0.2 2.0 1.8 0.3 3.0 1.6 0.2

fig/sample7.1a

# X Y Z1 Z2 1.0 1.2 0.8 1.5 2.0 1.8 0.3 2.3 3.0 1.6 1.0 2.1

fig/sample7.1b

Для построения этих данных, необходима опция using.

gnuplot> plot "test.dat" using 1:2:3 with yerrorbars
gnuplot> plot "test.dat" using 1:2:3:4 with yerrorbars

Число столбцов, необходимых для постороения, зависит от вида рисунка, который приводится дальше.

Формат данных Столбец using with
(X,Y) данные X Y 1:2 lines, points, steps,
linespoints, boxes, etc.
Y с ошибкой dY X Y dY 1:2:3 yerrorbars
X с ошибкой dX X Y dX 1:2:3 xerrorbars
Y с ошибкой dY, и
X с ошибкой dX
X Y dX dY 1:2:3:4 xyerrorbars
Y в интервале [Y1,Y2] X Y Y1 Y2 1:2:3:4 yerrorbars
X в интервале [X1,X2] X Y X1 X2 1:2:3:4 xerrorbars
Y в интервале [Y1,Y2], и
X в интервале [X1,X2]
X Y X1 X2 Y1 Y2 1:2:3:4:5:6 xyerrorbars

3D данные.

Трехмерные данные задаются (X,Y,Z). По умолчанию, они представляют точку в трехмерном пространстве. Когда используется вместе с опцией with lines рисуются линии, gnuplot показывает 3D линии или поверхности в зависимости от формата данных. Следующий пример содержит 4 блока данных, которые разделяются одной пустой строкой. Число пар (X,Y) различно для каждого блока данных. В этом случае, gnuplot не отобразит поверхности, но покажет 3D линии.

# X Y Z 0 0 0 0 1 1 0 2 4 0 3 9 0 4 16 0 5 25 1 0 1 1 1 2 1 2 5 1 3 10 1 4 17 2 0 4 2 1 5 2 2 8 2 3 13 3 0 9 3 1 10 3 2 13
gnuplot> splot "test3d.dat" using 1:2:3 with lines

fig/sample7.1c

Теперь, если число пар (X,Y) одинаково:

# X Y Z 0 0 0 0 1 1 0 2 4 0 3 9 0 4 16 0 5 25 1 0 1 1 1 2 1 2 5 1 3 10 1 4 17 1 5 26 2 0 4 2 1 5 2 2 8 2 3 13 2 4 20 2 5 29 3 0 9 3 1 10 3 2 13 3 3 18 3 4 25 3 5 34

fig/sample7.1d

Поверхность приобретет вид сетки. Хотя значения Y (второго столбца) в каждом блоке этого примера одинаковы, gnuplot так же рисует поверхность в виде сетки и при различных значениях Y (но количество точек одинаково). Такие данные рассматриваются как сетка данных. Когда ваши данные представленны ввиде сетки данных, gnuplot может сделать контрольную карту или скрытую обработку линий. Далее проходит небольшой тест — значения Y в последнем блоке удваиваются (изменен с Y=5 до Y=10).

fig/sample7.1e

Если необходимо не использовать сетку, а именно линии, но при этом блоки содержат одинаковое количество точек, то необходимо отделить в каждом блоке по 2 пустые строки.

# X Y Z 0 0 0 0 1 1 0 2 4 0 3 9 0 4 16 0 5 25 1 0 1 1 1 2 1 2 5 1 3 10 1 4 17 1 5 26 2 0 4 2 1 5 2 2 8 2 3 13 2 4 20 2 5 29 3 0 9 3 1 10 3 2 13 3 3 18 3 4 25 3 5 34

fig/sample7.1f

Матрицы.

Формат данных матрица — это альтернативный способ задать 3D данные. Когда значения X и Y (XY сетка) фиксированны, формат матрица является более удобным. В этом формате необходимым являются направления строки X и столбца Y.

0 1 4 9 1 2 5 10 4 5 8 13 9 10 13 18 16 17 20 25 25 26 29 34

Для построения этих данных используется matrix . Если данные представленны форматом матрица, то координаты X и Y — индексы строк и столбцов. В этом случае указывается диапазон X[0:3] и диапазон Y[0:5]. Если вы хотите изменить эти числа, используется команда set tics. Следующий пример показывает как изменить диапазон X от [0:2] до [100:300].

gnuplot> set xtics ("100" 0, "200" 1, "300" 2) gnuplot> splot "test3d.dat" matrix with lines

Горное небо — для вас!

К северо-востоку от Орлиного ущелья

Gnuplot — это свободный инструмент для создания графиков. Поддерживается создание как двухмерных, так и трехмерных изображений.

Программа доступна для множества платформ — Linux, MS Windows, OSX и представляет собой утилиту командной строки, с собственным набором команд. Так же имеется возможность выполнять скрипты. Поддерживается вывод как непосредственно на экран, так и в файлы различных графических форматов.

Утилита очень удобна для визуализации и глубокого анализа различных научных данных. Встроенный скриптовый язык позволяет гибко задавать различные параметры визуализации.

Официальный сайт проекта — http://www.gnuplot.info/

Распространяется как в виде исходных кодов, так и в виде уже собранных пакетов и установочных файлов для различных операционных систем. В случае большинства дистрибутивов Linux программа доступна в репозиториях и устанавливается штатными средствами дистрибутива. Для Apple OSX установка доступна, например, через macports (см. http://www.macports.org/ )

В сети и в частности на официальном сайте доступны множество примеров использования gnuplot, русскоязычной же информации увы крайне мало.

В этой статье я рассмотрю несколько типовых примеров использования gnuplot в формате «подставил свои данные — получил график».

Для начала рассмотрим основные команды, которые будут актуальны практически каждый раз. Важный момент — все команды регистрозависимые, так что команда help будет понята утилитой, а вот Help — уже нет.

  • help — собственно помощь, богатая встроенная интерактивная справка, можно получать справку по конкретной команде, например help plot
  • set xlabel «моя подпись для x» — задает подпись для оси абсцисс
  • set ylabel «моя подпись для y» — задает подпись для оси ординат
  • set xrange [min:max] — задает лимиты значений для оси абсцисс, после выполнения команды ось на графике будет размечена от min до max, значения графика не попавшие в этот диапазон будут отброшены. Этот параметр может быть полезен для фильтрации ненужных значений или же для визуального отодвигания начала и конца графика от краев изображения. В качестве min, max могут быть целочисленные значения, числа с плавающей запятой, а так же даты.

Если вместо конкретного значения указать * — значение будет вычисляться автоматически, на основе минимального/максимального значения в данных.

По умолчанию gnuplot использует режим [*:*] с автоматическим вычислением.

  • set yrange [min:max] — аналогично xrange, только для оси ординат.
  • plot — собственно команда построения графика, эта команда принимает обязательный аргумент — источник данных для построения графика, это может быть имя файла с исходными данными, либо же математическая формула.

Есть возможность, через запятую, задать несколько источников данных — тогда на одном «полотне» будут нарисованы несколько графиков, так же можно указывать дополнительные параметры — тип графика, параметры отрисовки. Об этом в примерах ниже.

  • set terminal — служебная команда, задает механизм вывода графика, по умолчанию вывод выполняется на экран (если доступна графическая оболочка), для переключения в режим записи в png файл следует выполнить команду set terminal png для возвращения в режим отображения на экране следует выполнить эту команду с иным аргументом:
          • Для Windows: set terminal windows
          • Для Linux: set terminal X11
          • Для OSX: set terminal aqua

          Полный список доступных терминалов можно узнать, если просто выполнить команду set terminal

          • set output «filename.png» — задает имя выходоного файла, в случае если выбран соответствующий режим в set terminal
          • set key — эта команда, вместе с различными параметрами позволяет управлять «легендой» графика, наиболее используемые варианты применения:
                  • set nokey — выключить отображение легенды
                  • set key — включить ранее выключенное отображение легенды
                  • set key title «подпись» — задает произвольную подпись к легенде
                  • set key — комбинацией параметров можно задать расположение легенды

                  Теперь настало время примеров, построим простейший график функции sin(x), установив легенду с произвольным текстом и расположением. Так же зададим ограничения значений по X

                  Запускаем gnuplot и вводим следующие команды (где > — приглашение командной строки gnuplot)

                  > set xrange [-2:5]

                  > set key horizontal top left

                  > set key title «график функции sin(x)»

                  После выполнения последней команды откроется окно с нарисованным графиком

                  Теперь рассмотрим более реальный пример — например зависимость уровня радиации от высоты.

                  У нас есть исходные данные — высота в метрах и уровень радиации в микрозивертах.

                  Сохраним эти данные в текстовый файл, в виде двух колонок (обязательное условие — разделителем дробной части должны быть точки)

                  Интерактивная среда построения графиков GNUPLOT

                  gnuplot — свободная программа для создания двух- и трёхмерных графиков. gnuplot — терминальное интерактивное приложение в среде ОС UNIX. Позволяет выполнять построение 2-х и 3-х мерных графиков функций. Функции могут задаваться как в аналитическом виде, так и в виде табличных данных, хранящихся в файлах. Набор команд для построения некоторого графика (или группы графиков) может быть записан в файл и выполнен одной командой. Для работы с gnuplot необходима установка на клиентской машине графической среды X-Window (В MS Windows можно установить NX Client или MobaXterm).

                  • Вызовите gnuplot : После исполнения команды вы увидите, что установлен терминал ‘X11’:
                  • Следом за вызовом gnuplot можно задавать команды и просматривать результаты их выполнения, например, команда:

                  plot f(x)=sin(x*a),a=0.2,f(x),a=0.4,f(x)

                  нарисует график:

                • , а команда splot x*x+y*y создаст эллиптический параболоид :
                • Можно использовать команды заливки, рисования сетки по всем осям,например, для sin(sqrt(x*x+y*y))/sqrt(x*x+y*y

                В современных версиях gnuplot, при использовании интерактивных терминалов (x11,wxt) точку зрения можно менять поворачивая изображение при нажатой кнопке мыши.

                Работа в gnuplot осуществляется в двух режимах:

                1. Интерактивный. Пользователь общается с программой с помощью командной строки в режиме реального времени (см. рисунки №3, №4 и №5).
                2. Пакетный. Пользователь подготавливает файл, содержащий последовательный набор команд (новая команда начинается с новой строки). При работе в таком режиме командный файл должен находиться в одной директории с исполняемым файлом gnuplot. После установки gnuplot обработка команд содержащихся в файле, например, simpe1.graph, выполняется командой

                $ gnuplot simpe1.graph
                  Пример содержимого файла simple1.graph:
                set terminal windows
                set parametric
                set encoding koi8r
                set size square
                set xrange [-1:1]
                set yrange [-1:1]
                f(x)=sin(x) g(x)=cos(x)
                plot f(t), g(t) with points ls 3

                Пример построения графика с помощью пакетного режима. gnuplot выполняет команды из файла и сохраняет график в файле, который можно просмотреть графическим редактором:

                Содержимое командного файла:
                set term postscript eps
                set palette gray
                set view 45,45
                set isosamples 50
                set output «primer1.eps»
                splot (cos(5*acos(y/sqrt(x*x+y*y)))/(1+(x*x+y*y))**0.25) w pm3d

                » GnuPlot может рисовать графики функций, заданных формулой или точками. Это могут быть функции одной (линия на плоскости) или двух (поверхность в пространстве) переменных. Можно строить графики функций, заданных параметрически, рисовать кривые в полярных координатах. Дополнительно можно наносить на рисунок надписи и стрелки. Поддерживаются различные стили линий и точек, шрифты. Возможен вывод на экран или в файлы различного типа. Кроме того, программа позволяет аппроксимировать экспериментальный набор точек кривыми заданного вида. Работать программа может как под управлением Windows, так и под управлением Unix-подобных ОС. При всем этом, программа абсолютно бесплатна».

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *