Gnuplot как построить график из файла
Есть два основных способа:
Способ 1.
Наберите команду gnuplot в командной строке. После запуска программы появится приглашение:
gnuplot>
Теперь можно вводить команды с клавиатуры. Например, строка
gnuplot> plot "xyz.dat" use 1:2 with lines
вызовет создание окна с графиком зависимости, данные для которой берутся из 1 колонки файла xyz.dat для Х-оси и 2 колонки - для Y-оси. Параметр with lines (можно просто w l) указывает, что график нужно строить в виде линии.
Способ 2. (более удобный)
Gnuplot может считывать команды из предложенного ему файла (обычно - с расширением .gnu). Например, команда gnuplot howtoplot.gnu приведет к выполнению команд из файла howtoplot.gnu, который, например, может быть устроен так:
Какие стили изображения бывают?
Для двумерных графиков наиболее употребительны: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:2pause -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
Как убрать выводимые по умолчанию легенды?
Как записать полученный график в .eps-файл?
До команды plot нужно задать 2 параметра, тип терминала и имя файла вывода.
Данные должны располагаться по столбцам и разделяться пробелами или табуляцией:
Простейший график
График по данным столбцов 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 ):
Рисуем график синей линией:
или, что то же самое,
Толщина линии определяется параметром linewidth ( lw ). 1 — значение по умолчанию.
Принимаются дробные значения толщины:
Тип линии linetype ( lt ) представляет собой сочетание цвета и стиля соединительной линии
номер | цвет | стиль |
---|---|---|
-1 | черный | сплошная |
0 | черный | пунктир |
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 no
Удалим верхнюю и правую оси координат.
Если перед этим устанавливалась логарифмическая шкала, отмените ее и перестройте график:
Иногда, по требованиям к оформлению графика, необходимо построить ось, проходящую через 0.
Для этого следует использовать команду set
По умолчанию, нулевая ось отрисовывается точками, однако это легко переопределяется командами linetype и lw line_width . Например, добавим к предыдущему:
Сетка на графике отображается командой set grid :
Сделать оси квадратными (то есть обе оси будут равной длины и масштаба) можно командой:
Надписи
Вернемся к настройкам по умолчанию:
Установим заголовок графика и подписи к осям
Символ '\n' отвечает за перенос заголовка на новую строку.
Убрать выводимую по умолчанию легенду (обозначение рядов данных) можно командой 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 пикселей.
Gnuplot — это свободный инструмент для создания графиков. Поддерживается создание как двухмерных, так и трехмерных изображений.
Программа доступна для множества платформ — Linux, MS Windows, OSX и представляет собой утилиту командной строки, с собственным набором команд. Так же имеется возможность выполнять скрипты. Поддерживается вывод как непосредственно на экран, так и в файлы различных графических форматов.
Утилита очень удобна для визуализации и глубокого анализа различных научных данных. Встроенный скриптовый язык позволяет гибко задавать различные параметры визуализации.
В сети и в частности на официальном сайте доступны множество примеров использования 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 <term_type> - служебная команда, задает механизм вывода графика, по умолчанию вывод выполняется на экран (если доступна графическая оболочка), для переключения в режим записи в png файл следует выполнить команду set terminal png для возвращения в режим отображения на экране следует выполнить эту команду с иным аргументом:
Для Windows: set terminal windows
Для Linux: set terminal X11
Для OSX: set terminal aqua
Полный список доступных терминалов можно узнать, если просто выполнить команду set terminal
set output «filename.jpg» - задает имя выходоного файла, в случае если выбран соответствующий режим в set terminal
set key <param> - эта команда, вместе с различными параметрами позволяет управлять «легендой» графика, наиболее используемые варианты применения:
set nokey — выключить отображение легенды
set key — включить ранее выключенное отображение легенды
set key title «подпись» - задает произвольную подпись к легенде
set key — комбинацией параметров можно задать расположение легенды
reset — сброс всех заданных параметров
Теперь настало время примеров, построим простейший график функции sin(x), установив легенду с произвольным текстом и расположением. Так же зададим ограничения значений по X
Запускаем gnuplot и вводим следующие команды (где > - приглашение командной строки gnuplot)
> set xrange [-2:5]
> set key horizontal top left
> set key title "график функции sin(x)"
После выполнения последней команды откроется окно с нарисованным графиком
Теперь рассмотрим более реальный пример — например зависимость уровня радиации от высоты.
У нас есть исходные данные — высота в метрах и уровень радиации в микрозивертах.
Сохраним эти данные в текстовый файл, в виде двух колонок (обязательное условие — разделителем дробной части должны быть точки)
0. Преамбула
Gnuplot умеет интерактивно строить графики, беря данные из файла, а также умеет эти графики пихать в файлы картинок любого формата ( особено png =) ). Так же он умеет строить сразу несколько графиков на одном полотне.
Файл данных графика можно формировать разными способами, однако удобнее всего для наших задач файл сформировать в следующем виде:
При построение графиков по данному файлу, мы получим два графика (по умолчанию один красный, другой зеленый) построенного по данным точкам, где по оси абцис будут отложены данные с первого столбца. Каждый график будет состоять из отрезков, соединяющие данные точки.
1. Подготовка данных
Пусть U - это массив значений приближенного решения на данном слое (в частности, в конце, перед выходом из программы U[j] = U(T, h*j))
Пусть exact_U(t, x) - это функция точного решения. Мы будем смотреть на значения exact_U(T, h*j).
main.cpp
Итак, data.log - сгенерированный файл данных. Его надо положить рядом с файлом gnuplot.exe, чтобы его было проще вызывать.
2.Построение графиков
Запускаем командную строку, переходим в папку с gnuplot.exe и запускаем его:
пуск->выполнить->cmd.exe
> D:
> cd programs\gnuplot\
> 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 - номер вхождения точки.
3. Управление интерактивной средой
- правая кнопка мыши - позволяет выделить фрагмент для увеличения
- кнопка "A" - позволяет вернуть график в исходное состояние
4. Рисуем в файл
Для того чтобы получить файл graph.jpg с графиком нужно выполнить следующие команды в gnuplot:
gnuplot > set terminal png size 1024, 768
gnuplot > set output 'graph.jpg'
gnuplot > plot 'data.log' u 1:2 w linesp, 'data.log' u 1:3 w linesp
и у вас в папке с gnuplot'ом появится файл graph.jpg с размером 1024x768. Его можно вставить в отчет. Будет круто)
5. Рисуем в 3D
Предположим мы хотим нарисовать функцию sin(x^2 + y^2)/(x^2 + y^2) (красивый график, похожий то, что произойдет после падения капли в воду).
В программе заводим массив a[N][N], программно вычисляем значение в точке (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", . ) - определять цвета линий уровня, чтобы сделать график красивым. цвета можно посмотреть здесь
6. Автоматизация
Если хочеться мультика, то можно сделать такую штуку.
После каждой итерации выводим матрицу a в файл, генерируем скрипт для gnuplot, передаем ему управление (временно усыпив программу, чтобы она не испортила файл данных). Потом открываем папку, где будут лежать кучка кратинок: 1.jpg, 2.jpg, . ; открываем просмотрщик, жмем "-->" и наслаждаемся.
Кусок кода для Visual Studio:
main.cpp
Разумеется, пути к файлам надо поменять на правильные. Плюс, нужно дописать подходящие параметры для красивой отрисовки.
7. Помощь
В gnuplot есть интерактивная помощь. Ее всегда можно вызвать из командной строки gnuplot набрав help:
Читайте также: