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 разумеется, а для сдачи задания 😀
При построение графиков по данному файлу, мы получим два графика (по умолчанию один красный, другой зеленый) построенного по данным точкам, где по оси абцис будут отложены данные с первого столбца. Каждый график будет состоять из отрезков, соединяющие данные точки.
Пусть U — это массив значений приближенного решения на данном слое (в частности, в конце, перед выходом из программы U[j] = U(T, h*j))
Пусть exact_U(t, x) — это функция точного решения. Мы будем смотреть на значения exact_U(T, h*j).
Перед выходом из программы необходимо распечатать в файл следующие данные: x, U, exact_U.
На С++ это будет выглядеть так (не забудьте подключить fstream: #include ):
Итак, data.log — сгенерированный файл данных. Его надо положить рядом с файлом gnuplot.exe, чтобы его было проще вызывать.
Запускаем командную строку, переходим в папку с gnuplot.exe и запускаем его:
пуск->выполнить->cmd.exe
> D:
> cd programsgnuplot
> gnuplot.exe
На что получаем приглашение 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 — номер вхождения точки.
Для того чтобы получить файл 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. Его можно вставить в отчет. Будет круто)
Предположим мы хотим нарисовать функцию sin(x^2 + y^2)/(x^2 + y^2) (красивый график, похожий то, что произойдет после падения капли в воду).
В программе заводим массив a[N][N], программно вычисляем значение в точке (x, y), заносим это значение в a[i][j]. В конце записываем матрицу, как есть, в файл. Получаем нечто вроде:
Просим 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. Ссылки
Если хочеться мультика, то можно сделать такую штуку.
После каждой итерации выводим матрицу a в файл, генерируем скрипт для gnuplot, передаем ему управление (временно усыпив программу, чтобы она не испортила файл данных). Потом открываем папку, где будут лежать кучка кратинок: 1.png, 2.png, . ; открываем просмотрщик, жмем "—>" и наслаждаемся.
Кусок кода для Visual Studio:
Разумеется, пути к файлам надо поменять на правильные. Плюс, нужно дописать подходящие параметры для красивой отрисовки.
В gnuplot есть интерактивная помощь. Ее всегда можно вызвать из командной строки gnuplot набрав help:
Освоить основные принципы работы в Gnuplot легко:
Gnuplot является консольной программой, что позволяет автоматизировать работу в построении сотен графиков. Так же он распространяется под лицензией подразумевающей свободное распространение и использование, т.е. вы можете использовать Гнуплот совершенно бесплатно и это не нарушает никаких прав.
Где скачать Gnuplot?
Скачать можно с официального сайта http://gnuplot.info.
Linux
Windows
Запуск Gnuplot
В консоли запускаем Gnuplot командой
И увидим приветствие программы
Вывод Gnuplot при запуске
Это интерактивный режим работы — когда мы пишем команды и Gnuplot их сразу выполняет.
Построить график функции
И получим такой график
График функции Sin(x) построенный в Gnuplot
Разберем подробнее команду
plot — команда для построения или отрисовки графика, sin(x) — функция для отрисовки, синус. По умолчанию x играет роль переменной.
Так как мы еще не настраивали вид графиков, то по умолчанию ось OX или x у нас в интервале от -10 до 10. Ось OY или y подстраивается автоматически от минимума до максимума, за исключением особых точек на графике, например — бесконечность.
Если есть особые точки на графике как бесконечность
Построить график из файла данных
Что бы построить график из файла данных "data.txt" воспользуемся командой
И получим такой рисунок
График построенный из файла данных в Gnuplot
plot — команда построить график "data.txt" — файл данных, пример файла здесь, подробнее о том какого он должен быть формата и чего там не должно быть будет изложено в другой статье.
И разумеется, Gnuplot не телепат, не знает где лежат ваши файлы, по умолчанию он берет файлы из директории или папки в которой он запущен. Ее вы можете узнать командой
Можно также указать полное имя от корневой директории "/" , например "/home/black/програмирование/Сайт/dev.asifmoda.com/текста/скрипты/data.txt" . Так же не забывайте что имя файла нужно вводить в кавычках, в Ubuntu 16 работают как одинарные, так и двойные кавычки.
u — сокращение от using , то есть использовать. В файле находится две колонки цифр разделенные пробелами, 1 означает для x использовать первую колонку, далее двоеточие, и 2 — использовать вторую колонку для y . Если указано 0, то используется порядок цифр или другими словами номер строки начиная с нуля. Разумеется, можно в качестве x использовать разные колонки цифр. w — сокращение от with , и вместе с l — сокращение от line , линия означает построить график линиями.
Данные должны располагаться по столбцам и разделяться пробелами или табуляцией:
Строки, следующие за символом ‘#’ , являются комментариями и игнорируются gnuplot.
Простейший график
График по данным столбцов 1 и 2 строится следующим образом:
Несколько кривых в общих осях координат
Пусть первая кривая строится на основе данных из столбцов 1 и 2 файла data.txt (который находится в текущем каталоге), а вторая использует данные из столбцов 1 и 3. Обе кривые строятся в общих осях координат с помощью следующей команды:
Перейдем к настройке параметров графика.
Настройка отображения данных
Для двумерных графиков используются следующие стили представления данных:
полная команда | сокращение | рисует график |
---|---|---|
with lines | w l | линией |
with dots | w d | точками минимального размера |
with points | w p | маркерами разной формы |
with linespoints | w lp | линиями и маркерами разной формы |
with boxes | w b | столбцами гистограммы |
Рисуем график линиями
Если в файле данных встретится пустая строка, на ее месте в линии графика появится разрыв. Например, вставив пустую строку перед двумя последними строками файла data.txt
Цвет линии linecolor ( lc ):
номер | цвет линии |
---|---|
-1 |
Рисуем график синей линией:
или, что то же самое,
Толщина линии определяется параметром linewidth ( lw ). 1 — значение по умолчанию.
Принимаются дробные значения толщины:
Тип линии linetype ( lt ) представляет собой сочетание цвета и стиля соединительной линии
номер | цвет | стиль |
---|---|---|
-1 | черный | сплошная |
черный | пунктир | |
1 | красный | сплошная |
2 | зеленый | штрих |
3 | синий | пунктир |
4 | фиолетовый | штрих-пунктир |
5 | голубой | штрих-двойной пунктир |
6 | желтый | сплошная |
7 | серый | штрих |
8 | красный | короткий штрих |
9 | серый | штрих-пунктир |
10 | красный | штрих-двойной пунктир |
Но вначале нужно разрешить создание несплошных линий, установив опцию dashed :
Без установки этой опции изменится только цвет линии. Вернемся к отображению сплошных линий:
Нужный тип и цвет линии устанавливаются комбинацией linetype и linecolor . Строим график зеленой штрих-пунктирной линией:
Мы вернули опцию dashed . Она будет сохранять значение при построении всех следующих графиков, до тех? пока не сменится на solid .
Нарисуем график черными точками:
Чтобы точки данных были более заметны, существуют маркеры ( points ) различных типов ( pointtype или pt ).
номер | тип маркера |
---|---|
1 | + |
2 | х |
3 | * |
4 | квадратик |
5 | заполненный квадратик |
6 | кружочек |
7 | заполненный кружочек |
8 | треугольник |
9 | заполненный треугольник |
10 | перевёрнутый треугольник |
11 | заполненный перевёрнутый треугольник |
12 | алмаз |
13 | заполненный алмаз |
14 | пятиугольник |
15 | заполненный пятиугольник |
Нечетные номера соответствуют закрашенным маркерам, четные — незакрашенным.
График с маркерами-треугольниками:
Размер маркера регулируется параметром pointsize ( ps ). Значение по умолчанию равно 1. Дробные размеры допустимы.
Построим график с линией зеленого цвета и маркерами — заполненными кружками размера 3:
Оси и сетка
Оси графика по умолчанию подгоняются под границы данных. Указать границы изменения данных по осям можно с помощью команд set xrange и set yrange . Например, изменим диапазон изменения данных по оси y :
Сделать это нужно до команды рисования. Однако в диалоговом режиме работы удобно вначале построить график, а затем установить нужный диапазон и перерисовать график командой replot :
Команды set autoscale <|x|y>, set autoscale x , set autoscale y устанавливают автоматическое масштабирование по обеим осям или по заданной оси. set logscale <|x|y>устанавливает логарифмическую шкалу.
По умолчанию gnuplot отображает верхнюю, нижнюю, левую и правую оси координат. Для удаления этих осей используется опция set border n . Каждой оси присваивается целое значение: нижней — 1 , левой — 2 , верхней — 4 и правой — 8 . Значение n — это сумма введеных значений. Например, оси x (нижняя) и y (левая) отображаются при n = 3 . Команда set border влияет только на сами линии границ, так что деления остаются даже при n = 0 . Для того, чтобы стереть их, нужно использовать set notics или set tics nomirror .
Удалим верхнюю и правую оси координат.
Если перед этим устанавливалась логарифмическая шкала, отмените ее и перестройте график:
Иногда, по требованиям к оформлению графика, необходимо построить ось, проходящую через 0.
Для этого следует использовать команду set zeroaxis .
По умолчанию, нулевая ось отрисовывается точками, однако это легко переопределяется командами linetype и lw line_width . Например, добавим к предыдущему:
Сетка на графике отображается командой set grid :
Сделать оси квадратными (то есть обе оси будут равной длины и масштаба) можно командой:
Надписи
Вернемся к настройкам по умолчанию:
Установим заголовок графика и подписи к осям
Символ ‘
‘ отвечает за перенос заголовка на новую строку.
Убрать выводимую по умолчанию легенду (обозначение рядов данных) можно командой set nokey или set key off .
Разместим легенду в правом нижнем углу:
Команды установки подписей можно дополнить установками шрифтов. Например,
Шрифт делений устанавливается командой set <|x|y>tics . Например, зададим (предварительно сделав reset ):
Сохранение графика в файле
gnuplot может не только выводить графики на экран, но и сохранять их в файлы различных графических форматов, таких как PNG, EPS, SVG, JPEG и множество других. Программа также может генерировать код на LaTeX, позволяя использовать шрифты и формулы LaTeX.
Установка формата вывода осуществляется командой set terminal . Сохраним график в файле формата PNG:
Указать размеры изображения можно с помощью опции size . Так, указав в примере выше set terminal png size 800,600 , получим выходной файл размера 800х600 пикселей.