>
GNUPLOT

-не так Часто Задаваемые Вопросы -

update 2010/12/26

Введение в Gnuplot - Применение gnuplot'a в жизни

Пакетная обработка

Здесь мы объясним вам как построить график по уже приготовленному файлу. Файл построения "output.plt" был сохранён в последней части "Числовых данных" . Он содержит параметры и функции, некоторые из них определены по умолчанию, другие заданы пользователем.

#!/usr/local/bin/gnuplot -persist
# set terminal postscript landscape noenhanced monochrome \
#              dashed defaultplex "Helvetica" 14
# set output 'output.ps'
set xlabel "x" 0.000000,0.000000  ""
set ylabel "y=exp(-x)" 0.000000,0.000000  ""
set title "Pade approximation" 0.000000,0.000000  ""
set xrange [ 0 : 2 ] noreverse nowriteback
set yrange [ 0 : 1 ] noreverse nowriteback
set mxtics 5.000000
set mytics 5.000000
set xtics border mirror norotate 1
set ytics border mirror norotate 0.5
plot "output.dat" using 1:2 title "Analytical" w l, \
     "output.dat" using 1:3 title "L=1, M=2" w l, \
     "output.dat" using 1:4 title "L=2, M=1" w l
#    EOF

В начале файла вы можете увидеть часть, где определены терминал и имя сохраняемого файла. Вы можете нарисовать такой же график, если воспользуетесь командой load . Когда вы закончите другие вычисления и сохраните результаты в "output.dat", вы также сможете использовать этот файл для нового построения.

gnuplot> load "output.plt"

Вы также можете задать имя файла, как строковую опцию, когда будете обращаться к gnuplot. В этом случае gnuplot закончит работу только после выполнения последней строки в файле. График на вашем экране исчезнет. Чтобы это не случилось вставьте pause -1 в конец вашего файла. График будет отображаться на экране пока вы не нажмёте клавишу возврата.

 % gnuplot output.plt

Опция -persist также позволяет отображать график на экране, как и в способе выше. В этом случае gnuplot завершает работу, но график остаётся на экране.

 % gnuplot -persist output.plt

Эта опция уже присутствует в пакетном файле. Она может быть использована для разрешения на выполнение этого файла.

 % chmod +x  output.plt
 % ./output.plt

Таким образом вы можете закрывать окно каждый раз.

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

  • Отредактируйте файл построения в текстовом редакторе
  • Просмотрите график на экране

Повторите эту последовательность пока вы не получите нужный вам график. Если вы хотите работать с Postscript файлом, то последовательность действий будет следующей:

  • Отредактируйте файл построения в текстовом редакторе
  • Сохраните график в формате Postscript
  • Просмотрите его с помощью gv (ghostview)

В этом случае, символ комментария '#' перед строками set terminal postscript и set output 'output.ps' должен быть удалён. Если вам не нужна задержка pause, то график не будет отображаться на экране.

up

Построение нескольких графиков

Очень удобно использовать gnuplot в научной деятельности, т.к. можно неоднократно использовать один и тот же файл для построения схожих графиков. Мы часто строим похожие графики, у которых оси имею одинаковые названия, одинаковые диапозоны и т.д., но численные данные в них отличаются. Gnuplot позволяет решить эту задачу, используя всего один файл с параметрами построения. Измените имя файла данных в команде plot "datafile" или используйте похожее имя файла данных, но содержащего различающиеся данные.

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

Здесь мы разбираем случай, когда у вас много файлов данных --- calc1.dat, calc2.dat, calc3.dat --- в вашей директории, и каждый файл содержит простые (X,Y) данные. Сначала мы построим график по файлу calc1.dat . Здесь мы определи заголовок графика, названия осей и их диапозоны, деления, как мы это делали в разделе "Числовые данные".

set terminal png
set output "calc1.png"
set xlabel "Energy [MeV]"
set ylabel "Cross Section [b]"
set title "(n,2n) reaction"
set xrange [ 0 : 20 ]
set yrange [ 0 : 2 ]
set mxtics 5
set mytics 5
set xtics 5
set ytics 0.5
plot "calc1.dat" using 1:2 notitle w l

