pgfplots 中可能存在特定的误差线吗?

pgfplots 中可能存在特定的误差线吗?

对于包含大量点的图,如果每个点都有自己的误差线,则通常会显得非常拥挤。有没有一种简单的方法可以在 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}

相关内容