我想使用以下 Latex 代码在 PGFplots 中绘制误差线,但它没有显示任何错误,也没有显示任何误差线。
我知道我应该明确提到错误值,但是如果我不想手动计算每个点的误差(标准差),该怎么办。
任何有关此问题的帮助都将不胜感激。谢谢。
\documentclass[conference]{IEEEtran}
\ifCLASSINFOpdf
\else
\fi
\hyphenation{op-tical net-works semi-conduc-tor}
\usepackage[pdftex]{graphics}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepgfplotslibrary{dateplot}
\usepgfplotslibrary{patchplots}
\pgfplotsset{compat=1.7}
\pgfplotsset{footnotesize,samples=10}
\begin{figure}[t]
\centering
\begin{tikzpicture}
\begin{axis}[ % The height and width argument only apply to the actual axis
title style={at={(0.3,0.2)},anchor=north,yshift=-0.1},
title =\textbf{Correlation= 0.672658953},
height=5cm,
width=8cm,
legend style={at={(0.5,1.3)},anchor=north},
ylabel={PDR},
xlabel={LQI},
xmin=85, xmax=120,
ymin=80, ymax=100,
xtick= {85,90,95,100,105,110,115,120},
ytick= {80,85,90,95,100},
legend columns=4,
ymajorgrids=true,
grid style=dashed,
]
\addplot[
mark=o,
mark size=1.4pt,
only marks,
]
plot [error bars/.cd, y dir = both, y explicit]
coordinates {
(104, 97)(98 ,97)(105, 98)(103, 97)(104, 98)(85 ,80)(91 ,86)(103, 97)(105, 98)
};
%\label{plot_two}
%\addlegendentry{id-05m-hor}
\addplot[
mark size=1.4pt,
only marks,
mark=o,
]
plot [error bars/.cd, y dir = both, y explicit]
coordinates {
(107, 100)(106, 100)(106, 99)(106, 99)(106, 99)(120, 97)(102, 95)(104, 97)(105, 98)
};
%\addlegendentry{id-05m-ver}
\addplot[
mark=o,
mark size=1.4pt,
only marks,
]
plot [error bars/.cd, y dir = both, y explicit]
coordinates {
(106, 98)(106, 98)(107, 99)(106, 98)(104, 86)(103, 97)(104, 98)(105, 99)(105, 97)
};
%\addlegendentry{id-15m-hor}
\addplot[
mark=o,
mark size=1.4pt,
only marks,
]
plot [error bars/.cd, y dir = both, y explicit]
coordinates {
(104, 97)(106, 99)(105, 98)(106, 98)(104, 98)(105, 98)(105, 98)(104, 98)(105, 88)
};
%\addlegendentry{id-15m-ver}
\addplot[
mark=o,
mark size=1.4pt,
only marks,
]
plot [error bars/.cd, y dir = both, y explicit]
coordinates {
(107, 97)(107, 95)(107, 90)(106, 96)(107, 97)(106, 96)(106, 97)(106, 96)(106, 96)(107, 55)(106, 97)(107, 96)
};
%\label{plot_two}
%\addlegendentry{od-05m-hor}
\addplot[
mark=o,
mark size=1.4pt,
only marks,
]
plot [error bars/.cd, y dir = both, y explicit]
coordinates {
(106,97)(106,97)(107,97)(107,95)(107,97)(107,97)(106,97)(107,95)(105,96)(107,97)(106,97)(107,97)
};
%\addlegendentry{od-05m-ver}
\addplot[
mark=o,
mark size=1.4pt,
only marks,
]
plot [error bars/.cd, y dir = both, y explicit]
coordinates {
(107,98)(107,97)(107,97)(106,97)(106,97)(106,97)(106,99)(107,99)(106,97)(104,99)(106,98)(106,49)
};
%\addlegendentry{od-15m-hor}
\addplot[
mark=*,
mark size=1.4pt,
only marks,
]
plot [error bars/.cd, y dir = both, y explicit]
coordinates {
(106,94)(107,97)(106,96)(107,97)(106,97)(106,97)(107,98)(107,96)(106,100)(102,96)(106,97)(106,99)
};
%\addlegendentry{od-15m-ver}
\end{axis}
\end{tikzpicture}
\end{figure}
答案1
请参阅第 4.12 节误差线在pgfplots
手册中。
当你说 时y explicit
,你需要在坐标流中单独指定每个点的误差值。例如
(107,100) +- (0,2)
表示 y 误差为 2,x 误差为 0。我认为您必须指定两者,即使您只使用 y 误差。
但是,如果你想对图中的所有点使用相同的误差值,则可以使用y fixed=<value>
而不是y explicit
。例如,
\addplot+ [
error bars/.cd,
y dir=both,
y fixed=1
] ...
给出图中所有点的 y 误差 1。但我认为没有内置方法来获取绘制数据的标准差,因此如果您想要得到标准差,则需要先计算它,然后使用计算y fixed
出的值。
无关评论:
你为什么要用这个?
\addplot [<some options>] plot[<other options>] ...
您正在将pgfplots
语法与普通的 TikZ 语法混合使用,正确的方法是将所有选项放在同一组括号中,而不是使用关键字plot
,即
\addplot [<all options>] ...