среда, 19 мая 2010 г.

Построение графиков экспериментальных данных в gnuplot

В этой части мы опишем, как построить график экспериментальных данных, сохраненных в файле. В нашем примере имеются три набора данных, последовательно записанных в файле. Блоки данных разделены двумя пустыми строками. Каждая точка описывается тремя числами (X, Y, Z) - независимая переменная, измеренное значение и ошибка при измерении Y. Ошибка при измерении задана в виде абсолютной ошибки, то есть Z имеет ту же размерность, что и Y. Линия, начинающаяся с "#" считается комментарием и игнорируется.

# Data No. 1
2.1500E-02 1.3060E+00 5.3098E-02
2.3900E-02 1.2220E+00 4.7043E-02
2.6800E-02 1.3430E+00 4.9854E-02
2.9700E-02 1.2580E+00 4.5860E-02
3.2500E-02 1.2430E+00 4.4506E-02
 ....
9.4500E-01 1.2290E+00 3.7317E-02
1.0350E+00 1.2630E+00 4.1449E-02
1.1330E+00 1.2670E+00 4.2289E-02


# Data No. 2
2.4000E-02 1.2970E+00 3.1387E-02
4.0000E-02 1.3060E+00 2.8993E-02
6.0000E-02 1.2960E+00 2.8382E-02
8.0000E-02 1.3300E+00 2.8728E-02
 ....
7.0000E+00 1.2210E+00 2.5031E-02
7.2000E+00 1.1990E+00 2.5299E-02
7.4000E+00 1.1860E+00 2.5618E-02


# Data No.3
2.2500E-02 1.3310E+00 3.4606E-02
2.7500E-02 1.3370E+00 2.4066E-02
3.5000E-02 1.3440E+00 2.6880E-02
....
1.8936E+01 1.0080E+00 2.9232E-02
2.0064E+01 9.6300E-01 2.9853E-02
2.1296E+01 1.0310E+00 3.1961E-02

Эти три набора экспериментальных данных можно аппроксимировать уравнением y = -0.01687 x + 1.3512. Данные, по которым строится график функции, хранятся в файле plotexp.dat. Для доступа к каждому блоку данных отдельно используется ключевое слово index. Вы может выбрать первый блок командой index 0:0 или index 0. Для доступа к третьему блоку используется команда index 2. Для использования комбинации первого и второго блоков используется команда index 0:1.
Чтобы построить график с барами ошибки, используется команда with yerrorbars. Для этого требуется, чтобы данные об ошибках присутствовали в файле в виде третьего столбца, столбцы зажаются с помощью index 1:2:3. Если ошибка задана в процентах, using 1:2:($2*$3/100.0) конвертирует ее в абсолютную ошибку.

gnuplot> plot "plotexp.dat" index 0:0 using 1:2:3 with yerrorbars,\
> "plotexp.dat" index 1:1 using 1:2:3 with yerrorbars,\
> "plotexp.dat" index 2:2 using 1:2:3 with yerrorbars



Если команда слишком длинная, введите "\" в конце строки, тогда следующая строка будет обрабатываться как продолжение предыдущей. Gnuplot распознает сокращенные ключевые слова, например "w" вместо "with", "i" вместо "index" и так далее. Кроме того, вы можете пропускать название файла, если используется тот же файл, что и раньше. Например, в примере, приведенном выше, в следующих двух линиях после команды "plot" можно использовать короткую форму "" вместо полного имени файла "plotexp.dat".

Создание легенды

Три набора данных были получены тремя разными экспериментаторами. Их имена "A. Smith", "B. Smith" и "C. Smith", а эксперименты были выполнены соответственно в 1992, 1993 и 1999 годах.

gnuplot> plot "plotexp.dat" ind 0:0 usi 1:2:3 ti "A. Smith (1992)" w yerr,\
> "plotexp.dat" ind 1:1 usi 1:2:3 ti "B. Smith (1993)" w yerr,\
> "plotexp.dat" ind 2:2 usi 1:2:3 ti "C. Smith (1999)" w yerr


Построение графика аппроксимирующей функции

Для того, чтобы построить здесь же график аппроксимирующей линейной функции f(x) = -0.01687*x + 1.3512, ее сначала нужно объявить.

gnuplot> f(x)= -0.01687*x + 1.3512
gnuplot> plot f(x) with lines, \
> "plotexp.dat" ind 0:0 usi 1:2:3 ti "A. Smith (1992)" w yerr,\
> "plotexp.dat" ind 1:1 usi 1:2:3 ti "B. Smith (1993)" w yerr,\
> "plotexp.dat" ind 2:2 usi 1:2:3 ti "C. Smith (1999)" w yerr


