如何随数据条一起移动误差线?

如何随数据条一起移动误差线?

我正在尝试创建一个包含两个条形图的图形,其中条形以两两分组。我使用bar widthbar shift来分隔条形。我的问题是我想在这些图中添加误差线,但我不知道如何添加它们跟随我得到的只是几条条形图(很好!),但它们之间却有几条误差条(尴尬!)。

我怎么能把误差线放在中间呢?数据无需手动移动它们?

我目前的尝试:

\documentclass{article}

\usepackage{pgfplots}
\usepackage{pgfplotstable}

\begin{document}

    \begin{tikzpicture}

    \pgfplotstableread{
    1 4   0.2  0.1
    2 4.2 0.1  0.5
    3 3.1 0.3  0.4
    4 2.5 0.25 0.35
    }\tablei

    \pgfplotstableread{
    1 3.5 0.1  0.3
    2 3.8 0.2  0.2
    3 4.0 0.25 0.25
    4 3.0 0.3  0.5
    }\tablet

    % Bar styles
    \pgfplotsset{shifti/.style={mark=no markers, bar width=4pt, bar shift=3pt}}
    \pgfplotsset{shiftt/.style={mark=no markers, bar width=4pt, bar shift=-3pt}}

    % Error styles
    \pgfplotsset{err/.style={forget plot, draw=none}} 
    \pgfplotsset{errp/.style={err, error bars/.cd,x dir=plus,  x explicit}}
    \pgfplotsset{errm/.style={err, error bars/.cd,x dir=minus, x explicit}}

    \begin{axis}[%
    /pgfplots/table/header=false,
    scale only axis,
    width=12cm,
    height=8cm,
    axis on top]

    \addplot+[xbar, shifti] table[x index=1, y index=0]{\tablei};
    \addplot+[no markers, errm] table[x index=1, y index=0, x error index=2]{\tablei};
    \addplot+[no markers, errp] table[x index=1, y index=0, x error index=3]{\tablei};

    \addplot+[xbar, shiftt] table[x index=1, y index=0]{\tablet};
    \addplot+[no markers, errm] table[x index=1, y index=0, x error index=2]{\tablet};
    \addplot+[no markers, errp] table[x index=1, y index=0, x error index=3]{\tablet};

    \end{axis}
    \end{tikzpicture}

\end{document}

答案1

正确定位误差线的最简单方法是使用yshift=<value>来将误差线向上或向下移动。如果您使用<value>与 相同的方法bar shift,误差线将正确定位。在这种情况下,“适当的”自动解决方案需要支持不对称误差线,而 当前无法实现pgfplots。可能值得打开一个功能要求为了这。

\documentclass{article}

\usepackage{pgfplots}
\usepackage{pgfplotstable}

\begin{document}

\begin{figure}
    \begin{tikzpicture}

    \pgfplotstableread{
    1 4   0.2  0.1
    2 4.2 0.1  0.5
    3 3.1 0.3  0.4
    4 2.5 0.25 0.35
    }\tablei

    \pgfplotstableread{
    1 3.5 0.1  0.3
    2 3.8 0.2  0.2
    3 4.0 0.25 0.25
    4 3.0 0.3  0.5
    }\tablet

    % Bar styles
    \pgfplotsset{shifti/.style={mark=no markers, bar width=4pt, bar shift=3pt}}
    \pgfplotsset{shiftt/.style={mark=no markers, bar width=4pt, bar shift=-3pt}}

    % Error styles
    \pgfplotsset{err/.style={forget plot, draw=none}} 
    \pgfplotsset{errp/.style={err, black, error bars/.cd,x dir=plus,  x explicit}}
    \pgfplotsset{errm/.style={err, black, error bars/.cd,x dir=minus, x explicit}}

    \begin{axis}[%
    /pgfplots/table/header=false,
    scale only axis,
    width=12cm,
    height=8cm,
    axis on top]

    \addplot+[xbar, shifti] table[x index=1, y index=0]{\tablei};
    \addplot+[no markers, yshift=3pt, errm] table[x index=1, y index=0, x error index=2]{\tablei};
    \addplot+[no markers, yshift=3pt, errp] table[x index=1, y index=0, x error index=3]{\tablei};

    \addplot+[xbar, shiftt] table[x index=1, y index=0]{\tablet};
    \addplot+[no markers, yshift=-3pt, errm] table[x index=1, y index=0, x error index=2]{\tablet};
    \addplot+[no markers, yshift=-3pt, errp] table[x index=1, y index=0, x error index=3]{\tablet};

    \end{axis}
    \end{tikzpicture}

\end{figure}

\end{document}

相关内容