# Colouring bars depending on a given label with PGFPlots

I have this code.

\begin{figure}
\begin{tikzpicture}
\begin{axis}[
title style={yshift=1.3ex},
y tick label style={
/pgf/number format/precision=2,
/pgf/number format/fixed,
/pgf/number format/fixed zerofill,},
ymin=0,
xtick={1,2},xticklabels={Monitored,Non-monitored},
enlarge x limits=0.15,
ylabel=Duration in seconds,
ybar,
bar width=25pt,
]
error bars/.cd,
y dir=both,
y explicit
]
table [y error=error] {
x   y           error       label
1   113.68      1.64        1
2   110.41      1.72        2
};
\end{axis}
\end{tikzpicture}
\caption{Overhead introduced by monitoring and storing the traces versus non-monitoring. As we can see the latency is minimum }
\label{fig:ovmonitoring}
\end{figure}


The result is

However I want to have a different color for the bar on the right (label=2). I have seen examples in the documentation with scatter plots but I cannot find anything with bars. How can I color each bar depending on the label?

If you don't mind to draw as many \addplot commands as you have labels then you can do the following. (For more details on how the solution works, please have a look at the comments in the code.)

% used PGFPlots v1.14
% (inspired by <http://tex.stackexchange.com/a/58563/95441>)
% store data in a file
% (currently this solution doesn't seem to work when the table is
%  either given to the \addplot' command directly or if it is stored
%  with \pgfplotstableread)
\begin{filecontents}{test.txt}
x   y           error       label
1   113.68      1.64        1
2   110.41      1.72        2
\end{filecontents}
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{
compat=1.3,
% create filter that discards all entries from the table row
% given as first argument of this style with the value not equal
% to the second argument of this style
% suppress LOG messages about the filtered points
x filter/.code={
\edef\tempa{\thisrow{#1}}
\edef\tempb{#2}
\ifx\tempa\tempb
\else
\def\pgfmathresult{inf}
\fi
},
},
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ymin=0,
xtick={1,...,2},
xticklabels={
Monitored,
Non-monitored,
},
enlarge x limits=0.15,
ylabel=Duration in seconds,
ybar,
bar width=25pt,
% don't shift the bars
bar shift=0pt,
]
% then cycle through each row of the data table and plot it
% while using the created filter discard if not'
\pgfplotsinvokeforeach {1,...,2}{