如何在 pgfplots 中的第一个点和最后一个点上绘制误差线?

如何在 pgfplots 中的第一个点和最后一个点上绘制误差线?

我有许多数据系列需要用误差线绘制,但由于它们可能在中间重叠,因此我只想显示第一个点和最后一个点的误差线。所有数据点的误差线都相同,因此显示第一个点和最后一个点就足以显示范围了。

\documentclass{standalone}

\usepackage{pgfplots}
\pgfplotsset{
    compat=1.12,
    every axis plot/.append style={
        error bars/y dir=both,
        error bars/x dir=both,
        error bars/x fixed=1,
        error bars/y fixed=1,
    },
}

\begin{document}
    \begin{tikzpicture}
        \begin{axis}
            \addplot coordinates {(1,1) (3,3) (5,5)};
            \addplot coordinates {(1,5) (3,3) (5,1)};
        \end{axis}
    \end{tikzpicture}
\end{document}

答案1

我们可以定义一种新样式来检查坐标索引并绘制相应坐标的误差线。据我所知,这适用于coordinatestable绘图类型。此代码基于 Jake 对pgfplots 中可能存在特定的误差线吗?请注意,\coordindex是从零开始的,但是\numcoords是从一开始的,所以我们必须从中减去 1\numcoords以确保我们得到最后一个点。

error bars/first last error bars/.style={
    /pgfplots/error bars/draw error bar/.prefix code={
        \pgfmathtruncatemacro\marknumbercheck{%
            or((\coordindex==0), (\coordindex==(\numcoords-1)))%*See the note
        }
        \ifnum\marknumbercheck=0
            \begin{scope}[opacity=0]
        \fi
    },
    /pgfplots/error bars/draw error bar/.append code={
        \ifnum\marknumbercheck=0
            \end{scope}
        \fi
    }
}

注意:最后一个括号实际上是不必要的,如之前链接的问答中所示。这是一个错误还是一个功能?


\documentclass{standalone}

\usepackage{pgfplots}
\pgfplotsset{
    compat=1.12,
    every axis plot/.append style={
        error bars/y dir=both,
        error bars/y fixed=1,
        error bars/first last error bars,
    },
    error bars/first last error bars/.style={
        /pgfplots/error bars/draw error bar/.prefix code={
            \pgfmathtruncatemacro\marknumbercheck{or((\coordindex==0), (\coordindex==(\numcoords-1)))}
            \ifnum\marknumbercheck=0
                \begin{scope}[opacity=0]
            \fi
        },
        /pgfplots/error bars/draw error bar/.append code={
            \ifnum\marknumbercheck=0
                \end{scope}
            \fi
        }
    },
}

\begin{document}
    \begin{tikzpicture}
        \begin{axis}
            \addplot coordinates {(1,1) (3,3) (5,5)};
            \addplot coordinates {(1,5) (3,3) (5,1)};
        \end{axis}
    \end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容