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

Обновлено: 07.07.2024

Есть два основных способа:
Способ 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: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

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

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

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

Данные должны располагаться по столбцам и разделяться пробелами или табуляцией:

Простейший график

График по данным столбцов 1 и 2 строится следующим образом:

using12.jpg

Несколько кривых в общих осях координат

Пусть первая кривая строится на основе данных из столбцов 1 и 2 файла data.txt (который находится в текущем каталоге), а вторая использует данные из столбцов 1 и 3. Обе кривые строятся в общих осях координат с помощью следующей команды:

using123.jpg

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

Настройка отображения данных

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

полная команда сокращение рисует график
with lines w l линией
with dots w d точками минимального размера
with points w p маркерами разной формы
with linespoints w lp линиями и маркерами разной формы
with boxes w b столбцами гистограммы

Рисуем график линиями

wl.jpg

Если в файле данных встретится пустая строка, на ее месте в линии графика появится разрыв. Например, вставив пустую строку перед двумя последними строками файла data.txt

wl_blank_line.jpg

Цвет линии linecolor ( lc ):

Рисуем график синей линией:

или, что то же самое,

wl_lc3.jpg

Толщина линии определяется параметром linewidth ( lw ). 1 — значение по умолчанию.

wl_lc3lw4.jpg

Принимаются дробные значения толщины:

wl_lw03.jpg

Тип линии linetype ( lt ) представляет собой сочетание цвета и стиля соединительной линии

номер цвет стиль
-1 черный сплошная
0 черный пунктир
1 красный сплошная
2 зеленый штрих
3 синий пунктир
4 фиолетовый штрих-пунктир
5 голубой штрих-двойной пунктир
6 желтый сплошная
7 серый штрих
8 красный короткий штрих
9 серый штрих-пунктир
10 красный штрих-двойной пунктир

Но вначале нужно разрешить создание несплошных линий, установив опцию dashed :

wl_lt5_dashed.jpg

Без установки этой опции изменится только цвет линии. Вернемся к отображению сплошных линий:

wl_lt5.jpg

Нужный тип и цвет линии устанавливаются комбинацией linetype и linecolor . Строим график зеленой штрих-пунктирной линией:

wl_lt4lc6.jpg

Мы вернули опцию dashed . Она будет сохранять значение при построении всех следующих графиков, до тех? пока не сменится на solid .

Нарисуем график черными точками:

wd_lc-1.jpg

Чтобы точки данных были более заметны, существуют маркеры ( points ) различных типов ( pointtype или pt ).

номер тип маркера
1 +
2 х
3 *
4 квадратик
5 заполненный квадратик
6 кружочек
7 заполненный кружочек
8 треугольник
9 заполненный треугольник
10 перевёрнутый треугольник
11 заполненный перевёрнутый треугольник
12 алмаз
13 заполненный алмаз
14 пятиугольник
15 заполненный пятиугольник

Нечетные номера соответствуют закрашенным маркерам, четные — незакрашенным.

График с маркерами-треугольниками:

wp_pt8.jpg

Размер маркера регулируется параметром pointsize ( ps ). Значение по умолчанию равно 1. Дробные размеры допустимы.

Построим график с линией зеленого цвета и маркерами — заполненными кружками размера 3:

wlp_lc2pt7ps3.jpg

Оси и сетка

Оси графика по умолчанию подгоняются под границы данных. Указать границы изменения данных по осям можно с помощью команд set xrange и set yrange . Например, изменим диапазон изменения данных по оси y :

syr.jpg

Сделать это нужно до команды рисования. Однако в диалоговом режиме работы удобно вначале построить график, а затем установить нужный диапазон и перерисовать график командой replot :

Команды set autoscale <|x|y>, set autoscale x , set autoscale y устанавливают автоматическое масштабирование по обеим осям или по заданной оси. set logscale <|x|y>устанавливает логарифмическую шкалу.

slsx.jpg

По умолчанию gnuplot отображает верхнюю, нижнюю, левую и правую оси координат. Для удаления этих осей используется опция set border n . Каждой оси присваивается целое значение: нижней — 1 , левой — 2 , верхней — 4 и правой — 8 . Значение n — это сумма введеных значений. Например, оси x (нижняя) и y (левая) отображаются при n = 3 . Команда set border влияет только на сами линии границ, так что деления остаются даже при n = 0 . Для того, чтобы стереть их, нужно использовать set notics или set tics nomirror .

Удалим верхнюю и правую оси координат.

Если перед этим устанавливалась логарифмическая шкала, отмените ее и перестройте график:

sb3.jpg

Иногда, по требованиям к оформлению графика, необходимо построить ось, проходящую через 0.

Для этого следует использовать команду set zeroaxis .

sxza.jpg

По умолчанию, нулевая ось отрисовывается точками, однако это легко переопределяется командами linetype и lw line_width . Например, добавим к предыдущему:

sxza_lt-1.jpg

Сетка на графике отображается командой set grid :

sg.jpg

Сделать оси квадратными (то есть обе оси будут равной длины и масштаба) можно командой:

Надписи

Вернемся к настройкам по умолчанию:

Установим заголовок графика и подписи к осям

stl.jpg

Символ '\n' отвечает за перенос заголовка на новую строку.

Убрать выводимую по умолчанию легенду (обозначение рядов данных) можно командой set nokey или set key off .

Разместим легенду в правом нижнем углу:

stl_sk.jpg

Команды установки подписей можно дополнить установками шрифтов. Например,

sf.jpg

Шрифт делений устанавливается командой set <|x|y>tics . Например, зададим (предварительно сделав reset ):

sft.jpg

Сохранение графика в файле

gnuplot может не только выводить графики на экран, но и сохранять их в файлы различных графических форматов, таких как PNG, EPS, SVG, JPEG и множество других. Программа также может генерировать код на LaTeX, позволяя использовать шрифты и формулы LaTeX.

Установка формата вывода осуществляется командой set terminal . Сохраним график в файле формата PNG:

graph.jpg

Указать размеры изображения можно с помощью опции 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:

Читайте также: