gnuplot: построение двумерного графика из файла данных — rpilot62.ru

GNUPLOT-HOWTO

Что такое gnuplot?

Это универсальная программа для вывода графической информации на экран, на принтер, в файл и на другие устройства. Gnuplot имеет версии для всех наиболее распространенных платформ (операционных сиcтем). В качестве «терминала», то есть, устройства вывода, могут быть указаны:
— алфавитно-цифровой терминал
— графический терминал (в Linux это теминал X-Windows)
— принтер
— файл в одном из графических форматов ps, gif, jpg, и т.д.

Как использовать gnuplot?

Есть два основных способа:
Способ 1.
Наберите команду gnuplot в командной строке. После запуска программы появится приглашение:
gnuplot>
Теперь можно вводить команды с клавиатуры. Например, строка
gnuplot> plot «xyz.dat» use 1:2 with lines
вызовет создание окна с графиком зависимости, данные для которой берутся из 1 колонки файла xyz.dat для Х-оси и 2 колонки — для Y-оси.

0. Преамбула

Параметр with lines (можно просто w l) указывает, что график нужно строить в виде линии.

Способ 2. (более удобный)
Gnuplot может считывать команды из предложенного ему файла (обычно — с расширением .gnu). Например, команда gnuplot howtoplot.gnu приведет к выполнению команд из файла howtoplot.gnu, который, например, может быть устроен так:

#-этот символ начинает строку комментариев
# ниже — содержимое файла howtoplot.gnu
set xrange [-10:10]
# установили масштаб по Х
set yrange [-2:2]
# установили масштаб по Y
plot x, sin(x) «xyz.dat» u 1:2 w p
# рисовать график функции y=x функции y=sinx и график зависимости
#из первой и второй колонoк файла xyz.dat,
# зависимость строить в виде точек (w p=with points)
pause -1
# ждать до первого нажатия клавиши

Какие стили изображения бывают?

Для двумерных графиков наиболее употребительны:
w l (with lines) — рисовать график линией
w d (with dots) — рисовать точками минимального размера
w p (with points) — рисовать точками-символами разной формы
w i (with impulses) — рисовать колонками-столбцами гистограммы

Как управлять цветом графика?

По умолчанию gnuplot изображает одновременно выводимые графики гаммой цветов. Цвет можно явно указать в команде plot после стиля графика

plot «xyz.dat» u 1:2 w p 2

Здесь цифра «2» указывает цвет линии. Можно использовать как положительные, так и отрицательные значения (например, «-1» — жирная линия черного цвета).

Как построить одновременно несколько графиков?

Чтобы построить одновременно несколько графиков из данных, записанных в колонках одного файла, нужно несколько раз считать эти данные из файла в одной и той же команде plot

plot «xyz.dat» u 1:2 , «xyz.dat» u 1:3 , «xyz.dat» u 2:3

Как задать масштаб по осям?

Команды:
set autoscale x
set autoscale y — устанавливают автоматическое масштабирование (по умолчанию)
set xrange[x1;x2] — устанавливают пределы X-оси от х1 до х2
set xrange[y1;y2] — устанавливают пределы Y-оси от y1 до y2
set logscale x — логарифмическая шкала по Х

Как построить последовательно несколько графиков?

plot «xyz.dat» u 1:2
pause -1
plot «xyz.dat» u 1:3
pause -1
plot «xyz.dat» u 2:3
pause -1

В приведенном выше примере выводится 3 графика последовательно, после нажатия клавиши.

Как задать заголовок и подписи по осям?

set title — заголовок
set subtitle — подзаголовок
set xlable — надпись по оси Х
set ylable — надпись по оси Y

Как убрать выводимые по умолчанию легенды?

set nokey

Как записать полученный график в .eps-файл?

До команды plot нужно задать 2 параметра, тип терминала и имя файла вывода.

set term «postscript» eps
set output «outfile.eps»

Как получить больше информации об использовании gnuplot?

Запустить программу gnuplot, а затем набрать в командной строке:

help

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

Использование gnuplot в ОС Windows

Если gnuplot не установлен, то сначала его нужно загрузить через Интернет и установить:

  • На странице версий gnuplot выберите последнюю версию, перейдя по ссылке в соответствующую папку и загрузите файл с расширением exe. На момент написания статьи последние версии соответствовали файлам gp503-win32-mingw.exe для 32-разрядной версии системы и gp503-win64-mingw.exe для 64-разрядной версии Windows.
  • Запустите скаченный файл и следуйте инструкциям мастера установки.

Для запуска gnuplot перейдите по кнопке Пуск в папку gnuplot и запустите wgnuplot. Если ваши скрипты используют данные из внешних файлов, то необходимо указать папку, где эти расположенны эти файлы и сами скрипты. Для этого нажмите на кнопку ChDir в панели инструментов и выберите рабочий каталог с файлами с данными.

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

plot ‘data’ using 1:2 with line

Гораздо удобнее собрать все необходимые для построения графика команды в отдельный файл, например, plot.plt.

