我有一张包含 8 列的表格,我想生成 4 个图(1 vs 0、3 vs 2、5 vs 4 和 7 vs 6)。我打算使用 foreach 来生成图,使用
\begin{tikzpicture}
\begin{axis}
\foreach \x in {0,...,3} {
\addplot table[x index = \x * 2, y index = \x * 2 + 1]\table
}
\end{axis}
\end{tikzpicture}
其中\table
是存储表。
但我似乎不允许对索引进行算术运算。有办法吗?
更新:不太好 WE:
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.7}
\begin{tikzpicture}
\pgfplotstableread{
-1.5875 -1.5324 -1.4773 -1.4222 -1.3671 -1.312 -1.2569 -1.2018
-1.5875 -1.5324 -1.4773 -1.4222 -1.3671 -1.312 -1.2569 -1.2018
0.013166 0.013156 0.013147 0.013141 0.013137 0.013135 0.013135 0.013139
0.013156 0.013146 0.013138 0.013132 0.013128 0.013127 0.013128 0.013131
}\loadedtable
\pgfplotstabletranspose[colnames from=,input colnames to=r]\transtable\loadedtable
\begin{axis}
\foreach \x in {0,...,1} {
\pgfmathtruncatemacro{\Xcol}{\x * 2}
\pgfmathtruncatemacro{\Ycol}{1 + \x * 2}
\addplot[mark=,color=blue] table[x index =\Xcol,y index =\Ycol]\transtable;
}
\end{axis}
\end{tikzpicture}
\end{document}
答案1
对于这种情况,我只会使用简单的数字表达式,否则您必须使用\pgfmathparse{...}\pgfmathresult
对,这会很繁琐。相反,使用evaluate
键进行算术运算并使用生成的宏。PGF/TikZ 手册中有几个示例:
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.7}
\pgfplotstableread[header=false]{
0 1 2 3 4 5 6 7
5 8 6 4 0 6 7 8
}\mytable
\begin{document}
\begin{tikzpicture}
\begin{axis}
\foreach \x in {0,...,3} {
\addplot table[x index=\number\numexpr\x*2\relax,
y index=\number\numexpr\x*2+1\relax] {\mytable};
}
\end{axis}
\end{tikzpicture}
\end{document}