pgfmathsetmacro 在不应该改变时发生改变,反之亦然

pgfmathsetmacro 在不应该改变时发生改变,反之亦然

我尝试动态生成组图。一般来说,除了从表中提取的变量外,这种方法有效。

\documentclass{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{groupplots}
\pgfplotsset{compat=1.13}
\begin{document}

\pgfplotstableread[row sep=crcr]{
    1   -1  \\
    2   -2  \\
    3   3   \\
    4   4   \\
}\mytable

\pgfplotstablegetrowsof\mytable
\pgfmathsetmacro\numberofrows{\pgfplotsretval}

\begin{tikzpicture}
\begin{groupplot}[height=4cm, group style={group size=2 by \numberofrows}]

    \pgfmathsetmacro{\numberofrows}{\numberofrows-1}
    \pgfplotsinvokeforeach{0,...,\numberofrows}{

        \pgfplotstablegetelem{#1}{[index]0}\of\mytable
        \pgfmathtruncatemacro{\numberofsample}{\pgfplotsretval}

        \pgfplotstablegetelem{#1}{[index]1}\of\mytable
        \pgfmathsetmacro{\valueofsample}{\pgfplotsretval}

        \nextgroupplot
            \addplot {\valueofsample};
            \node [anchor=north west] at (rel axis cs: 0.05,0.95) {sample=\numberofsample};

        \nextgroupplot
            \addplot {\valueofsample};
            \node [anchor=north west] at (rel axis cs: 0.05,0.95) {sample=\numberofsample};     % numberofsample has changed?!?
    }
\end{groupplot}
\end{tikzpicture}

\end{document}

此代码应生成 2 x N 组图。变量\numberofsample(表格的第一列)以及\valueofsample(表格的第二列)应按行变化,并应在列中保持不变。相反,它会产生以下不确定的输出:

MWE 的输出

\valueofsample从来没有改变,而且\numberofsample变得疯狂?!?

答案1

这不是您想要的输出,但它演示了如何克服您询问的特定问题。我不知道如何仅从 4 个单个值创建 8 个图。我创建了 4 个图,将每个值作为单个点的 y 坐标,x 坐标为 0。

您需要全局保存定义并完全展开它们才能使其工作,并且您需要的任何注释都需要在提供给图的选项中完成。据我所知,您不能事后使用这些值来创建节点 - 实在是太晚了。

\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{groupplots}
\pgfplotsset{compat=1.15}
\begin{document}

\pgfplotstableread[row sep=crcr]{
    1   -1  \\
    2   -2  \\
    3   3   \\
    4   4   \\
}\mytable

\pgfplotstablegetrowsof\mytable
\pgfmathsetmacro\numberofrows{\pgfplotsretval}

\begin{tikzpicture}
  \begin{groupplot}[height=4cm, group style={group size=1 by \numberofrows}]

    \pgfmathsetmacro{\numberofrows}{\numberofrows-1}
    \pgfplotsinvokeforeach{0,...,\numberofrows}{
      \pgfplotstablegetelem{#1}{[index]0}\of\mytable
      \xdef\numberofsample{\pgfplotsretval}

      \pgfplotstablegetelem{#1}{[index]1}\of\mytable
      \xdef\valueofsample{\pgfplotsretval}

      \nextgroupplot[title/.expanded={sample=\numberofsample}]
      \addplot  coordinates {(0,\valueofsample)};
    }
  \end{groupplot}
\end{tikzpicture}

\end{document}

4 个地块

希望您可以根据您的要求进行调整,因为我不明白您想做什么,但您可能明白!

相关内容