В этом файле необходимо указать следующие строки:

  • Тип терминала для обработки графики, например, для создания графиков в формате PostScript используется команда

    set terminal postscript eps

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

    set output ‘plot.eps’

  • Сама команда для рисования графика

    plot ‘data’ using 1:2 with line

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

Например, добавим подписи для осей, и укажем диапазон значений по оси Ox:

set xlabel «x» set ylabel «y» set xrange [1:10]

В файл скрипта, помимо указанных команд, можно включать все поддерживаемые gnuplot комманды (соответствующие выбраному терминалу).

Все команды сохраняются в отдельный текстовый файл plot.plt соответственно используемой кодировки.

Как построить графики в Gnuplot в режиме реального времени в С++?

Если используются русские символы, то скрипт должен использовать кодировку KOI8-R.

В консоли загрузить и запустить скрипт можно командой

load ‘plot.plt’

После выполнения скрипта в рабочей папке появится файл plot.eps, содержащий график.

Формат получаемого графического файла зависит от типа используемого терминала. В приведенных выше примерах использовался формат PostScript, удобный для вставки графиков в LaTeX. Для публикации графики в сети Интернет, удобно использовать формат PNG. В этом случае, команда определения терминала (с размером изображения) и имени файла задаются в следующем виде

set term png size 300, 200 set output ‘plot.png’

0. Преамбула

Gnuplot умеет интерактивно строить графики, беря данные из файла, а также умеет эти графики пихать в файлы картинок любого формата ( особено png =) ). Так же он умеет строить сразу несколько графиков на одном полотне.
Файл данных графика можно формировать разными способами, однако удобнее всего для наших задач файл сформировать в следующем виде:

data.log
# index   U[index]   exact_U[index]
   0     1.0      1.0
   0.2    1.1      1.09
   0.4    1.2      1.18
   0.6    1.3      1.35
   0.8    1.1      1.13
   1     1.05      1.05
# end of log file

здесь:

  • первый столбец — это координата x (может быть время, может быть x(наш случай))
  • второй столбец — это значение нашего решения в точке x (в нашем случае T = 1)
  • третий столбец — это значение данного точного решения в той же точке
  • # — любая строка, начинающаяся с символа # — это комментарий. игнорируется gnuplot’ом при построении графиков

// желателно, чтобы в начальных и конечных точках точное и наше решения совпадали… не для gnuplot’a разумеется, а для сдачи задания 😀

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

1. Подготовка данных

Пусть U — это массив значений приближенного решения на данном слое (в частности, в конце, перед выходом из программы U[j] = U(T, h*j))
Пусть exact_U(t, x) — это функция точного решения. Мы будем смотреть на значения exact_U(T, h*j).

Перед выходом из программы необходимо распечатать в файл следующие данные: x, U, exact_U.
На С++ это будет выглядеть так (не забудьте подключить fstream: #include <fstream>):

main.cpp

Итак, data.log — сгенерированный файл данных. Его надо положить рядом с файлом gnuplot.exe, чтобы его было проще вызывать.

2.Построение графиков

Запускаем командную строку, переходим в папку с gnuplot.exe и запускаем его:

пуск->выполнить->cmd.exe
> D:
> cd programs\gnuplot\
> gnuplot.exe

На что получаем приглашение gnuplot и его милое приветствие =)

gnuplot >

Далее все просто — просим построить графики:

gnuplot > plot ‘data.log’ u 1:2 w linesp, ‘data.log’ u 1:3 w linesp

Вот, собственно и все. Пояснение:

  • plot — просим строить 2x-мерный график (можно и 3x-мерные строить с помощью splot)
  • ‘data.log’ — файл с данными
  • u 1:2 == usage 1:2 — строить график по точкам из первого и второго столбца, где первый столбец — OX, второй — OY
  • w linesp == with linesp — точки графика соединять отрезками

В простейшем случае, если просто сказать:

gnuplot > plot ‘data.log’

gnuplot будет откладывать все точки слева направо по принципу (i, y_i), где i — номер вхождения точки.

3. Управление интерактивной средой

В появившемся окошке с графиком можно пощелкать всякие кнопочки… авось что-нить случится. А именно:

  • правая кнопка мыши — позволяет выделить фрагмент для увеличения
  • кнопка «A» — позволяет вернуть график в исходное состояние

4. Рисуем в файл

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

gnuplot > set terminal png size 1024, 768
gnuplot > set output ‘graph.png’
gnuplot > plot ‘data.log’ u 1:2 w linesp, ‘data.log’ u 1:3 w linesp

и у вас в папке с gnuplot’ом появится файл graph.png с размером 1024×768. Его можно вставить в отчет. Будет круто)

5.

Как построить график из значений текстового файла с помощью gnuplot?

Рисуем в 3D

Предположим мы хотим нарисовать функцию sin(x^2 + y^2)/(x^2 + y^2) (красивый график, похожий то, что произойдет после падения капли в воду).

В программе заводим массив a467467, программно вычисляем значение в точке (x, y), заносим это значение в a[i][j]. В конце записываем матрицу, как есть, в файл. Получаем нечто вроде:

matrix.dat

Просим gnuplot нарисовать картинку:

gnuplot > splot ‘matrix.dat’ matrix with lines

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

  • splot ‘file’ matrix with lines — соединять точки графика прямыми
  • splot ‘file’ matrix with pm3d — соединять точки поверхностью (поверхность меняет цвет в зависимости от значения функции (линии уровня))
  • set pm3d at b (s) — рисовать внизу (наверху) поверхность уровней
  • unset pm3d — отменяет предыдущую команду
  • set view a,b — показать график под углом a, b (нужно для красивой отрисовки картинок)
  • set ticslevel 0 (1) — график центрирован по z (график приподнят (удобно использовать совместно с set pm3d at b)
  • set palette defined ( z1 «color1», z2 «color 2», …) — определять цвета линий уровня, чтобы сделать график красивым. цвета можно посмотреть здесь

Что получилось, смотрим здесь: with lineswith pm3d
Примеры и прочее см. 8. Ссылки

6. Автоматизация

Если хочеться мультика, то можно сделать такую штуку…

После каждой итерации выводим матрицу a в файл, генерируем скрипт для gnuplot, передаем ему управление (временно усыпив программу, чтобы она не испортила файл данных). Потом открываем папку, где будут лежать кучка кратинок: 1.png, 2.png, …; открываем просмотрщик, жмем «—>» и наслаждаемся.

Кусок кода для Visual Studio:

main.cpp

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

7. Помощь

В gnuplot есть интерактивная помощь. Ее всегда можно вызвать из командной строки gnuplot набрав help:

gnuplot > help

Там можно найти тьму интересных вещей =)

8. Ссылки

Сайт Gnuplot
Примеры использования gnuplot
Дополнительные трюки
Чей-то блог, с пояснениями по поводу pm3d
Gnuplot trics
Локальная копия стабильной версии gnuplot для windows (ver. 4.4.3)

gnuplot шаг за шагом

Размещение нескольких графиков на одном листе

Для построения нескольких отдельных графиков используется команда set multiplot:

set multiplot

Настройка команды осуществляется с помощью необязательных опций:

  • title «Заголовок» — указывает общий заголовок для все страницы
  • font Шрифт — используемый шрифт в формате «имя шрифта» размер
  • enhanced|noenhanced использовать или нет расширенное форматирование текста (индексы, степени)
  • layout r, c — определяет верстку в r рядов и c колонок
  • rowsfirst|columnsfirst — вначале заполняются ряды или колонки
  • downwards|upwards — заполнение колонок происходит сверху вниз или снизу вверх
  • scale sx, sy — масштабирование графиков по горизонтали и вертикали
  • offset ox, oy — смещение графиков по горизонтали и вертикали в единицах размера листа

Замечание. На некоторых терминалах построение графиков происходит только при наличии команды unset multiplot обозначающую конец режима построения нескольких графиков.

Если определена верстка опцией layout r, c, то количество отображаемых графиков (команд вида plot) должно быть меньше или равно r*c (если графиков меньше, чем r*c, то останутся пустые места). При этом размещение графиков и их размер определяется автоматически — размещение согласно правилам rowsfirst|columnsfirst и downwards|upwards, а размер вычисляется по формуле (sx/r, sy/c). Приведем пример для автоматической верстки:

set term png \ enhanced \ size 400, 200 \ font «arial, 8» set output «multiplot.png» set xrange[-4:4] set xtics 2 set key off set size square set multiplot \ title «Общий заголовок» \ layout 1, 2 \ scale 1.05 \ offset 0.05, 0 set title «e^{0.5x} P_1(x) / P_2(x)» set ylabel «величина» set ytics 1 plot (1 + x) * (2 — x) * exp(x/5) / (1 + x**2) with points pt 5 ps 0.2 set title «sinh(x)» unset ylabel set ytics 15 plot sinh(x) ls 2 lw 2 unset multiplot

Если опция layout не указана, то расположение каждого графика нужно задавать в формате:

set size sx, sy set origin ox, oy plot …

set size определяет размер графика, а set origin его расположение (нижний левый угол). Отметим, что с помощью ручного задания размера и положения графиков можно создать произвольную верстку.

set term png \ size 400, 200 \ font «arial, 8» set output «multiplot2.png» set key off set size 2, 1 set multiplot set xrange[-15:4] set yrange[-1.5:2.4] set xtics 2 set size 1.2, 1 set origin -0.5, 0 plot (1 + x) * (2 — x) * exp(x/5) / (1 + x**2) with points pt 5 ps 0.2 set xrange[-1:2] set yrange[0.5:2.4] set ytics 0.5 set size 0.4, 0.6 set origin 0.1, 0.4 plot (1 + x) * (2 — x) * exp(x/5) / (1 + x**2) with points pt 5 ps 0.2 set xrange[-1:1] set yrange[-1:1] set xtics 0.5 set size 0.35, 0.5 set origin 0.65, 0 plot sinh(x) ls 2 lw 2 set origin 0.65, 0.5 plot sin(5*x) ls 3 lw 2 unset multiplot


Ручная верстка

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

Закрыть меню