# Infrared data plot

This plot is a demonstration example. It bases on infrared data from a chemical experiment. Detailed explanation abut the plot setup is included.

% This is a 'standalone' plot, so uses the standalone class
\documentclass[border=5pt]{standalone}
% A bit of font set-up: use Latin Modern and T1 encoding
\usepackage[T1]{fontenc}
\usepackage{lmodern}

% For typesetting units
\usepackage{siunitx}

% Making plots, so load the pgfplots package of course!
\usepackage{pgfplots}

% Use the latest settings, so we don't get trapped with old bugs or
% limited features.

% A short list of colours which run from pure blue to pure red:
% eleven steps which is about right for this typo of plot.
\pgfplotscreateplotcyclelist{blue to red}{%
color=blue\\%
color=red!10!blue\\%
color=red!20!blue\\%
color=red!30!blue\\%
color=red!40!blue\\%
color=red!50!blue\\%
color=red!60!blue\\%
color=red!70!blue\\%
color=red!80!blue\\%
color=red!90!blue\\%
color=red\\%
}

% Turn off the default comma separator for larger numbers
\pgfkeys{
/pgf/number format/set thousands separator =
}

% Create a couple of style to allow control of the settings.
% First, create some very general settings for infra-red data.
% Then, use that and additional settings to specify what happens
% for a difference plot such as this one.
\pgfplotsset{
infra-red/.style =
{
% Chemists always plot infra-red data with the x-axis 'backward'.
% Physicists work the other way: using a setting here makes it easy
% to flip things round.
x dir  = reverse,
% The labels apply to all plots of this type.
xlabel = $\tilde{\nu}/\si{\per\cm}$,
ylabel = $\mathrm{Milliabsorbance}$,
},
infra-red difference/.style =
{
% The settings here inherit from the more general infra-red plot.
infra-red,
% Use the 'controlled' colour change.
cycle list name     = blue to red,
% For difference plots, a line showing the zero is useful. This
% is done by making an additinal grid line.
extra y ticks       = 0,
extra y tick labels = \empty,
extra y tick style  = { grid = major },
% Since this is a difference, the y-axis needs a modified label.
ylabel              = $\Delta \mathrm{Milliabsorbance}$,
}
}

% Not everyone likes the 'axis box' effect, which can be turned off by
% uncommenting these two lines. As such a change should (probably) apply to all
% of the plots in a document, this is not tied to a particular plot style.
\pgfplotsset{
%  axis x line* = bottom ,
%  axis y line* = left
}

\begin{document}
\begin{tikzpicture}
\begin{axis}%
[
% Choose the general settings
infra-red difference,
% Specify the x range
xmax = 2100,
xmin = 1800,
% Set the maximum y value: this is needed for the labels that will be
ymax = 3
]
% Use a \foreach to seleect data from the raw experimental data:
% this makes it easy to plot only some of the lines.
\foreach \yindex in {2,3,...,11}
\addplot table[y index = \yindex] {\jobname.txt};
% Adding labels to the peaks: as the text and the horizontal positions
% are the same, this can be automated. Notice that \foreach does not
% work here!
\pgfplotsinvokeforeach{1900,1948,1989,2031}%
{
% Each label is done as a 'pin' with the text rotated so it is
% vertical. The height has to be set by hand (it's "1.3" here), and
% to make sure the labels actually show up the ymax key was set
% earlier, again using hand adjustment.
\node[coordinate, pin = {[rotate=90]right:#1}] at
(axis cs:#1,1.3) { };
}
\end{axis}
\end{tikzpicture}
\end{document}