对于包含大量点的图,如果每个点都有自己的误差线,则通常会显得非常拥挤。有没有一种简单的方法可以在 pgfplots 中仅绘制某些误差线?除了绘制两次数据外,我找不到任何其他选项。简而言之:是否有类似命令error mark indices
或类似选项可以影响错误标记的绘制?
这是我的 MWE,它基本上应该是这样的:
\documentclass[tikz,preview]{standalone}
\usepackage{tikz,pgfplots,filecontents}
\pgfplotsset{compat=1.7}
\begin{filecontents*}{data.dat}
X Y Y_error
1 1.39 0.1
2 2.44 0.1
3 3.62 0.1
4 4.81 0.1
\end{filecontents*}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
clip mode=individual,
]
\addplot+[each nth point=4,forget plot,error bars/.cd,y dir=both,y explicit]
table[x=X,y=Y,y error=Y_error] {data.dat};
\addplot+[] table[x=X,y=Y,y error=Y_error] {data.dat};
% these command do not seem to exist:
% error mark repeat=4
% error mark indices={1}
\end{axis}
\end{tikzpicture}
\end{document}
答案1
该密钥尚不存在,但您可以相对轻松地创建自己的密钥。您可以挂接到密钥中draw error bar/.code
以检查当前误差线数字是否可以被某个数字整除,如果不能,则将误差线的不透明度设置为 0。要检查误差线数字,您必须引入一个在每条误差线之后步进的新计数器。
然后你可以说
\addplot+[
error bars/.cd,
y dir=both,
y explicit,
every nth mark=3
] table[x=X,y=Y,y error=Y_error] {data.dat};
要得到
或每第 n 个标记=2
要得到
这是相关的代码块:
\newcounter{marknumber}
\pgfplotsset{
error bars/every nth mark/.style={
/pgfplots/error bars/draw error bar/.prefix code={
\pgfmathtruncatemacro\marknumbercheck{mod(floor(\themarknumber/2),#1)}
\ifnum\marknumbercheck=0
\else
\begin{scope}[opacity=0]
\fi
},
/pgfplots/error bars/draw error bar/.append code={
\ifnum\marknumbercheck=0
\else
\end{scope}
\fi
\stepcounter{marknumber}
}
}
}
这是一个完整的示例文档:
\documentclass[tikz,preview, border=5mm]{standalone}
\usepackage{tikz,pgfplots,filecontents}
\pgfplotsset{compat=1.7}
%%% Code for "every nth mark" starts here...
\newcounter{marknumber}
\pgfplotsset{
error bars/every nth mark/.style={
/pgfplots/error bars/draw error bar/.prefix code={
\pgfmathtruncatemacro\marknumbercheck{mod(floor(\themarknumber/2),#1)}
\ifnum\marknumbercheck=0
\else
\begin{scope}[opacity=0]
\fi
},
/pgfplots/error bars/draw error bar/.append code={
\ifnum\marknumbercheck=0
\else
\end{scope}
\fi
\stepcounter{marknumber}
}
}
}
%%% ... and ends here
\begin{filecontents*}{data.dat}
X Y Y_error
1 1.39 0.5
2 2.44 0.5
3 3.62 0.5
4 4.81 0.5
5 1.39 0.5
6 2.44 0.5
7 3.62 0.5
8 4.81 0.5
\end{filecontents*}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
clip mode=individual,
]
\addplot+[
error bars/.cd,
y dir=both,
y explicit,
every nth mark=2
] table[x=X,y=Y,y error=Y_error] {data.dat};
\end{axis}
\end{tikzpicture}
\end{document}