我处于需要在 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}