是否可以确定读取的表中的行数pgfplotstableread{values.dat}\val
?
我的设置如下。我做了一些实验来观察参数如何影响收敛曲线。这些实验的结果如下
[results.dat]
n err_0 err_1 err_2 err_3
1024 0.1 0.2 0.15
2084 0.01 0.02 0.015
4096 0.001 0.002 0.0015
每个实验的参数保存在第二个表中
[meta.dat]
0.5
2
3.7
11
现在我想自动绘制结果(不知道实验次数或参数)
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\begin{document}
\pgfplotstableread{results.dat}\values
\pgfplotstableread{meta.dat}\meta
\def\N{3} %change to automatic here
\begin{tikzpicture}
\begin{loglogaxis}
\foreach \i in {0,...,\N}{
%use elements from meta table here instead of \i
\edef\theLegend{\noexpand\addlegendentry{Generalized \i}}
\addplot table[x=n,y=err_\i]{\values};
\theLegend
}
\end{loglogaxis}
\end{tikzpicture}
\end{document}
我感到困惑的两点都已用评论标记出来。
答案1
使用打击乐的指针和答案https://tex.stackexchange.com/a/36472/5737我找到了以下方法来解决我的问题。
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\begin{document}
\pgfplotstableread{results.dat}\values
\pgfplotstableread{meta.dat}\meta
%number of experiments
\pgfplotstablegetrowsof{\meta}
\pgfmathsetmacro{\N}{\pgfplotsretval-1}
\begin{tikzpicture}
\begin{loglogaxis}
\foreach \i in {0,...,\N}{
%get parameter
\pgfplotstablegetelem{\i}{[index]0}\of{\meta}
\let\param\pgfplotsretval
\edef\theLegend{\noexpand\addlegendentry{Generalized \param}}
\addplot table[x=n,y=err_\i]{\values};
\theLegend
}
\end{loglogaxis}
\end{tikzpicture}
\end{document}