Оформлення наукових результатів: інтеграція LaTeX і Gnuplot

«Якщо ваш єдиний інструмент — молоток, кожна проблема стає схожою на цвях»

Абрахам Маслоу



Введення

Наукова творчість саме по собі процес не тривіальний, вимагає деякого відмови від зовнішнього світу. І нелінійний в плані розподілу інтенсивності в часі — часом проболтаешься даремно півроку, щоб потім, протягом місяця-півтора вирішити більшу частину турбують тебе питань.

І ось ти на 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 © 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,ukrainian]{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 17см,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}


Висновок

Вивчення питання зайняло у мене весь вчорашній вечір. Презентацію довелося верстати вже вночі, але я встиг і сьогодні успішно доложится (звіт по першому році докторантури). В душі залишилося тепле відчуття від можливості відкритих технологій, що допомагають у науковій праці. По якому шляху йти, кожен вибирає для себе сам. Стаття носить оглядовий характер і висвітлює лише питання необхідні для швидкого старту. Решта легко можна почерпнути з документації.

Успіхів у науковій праці, і дякую за увагу до мого.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.