В приведенном выше примере номера цветов сдвинуты на один, так как аппроксимирующая функция была вставлена первой.

Изменение стиля линии

Экспериментальные данные хорошо различаются по цветам, так как графики выводятся на экран. Однако при конвертировании в Postscript вы можете увидеть странный символ, приведенный ниже. В выводе Postscript линия 1 сплошная, а линии 2,3 и 4 пунктирные и точечные. Так что вы получите точечные бары ошибок.

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

gnuplot> set linestyle 1 lt 1 lw 3
gnuplot> set linestyle 2 lt 1 pt 7
gnuplot> set linestyle 3 lt 1 pt 8
gnuplot> set linestyle 4 lt 1 pt 9

Если у вас gnuplot версии новее, чем 3.8, то:


gnuplot> set style line 1 lt 1 lw 3
gnuplot> set style line 2 lt 1 pt 7
gnuplot> set style line 3 lt 1 pt 8
gnuplot> set style line 4 lt 1 pt 9

Первая линия определяет стиль линии №1 как сплошную линию с толщиной 3. Для второй -  четвертой линий используется такой же стиль, как и для экспериментальных данных. Тип линии сплошной, но используются символы №7,8 и 9.

gnuplot> f(x)= -0.01687*x + 1.3512
gnuplot> plot f(x) notitle with lines linestyle 1, \
> "plotexp.dat" ind 0:0 usi 1:2:3 ti "A. Smith (1992)" w yerr linestyle 2,\
> "plotexp.dat" ind 1:1 usi 1:2:3 ti "B. Smith (1993)" w yerr linestyle 3,\
> "plotexp.dat" ind 2:2 usi 1:2:3 ti "C. Smith (1999)" w yerr linestyle 4


Вставка названий осей

В приведенном выше графике легенда для линии аппроксимации была удалена с помощью ключевого слова notitle. Хотя на рисунке трудно разглядеть детали, так как они сливаются и цвет всех линий красный, этот недостаток исчезнет при выводе на печать.
Теперь вставим названия для осей X и Y. Ось X назовем "Energy [MeV]", а ось Y - "Cross Section [b]". Для их вставки используются команды set xlabel и set ylabel. Команда replot вызовет команду plot, введенную ранее, так что вам не придется заново вводить длинную команду.

gnuplot> set xlabel "Energy [MeV]"
gnuplot> set ylabel "Cross Section [b]"
gnuplot> replot



Подгонка интервалов 


Теперь зададим оптимальные интервалы для осей X и Y. Для оси Y установим минимальное значение 0 и максимальное 2. Слишком много точек данных имеют значения, близкие к нулю. Для увеличения их значений возьмем логарифмическую шкалу. Зададим минимальное значение по оси Х 0,01, наибольшее 20. Для создания логарифмической шкалы используется команда set logscale {x|y}.

gnuplot> set xrange [0.01:20]
gnuplot> set yrange [0:2]
gnuplot> set logscale x
gnuplot> replot


Градуировка шкалы

В заключение проградуируем оси. По оси X шкала логарифмическая, поэтому ее можно оставить без изменения. По оси X установим цену основных делений 1, и разделим их на 10 дополнительных делений. Кроме того, добавим координатную сетку для основных делений.

gnuplot> set ytics 1
gnuplot> set mytics 10
gnuplot> set grid
gnuplot> replot


Создание файла Postscript


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

gnuplot> set term postscript
gnuplot> set output "plotexp.ps"
gnuplot> replot
gnuplot> save "plotexp.plt"
gnuplot> quit




Не очень хорошо видно детали, так как размер изображения маловат. В любом случае, символ №7 - это закрашенный круг, №8 - незакрашенный треугольник, а №9 - закрашенный треугольник. Вид символов зависит от способа вывода. Postscript позволяет использовать большое количество различных символов, однако на практике обычно наиболее распространены окружности, треугольники, квадраты и т.д. Ниже приведена нумерация этих символов.

1+
2*
3крест
4пустой квадрат
5закрашенный квадрат
6пустой круг
7закрашенный круг
8пустой треугольник
9закрашенный треугольник
10пустой перевернутый треугольник
11закрашенный перевернутый треугольник
12пустой ромб
13закрашенный ромб

Комментариев нет:

Отправить комментарий