Изображение в PNG создано gnuplot, после выполнения файла data.plt . Если вам нужен файл в EPS, используйте set terminal postscript и измените имя и расширение файла, например, calc1.eps.

 % gnuplot < data.plt
calc1.png

Теперь мы используем всё это, чтобы построить график по другому файлу. Чтобы сделать это, мы должны изменить имена файлов "calc1.dat" and "calc1.png" в данном файле. Мы заменим текст "calc1" на "calc2" с помощью UNIX команды - sed. Другой способ: указать имена файлов в командной строке как опции в командной оболочке скрипта.


Следующая команда изменяет текст "calc1" на "calc2" в файле.

 % sed "s/calc1/calc2/g" data.plt | gnuplot

Эта строка позволяет построить новый график в calc2.png. Вы можете повторть данную операцию для всех файлов данных. Когда количество данных не очень большое можно использовать shell-loop ('foreach' of csh, or 'for' of sh).

csh, tcsh

 % foreach i (calc2 calc3 calc4 cal5)
 foreach? sed "s/calc1/$i/g" data.plt | gnuplot
 foreach? end

sh, bash

 $ for i in calc2 calc3 calc4 cal5 ; do
 > sed "s/calc1/$i/g" data.plt | gnuplot
 > done

Когда файлов много, вы можете убрать расширение '.dat' с помощью sed, как показано ниже. Будьте осторожны, т.к. используются кавычки. Внутренняя часть команды sed удаляет '.dat' с помощью переменной $i , а внешняя часть изменяет строки "calc1."

 $ for i in *.dat ; do
 > sed "s/calc1/`echo $i | sed "s/\.dat$//"`/g" data.plt | gnuplot
 > done

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

#!/bin/sh
sed "s/calc1/calc2/g" data.plt | gnuplot
sed "s/calc1/calc3/g" data.plt | gnuplot
sed "s/calc1/calc4/g" data.plt | gnuplot
sed "s/calc1/calc5/g" data.plt | gnuplot
 ...

Чтобы сделать его, воспользуйтесь UNIX командами: 'ls' и 'awk'. Следующая строка показывает список команд, с помощью которых вы можете построить много графиков за раз. Чтобы сделать файл скрипта , переадресуйте этот сохраняемый файл( command > script.sh ).

 % ls *.dat | awk '{printf("sed \"s/calc1/%s/g\" data.plt | gnuplot\n",$1)}'



Вы можете написать команды gnuplot непосредственно в скрипт файле оболочки, и указать имя вашего файла в командной строке как опцию. Чтобы сделать это, используйте "этот документ" для оболочек UNIX. В этом примере мы создали файл EPS "calc1.eps" из файла данных"calc1.dat."

#!/bin/sh
gnuplot << EOF
set terminal postscript eps color enhanced
set output "$1.eps"
set xlabel "Energy [MeV]"
set ylabel "Cross Section [b]"
set title "(n,2n) reaction"
set xrange [ 0 : 20 ]
set yrange [ 0 : 2 ]
set mxtics 5
set mytics 5
set xtics 5
set ytics 0.5
plot "$1.dat" using 1:2 notitle w l
EOF

Как вы можете заметить, в примере выше имена файла данных и EPS файла files (без расширений) были заменены переменной $1. Настоящие имена для тех переменных назначаются как опция командной строки для этого скрипт файла plot.sh. Этот скрипт создаёт EPS файл "calc1.eps" из файла данных "calc1.dat", при вызове команды, как показано ниже. С помощью данного способа вы можете строить графики по файлам данных, которые могут располагать в разных директориях, и сохранить результаты в ту же директорию.

 $ ./plot.sh calc1

Чтобы изменить имена файла данных и EPS файла, вы должны заменить переменные $1 в скрипте выше на $2, и дать два параметра командной строки для этого скрипта.

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

#!/bin/sh
./plot.sh  calc1
./plot.sh  calc2
./plot.sh  calc3
./plot.sh  calc4
 ...
manyfigure.png
up