3

I'm trying to reproduce the following graph : Graph to reproduce

I've manage to get that but I don't know how to put the error bar : enter image description here

Does anybody know how can I do that ?

There is my current code.

\documentclass[11pt]{report}
\usepackage{tikz,pgfplots,pgfplotstable}
\usepackage{lipsum}

\usepackage{xcolor} \definecolor{bluereport}{RGB}{79, 129, 189}

\pgfplotsset{width=10cm, compat=1.9}

\begin{document}

\pgfplotstableread{ Label A B C D err.A err.B err.C err.D OP1 17 51 97 85 1.65 19.52 57.11 32.48 OP2 18 84 129 54 1.65 19.52 57.11 32.48 OP3 20 49 208 119 1.65 19.52 57.11 32.48 }\data

\begin{tikzpicture} \begin{axis}[ title style={align=center}, title = {my title}, ybar stacked, bar width=30pt, ytick={0, 60, 120, 180, 240, 300, 360, 420, 480}, ymax=480, xtick=data, xticklabels from table={\data}{Label}, ylabel={Time (min)}, enlargelimits=0.15, tickwidth= 5pt, ymajorgrids=true, grid style=dashed, legend style={at={(0.5,-0.15)}, legend style={/tikz/every even column/.append style={column sep=0.5cm}}, anchor=north, legend columns=-1}, ] \addplot [bluereport!90!black,fill=bluereport!100!white] table[y=A, meta=Label, x expr=\coordindex] {\data}; \addlegendentry{A}

\addplot [bluereport!95!white,fill=bluereport!75!white] table[y=B, meta=Label, x expr=\coordindex] {\data}; \addlegendentry{B}

\addplot [bluereport!70!white,fill=bluereport!50!white] table[y=C, meta=Label, x expr=\coordindex] {\data}; \addlegendentry{C}

\addplot [bluereport!45!white,fill=bluereport!25!white] table[y=D, meta=Label, x expr=\coordindex] {\data}; \addlegendentry{D}

\end{axis}
\end{tikzpicture}

\end{document}

Thank you for your help.

1 Answers1

2

Welcome! One needs to "unstack" the plots, for which one can use this solution, in order to add the error bars at the right vertical positions.

\documentclass[11pt]{report}
\usepackage{pgfplots}
\usepackage{pgfplotstable}

\definecolor{bluereport}{RGB}{79, 129, 189}

\pgfplotsset{width=10cm, compat=1.17}

\makeatletter% from https://tex.stackexchange.com/a/13665 \newcommand\resetstackedplots{% \pgfplots@stacked@isfirstplottrue } \makeatother \begin{document}

\pgfplotstableread{ Label A B C D err.A err.B err.C err.D OP1 17 51 97 85 1.65 19.52 57.11 32.48 OP2 18 84 129 54 1.65 19.52 57.11 32.48 OP3 20 49 208 119 1.65 19.52 57.11 32.48 }\data

\begin{tikzpicture} \begin{axis}[ title style={align=center}, title = {my title}, bar width=30pt, ytick={0, 60, 120, 180, 240, 300, 360, 420, 480}, ymax=480, xtick=data, xticklabels from table={\data}{Label}, ylabel={Time (min)}, enlargelimits=0.15, tickwidth= 5pt, ymajorgrids=true, grid style=dashed, legend style={at={(0.5,-0.15)}, legend style={/tikz/every even column/.append style={column sep=0.5cm}}, anchor=north, legend columns=-1}, ]

\addplot [ybar stacked,bluereport!90!black,fill=bluereport!100!white] table[y=A, meta=Label, x expr=\coordindex] {\data}; \addlegendentry{A}

\addplot [ybar stacked,bluereport!95!white,fill=bluereport!75!white] table[y=B, meta=Label, x expr=\coordindex] {\data}; \addlegendentry{B}

\addplot [ybar stacked,bluereport!70!white,fill=bluereport!50!white] table[y=C, meta=Label, x expr=\coordindex] {\data}; \addlegendentry{C}

\addplot [ybar stacked,bluereport!45!white,fill=bluereport!25!white] table[y=D, meta=Label, x expr=\coordindex] {\data}; \addlegendentry{D}

\resetstackedplots \pgfplotsinvokeforeach{A,B,C,D}{ \addplot[forget plot,draw=none,stack plots=y, error bars/.cd, y dir=both, y explicit] table[y=#1, x expr=\coordindex,y error expr=\thisrow{err.#1}] {\data};}

\end{axis} \end{tikzpicture}

\end{document}

enter image description here