0

I'm plotting pH results from an experiment and the measurement uncertainty is ± 0.1.

\documentclass[10pt]{standalone}
\usepackage{pgfplots}
\usepackage{siunitx}
\usepackage{tikz}
\usepackage{mhchem}
\usetikzlibrary{patterns}
\pgfplotsset{compat=1.16}
\definecolor{mygray}{HTML}{c7c7c7}
\definecolor{myblue}{HTML}{4385f5}
\definecolor{myred}{HTML}{ea4136}
\definecolor{myorange}{HTML}{fcbc05}
\begin{document}
\begin{tikzpicture}
  \centering
  \begin{axis}[
    ybar=0pt, enlarge x limits=0.25, legend style={at={(0.5,-0.15)},anchor=north,legend columns=-1,/tikz/every even column/.append style={column sep=0.1cm}}, legend style={draw=none,/tikz/every even column/.append style={column sep=0.3cm}},
height=6cm, width=11cm,
        ymajorgrids, tick align=inside,        
        ymin=0, ymax=14,
        ytick={0,2,4,...,14},        
        ylabel={pH},
        y axis line style={opacity=0},
        tickwidth=0pt,
        ylabel={pH},
        symbolic x coords={Reference, Aabach, Kleine Emme, Grosse Aa},
       xtick=data,
       nodes near coords,every node near coord/.append style={font=\tiny},
       bar width=13pt,
                  cycle list={        
           {fill=mygray,draw=black},           
           {fill=myred,draw=black},
           {fill=myblue,draw=black},    
    {fill=myorange,draw=black}}
    ]
\addplot coordinates {(Reference,7.3) (Aabach,8.5) (Kleine Emme, 8.2) (Grosse Aa, 8.1)};
\addplot coordinates {(Reference,7.8) (Aabach,8.5) (Kleine Emme, 8.3) (Grosse Aa, 8.3)};
\addplot coordinates {(Reference,7.8) (Aabach,8.4) (Kleine Emme, 7.9) (Grosse Aa, 8.2)};
\addplot coordinates {(Reference,7.8) (Aabach,7.8) (Kleine Emme,7.7) (Grosse Aa,7.8)};
    \legend{NT, DN, SYF, NAF}

                \addplot+ [ %from https://tex.stackexchange.com/questions/470674/adding-error-bars-to-bar-plot and https://tex.stackexchange.com/questions/424758/plotting-error-bars-in-pgf-plots
            error bars/.cd,
                y dir=both,
                y fixed=0.1,
        ] coordinates {
            (Reference,7.3) +- (0,0.1)
            (Kleine Emme,7.9) +- (0,0.1)
        };
  \end{axis}
  \end{tikzpicture}
\end{document}

The problem with the code is that duplicate bars are created: error bars

How can have only four bars per x-tick, each with a error bar?

1 Answer 1

1

Instead of adding another \addplot command to draw an/the error bar(s) -- this adds the bar you don't want, you need to add the "error bar" stuff to each of the previous \addplot command. To not repeat yourself over and over again you can also add these options to the axis options.

For details have a look at the comments in the code.

% used PGFPlots v1.16
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
    \pgfplotsset{compat=1.3}
    \definecolor{mygray}{HTML}{c7c7c7}
    \definecolor{myblue}{HTML}{4385f5}
    \definecolor{myred}{HTML}{ea4136}
    \definecolor{myorange}{HTML}{fcbc05}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        ybar=0pt,
        enlarge x limits=0.25,
        % (merged both styles)
        legend style={
            at={(0.5,-0.15)},
            anchor=north,
            legend columns=-1,
            draw=none,
            /tikz/every even column/.append style={column sep=0.3cm},
        },
        height=6cm,
        width=11cm,
        ymajorgrids,
        tick align=inside,
        ymin=0,
        ymax=14,
        ytick distance=2,       % <-- (changed)
        ylabel={pH},
        y axis line style={opacity=0},
        tickwidth=0pt,
        ylabel={pH},
        symbolic x coords={Reference, Aabach, Kleine Emme, Grosse Aa},
        xtick=data,
        nodes near coords,
        every node near coord/.append style={font=\tiny},
        bar width=13pt,
        cycle list={
            {fill=mygray,draw=black},
            {fill=myred,draw=black},
            {fill=myblue,draw=black},
            {fill=myorange,draw=black}%
        },
        error bars/y dir=both,      % <-- added
        error bars/y fixed=0.1,     % <-- added
    ]
        \addplot coordinates {(Reference,7.3) (Aabach,8.5) (Kleine Emme,8.2) (Grosse Aa,8.1)};
        \addplot coordinates {(Reference,7.8) (Aabach,8.5) (Kleine Emme,8.3) (Grosse Aa,8.3)};
        \addplot coordinates {(Reference,7.8) (Aabach,8.4) (Kleine Emme,7.9) (Grosse Aa,8.2)};
        \addplot coordinates {(Reference,7.8) (Aabach,7.8) (Kleine Emme,7.7) (Grosse Aa,7.8)};

        \legend{NT, DN, SYF, NAF}
    \end{axis}
\end{tikzpicture}
\end{document}

image showing the result of above code

2
  • Thanks. How can I change the error bar to a relative number i.e. 5%? Would it be relative=0.05 instead of fixed?
    – Max R
    Aug 6, 2019 at 11:54
  • 1
    It was fixed relative (p. 316 from pgfplots manual)
    – Max R
    Aug 6, 2019 at 12:11

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .