«Если ваш единственный инструмент — молоток, то каждая проблема становится похожей на гвоздь»
Абрахам Маслоу
Введение
Научное творчество само по себе процесс не тривиальный, требующий некоторого отрешения от внешнего мира. И нелинейный в плане распределения интенсивности во времени — порой проболтаешься впустую полгода, чтобы потом, в течение месяца-полутора решить большую часть беспокоящих тебя вопросов.
И вот, ты на 100% использовал возможности посетившей тебя «эврики», закончил основную работу и пришла пора опубликовать свои результаты в журнале, доложить их на конференции, да и просто порадовать своего научного руководителя/консультанта красивым отчетом. И ты приступаешь к мучительной фазе оформления статьи/доклада/отчета. И насколько мучительной будет эта фаза, зависит от того, какие инструменты ты решил использовать для этой работы.
Вспоминаю времена, когда молодым и глупым аспирантом, я писал первый вариант кандидатского «кирпича», предназначенный для тщательного «вычитывания» мной и моим научным руководителем. Тогда я не знал о формате EPS, а поэтому экспортировал графики, построенные в Maple в *.bmp-растр и вручную… обводил их в MS Visio для последующей вставки в Word. Были и другие, не менее топорные глупости. Не удивительно, что тогда я проклял всё, и дал себе слово следующую диссертацию писать совершенно по другому.
Путем последовательных итераций, на сегодняшний день я пришел к такому вот решению
И настало время отдать накопленный опыт людям. Интересующимся, добро пожаловать под кат
1. Gnuplot: что такое и с чем едят
Думаю, я не открою Америку, и читатель знаком с данной утилитой. Чтобы долго не рассказывать о ней, я приведу ряд ссылок, прежде всего на официальный сайт проекта, понижающие порог вхождения «Записки дебианщика», а так же весьма полезный ресурс с многочисленными примерами, ну и весьма неплохо оформленный FAQ на русском языке. Это поможет быстро войти в курс дела, тем, кто ещё не пробовал данный инструмент в работе.
Если коротко — Gnuplot — мощная утилита для построения графиков, заданных аналитическими зависимостями, таблично (экспериментальные данные и данные численного моделирования), поддерживающая командный режим работы и написание скриптов. Пользователям Linux достаточно установить пакет из репозиторя своего дистрибутива, пользователи Windows и OS X тоже могут установить данную утилиту, руководствуясь инструкцией на официальном сайте. Я же буду излагать, всё запланированное к изложению, на примере Linux.
Набираем в командной строке
$ gnuplot
G N U P L O T
Version 4.6 patchlevel 6 last modified September 2014
Build System: Linux x86_64
Copyright (C) 1986-1993, 1998, 2004, 2007-2014
Thomas Williams, Colin Kelley and many others
gnuplot home: http://www.gnuplot.info
faq, bugs, etc: type "help FAQ"
immediate help: type "help" (plot window: hit 'h')
Terminal type set to 'qt'
gnuplot>
Получая приглашение к вводу команд. Вводим, ну например
plot x**3 title 'Кубическая парабола y = x^3'
и получаем
Когда я увидел это впервые, я тоже сказал «Фууу...!» Это результат, полученный по умолчанию, и выглядит он как-то не солидно. Так никто не мешает его доработать. Прежде всего изменим цвет и толщину линии графика.
gnuplot> set style line 1 lt 1 lw 3 lc rgb '#4682b4' pt -1
plot x**3 title 'Кубическая парабола y = x^3' ls 1
Сделаем «школьные» оси, с точкой пересечения в начале координат, рисованные сплошными линиями
gnuplot> set xzeroaxis lt -1
gnuplot> set yzeroaxis lt -1
gnuplot> replot
Добавим сетку — пунктирные линии серого цвета
gnuplot> set grid xtics lc rgb '#555555' lw 1 lt 0
gnuplot> set grid ytics lc rgb '#555555' lw 1 lt 0
Перенесем метки оси к самим осям поближе
gnuplot> set xtics axis
gnuplot> set ytics axis
Изменим диапазон изменения аргумента
gnuplot> set xrange [-3:3]
и в конечном итоге получим вот это
что намного лучше первоначального варианта. Возможности кастомизации графиков просто шикарны, подробнее об этом можно прочесть по вышеприведенным ссылкам. Весь текст изложенный выше, предназначен для затравки, а речь пойдет о
2. Gnuplottex: интеграция графиков в документы LaTeX
Gnuplottex — пакет, входящий в поставку TeXlive, позволяющий вводить команды Gnuplot прямо в верстаемом документе. Не отвлекаясь на теоретизирование, приступим непосредсвенно к практике. Создадим новый документ
documentclass[12pt]{article}
% Подключаем всяко-разное, задаем кодировку, язык и прочие параметры по вкусу
usepackage[OT1,T2A]{fontenc}
usepackage[utf8]{inputenc}
usepackage[english,russian]{babel}
usepackage{amsmath,amssymb,amsfonts,textcomp,latexsym,pb-diagram,amsopn}
usepackage{cite,enumerate,float,indentfirst}
usepackage{graphicx,xcolor}
% Порядку для задаем размер полей страницы, дальше это нам пригодится
usepackage[left=2cm, right=2cm, top=2cm, bottom=2cm]{geometry}
% Включаем Gnuplottex
usepackage{gnuplottex}
begin{document}
section{Построение графиков Gnuplot в документе LaTeX}
end{document}
ВНИМАНИЕ! Сборка документа должна выполнятся с ключем -shell-escape, включающим возможность выполнения команд оболочки, либо так
$ pdflatex -shell-escape gnuplottex_rus.tex
либо задать этот ключик в настройках IDE (у меня это Kile)
Теперь, в теле документа будем ваять наш график
begin{figure}[h]
centering
begin{gnuplot}
plot x**3 title 'Кубическая парабола $y = x^3$'
end{gnuplot}
end{figure}
После сборки получая
Заметили что тут самое «вкусное»? Формула в подписи к графику выглядит по-человечески — вся мощь LaTeX в Вашем полном распоряжении. А теперь допилим это дело напильничком
begin{figure}[h]
centering
begin{gnuplot}
set terminal epslatex color size 12cm,15cm
set xzeroaxis lt -1
set yzeroaxis lt -1
set style line 1 lt 1 lw 4 lc rgb '#4682b4' pt -1
set grid ytics lc rgb '#555555' lw 1 lt 0
set grid xtics lc rgb '#555555' lw 1 lt 0
set xrange [-3:3]
plot x**3 title '$y = x^3$' ls 1
end{gnuplot}
end{figure}
Особо отметим команду
set terminal epslatex color size 12cm,15cm
Задающую тип терминала: EPS LaTeX с поддержкой цветного вывода; и его размер 12 х 15 см — Ваш рисунок и есть этот терминал. В итоге получаем график
Слегка изменим код, добавив еще один стиль линий и график
set style line 2 lt 1 lw 4 lc rgb '#aa0000' pt -1
.
.
.
plot x**3 title '$y = x^3$' ls 1,
x**4 title '$y = x^4$' ls 2
Видно, что нет принципиальной сложности в использовании рассматриваемой технологии. Можно добавить сюда же и трехмерный график
begin{figure}[h]
centering
begin{gnuplot}
set terminal epslatex color size 12cm,12cm
splot x**2 + y**3 with lines title '$z = x^2 + y^3$'
end{gnuplot}
caption{Трехмерный график сеткой}
end{figure}
Изменяем схему отображения с сетки на цветные полигоны
splot x**2 + y**3 with pm3d title '$z = x^2 + y^3$'
Настройку внешнего вида, выбор палитры — всё это можно почерпнуть из документации к Gnuplot, а мы переходим к следующему пункту программы
3. Построение графиков из файлов данных
В этом главная мощь данного инструмента. Пусть у вас имеется текстовый файл с данными, сформироваными следующим образом
# x y1 y2
0 0 0
1 1 1
2 4 8
3 9 27
4 16 64
первая колонка, например аргумент, вторая и третья — значения некоторых функций. Это может быть результат натурного эксперимента, или результат численного моделирования. Построение двухмерного графика будет выглядеть так
plot '<имя файла с данными>' using <колонка аргумента>:<колонка функции> title '<легенда>'
Колонки нумеруются начиная с единицы. Дабы не было скучно, приведу пример из своих документов. Создам в папке с данным учебным проектом каталог results/ и помещую туда файл с результатами численного эксперимента 2319.log (тут своя специфика именования логов...). Затем добавлю в наш проект такой код
begin{figure}
centering
begin{gnuplot}
set terminal epslatex color size 17cm,8cm
set xzeroaxis lt -1
set yzeroaxis lt -1
set xrange [0:20]
set style line 1 lt 1 lw 4 lc rgb '#4682b4' pt -1
set style line 2 lt 1 lw 4 lc rgb '#ee0000' pt -1
set style line 3 lt 1 lw 4 lc rgb '#008800' pt -1
set style line 4 lt 1 lw 4 lc rgb '#888800' pt -1
set style line 5 lt 1 lw 4 lc rgb '#00aaaa' pt -1
set style line 6 lt 1 lw 4 lc rgb '#cc0000' pt -1
set grid xtics lc rgb '#555555' lw 1 lt 0
set grid ytics lc rgb '#555555' lw 1 lt 0
set xlabel '$t$, c'
set ylabel '$P$, кН'
set key bottom right
plot 'results/2319.log' using 1:3 with lines ls 2 ti '$P_2$',
'results/2319.log' using 1:9 with lines ls 4 ti '$P_9$',
'results/2319.log' using 1:19 with lines ls 5 ti '$P_{19}$',
'results/2319.log' using 1:29 with lines ls 1 ti '$P_{29}$',
'results/2319.log' using 1:49 with lines ls 3 ti '$P_{49}$',
'results/2319.log' using 1:54 with lines ls 6 ti '$P_{53}$'
end{gnuplot}
caption{Продольные силы в различных сечениях поезда}
end{figure}
Команда
set key bottom right
помещает легенду в правый нижний угол поля графика, чтобы она не мешалась сверху и справа. Кроме того, команды Gnuplot и их параметры можно сокращать до степени однозначного трактования написания, как в этом примере: ti => title.
А теперь представьте себе, что вы сверстали диссертацию, но в последний момент Вам понадобилось подставить другие результаты тех же самых измерений. Не надо переверстывать графики — подмените файл результатов и пересоберите проект. Всё! Ваша верстка никуда не денется. Пять минут дела, если изменение данных не ведет к далеко идущим научным выводам :)
И последнее — если вы помещаете график на слайд Beamer, то окружение слайда должно содержать опцию fragile, иначе Вас ждет ошибка компиляции. Вот так
begin{frame}[fragile]
%
% Содержимое слайда
%
end{frame}
Заключение
Изучение вопроса заняло у меня весь вчерашний вечер. Презентацию пришлось верстать уже ночью, но я успел и сегодня успешно доложится (отчет по первому году докторантуры). В душе осталось теплое ощущение от возможности открытых технологий, помогающих в научном труде. По какому пути идти, каждый выбирает для себя сам. Статья носит обзорный характер и освещает только вопросы необходимые для быстрого старта. Остальное легко можно почерпнуть из документации.
Успехов в научном труде, и спасибо за внимание к моему.
Автор: maisvendoo