我尝试动态生成组图。一般来说,除了从表中提取的变量外,这种方法有效。
\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
(表格的第二列)应按行变化,并应在列中保持不变。相反,它会产生以下不确定的输出:
\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}
希望您可以根据您的要求进行调整,因为我不明白您想做什么,但您可能明白!