pgfplots 中 \foreach 循环组合的问题

pgfplots 中 \foreach 循环组合的问题

我在绘制具有定义偏移的多条线时遇到了问题。有多个 y 值,我不想复制每个命令,因此我尝试对 和 进行 fory index循环shift

使用当前代码,我得到了所有移位数据的图。

\documentclass[border=5pt,tikz]{standalone}

\usepackage{
    pgfplots,
    pgfplotstable,
    filecontents
}

\begin{filecontents}[overwrite]{test.txt}
    0   0.87    0.21    0.64    0.49    0.40    0.94
    1   0.67    0.74    0.86    0.19    0.86    0.83
    2   0.87    0.34    0.49    0.32    0.59    0.92
    3   0.25    0.09    0.76    0.35    0.27    0.29
    4   0.27    0.52    0.91    0.64    0.67    0.46
    5   0.34    0.44    0.45    0.56    0.51    0.67
\end{filecontents}

\def\xmin{0}
\def\xmax{5}
\def\ymin{0}
\def\ymax{6}
\def\shift{1}

\begin{document}
    
    \begin{tikzpicture}
        
        \begin{axis}[
            ymin=\ymin,
            ymax=\ymax,
            xmin=\xmin,
            xmax=\xmax,
            restrict y to domain=\xmin:\xmax,
            restrict y to domain=\ymin:\ymax,
            enlargelimits=0.1
            ]           
            \pgfplotsinvokeforeach{0,1,...,5}{
                \foreach \i in {1,2,...,6}{
                    \addplot[
                    color=black,
                    smooth,
                    shift={(axis direction cs:0,#1*\shift)},
                    ]
                    table[
                    x index=0, 
                    y index=\i,
                    ]{test.txt};
                }
            }       
        \end{axis}  
    \end{tikzpicture}
\end{document}

测试图片

有没有办法在 for 循环中绘制每条线一次并相互移动?

编辑:

为了清楚起见:我想以一定的偏移单独绘制每条线。

目标

答案1

在查看 PgfPlots 手册时,我找到了该问题的解决方案:

\pgfplotsforeachungrouped \i/\j in {0/1,1/2,2/3,3/4,4/5,5/6}{
    \edef\temp{
        \noexpand
        \addplot[
        color=black,
        smooth,
        shift={(axis direction cs:0,\i*\shift)},
        ]
        table[
        x index=0, 
        y index=\j,
        ]{test.txt};
    }\temp
}

在这里,您必须单独输入每个索引,如果数据量较大,这可能会有点麻烦。所以如果有人知道“更简单”的解决方案,请告诉我。

相关内容