向 pgfplot 添加不同长度的误差线?

向 pgfplot 添加不同长度的误差线?

我处于需要在 pgfplots 散点图中添加误差线的情况,如此链接中显示的示例所示:例子

我目前的代码如下所示,它生成了一个简单的散点图。我的问题是我需要每个数据点的左、右、上、下不同长度的误差线。我在网上发现,只需在表参数中添加“error=xxx”就会在数据点的上方和下方创建相同长度的误差线,但我需要它们的长度不同,我还需要水平线。

    \begin{tikzpicture}[trim axis left, trim axis right]
    \begin{axis}[
        xlabel={Voltage /V},
        ylabel={Current /mA},
        ylabel near ticks, yticklabel pos=left,
        axis y line*=left,
        xmin=0,
        xmin=10,
        ymin=0,
        ymax=10,
    ]
    \addplot+[mark size=1pt,mark options=blue,blue] table[x=V,y=mA] {Graphs/graphdata.dat}
    node [pos=0.9,anchor=south west,text=black] {};
    \label{examplegraph}
    \end{axis}%
\end{tikzpicture}%

任何帮助都将不胜感激。非常感谢。

答案1

实际上,这比人们想象的要困难得多。查阅手册后,没有直接明显的选项可以使用表格数据和不对称误差线。但有坐标选项。如果您没有很多数据点,您可能需要使用手册中的坐标解决方案。

否则,可以选择用一组误差线绘制数据,然后仅使用“缺失”误差线重新绘制相同的数据集。

这是一个例子。希望对你有帮助。

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}

\begin{filecontents}{graphdata.dat}
    V   xerr1   xerr2   mA  yerr1   yerr2
    1   0.7 0.2 4   0.5 0.15
\end{filecontents}

\begin{document}
    \begin{tikzpicture}
    \begin{axis}[
        xlabel={Voltage /V},
        ylabel={Current /mA},
        ylabel near ticks, yticklabel pos=left,
%       axis y line*=left,
        xmin=0,
        xmax=5,
        ymin=2,
        ymax=5,
        ]
        % Using table (but plotting twice)
        \addplot+[mark size =1pt,blue,error bars/.cd,x dir=plus, x explicit,y dir=plus, y explicit] table[x=V,y=mA,x error=xerr1,y error =yerr1] {graphdata.dat};
        \addplot+[no markers,blue,error bars/.cd,x dir=minus, x explicit,y dir=minus, y explicit] table[x=V,y=mA,x error=xerr2,y error =yerr2] {graphdata.dat};
        
        % Approach using coordinates
        \addplot+[mark size = 1pt, blue,error bars/.cd,x dir=both, x explicit,y dir=both, y explicit] coordinates {(3,2.5) +=(0.7,0.5) -=(0.2,0.15)};
    \end{axis}%
\end{tikzpicture}%
\end{document}

请注意,当您使用包含真实数据的大型数据集时,这可能需要一段时间才能编译。

答案2

这可以非常直接地完成。我想代码是不言自明的。

% used PGFPlots v1.17
% (based on Markus G. answer <https://tex.stackexchange.com/a/587885/95441>)
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
    \begin{filecontents}{graphdata.dat}
        V   xerr1   xerr2   mA  yerr1   yerr2
        1   0.7     0.2     4   0.5     0.15
    \end{filecontents}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        error bars/x dir=both,
        error bars/y dir=both,
        error bars/x explicit,
        error bars/y explicit,
    ]
        \addplot table [
            x=V,
            y=mA,
            x error plus=xerr1,
            x error minus=xerr2,
            y error plus=yerr1,
            y error minus=yerr2,
        ] {graphdata.dat};
    \end{axis}
\end{tikzpicture}
\end{document}

该图显示了上述代码的结果

相关内容