如果我有一张表,如何获取表值并将它们用作 gnuplot 中 pgfplots 绘图的参数?特别是,如何从多行中绘制具有相同函数形式的多条曲线?
答案1
编辑:我执行此操作的第一种方法是使用\def
命令而不是\pgfmathsetmacro
,但这不起作用。
方法:
- 使用以下方式加载表格
\pgfplotstableread
- 使用 获取行数
\pgfplotstablegetrowsof
,然后将该数字减一。 - 在 中
axis
,使用\foreach
迭代每一行,直到之前找到的最大值 - 用于检索当前行和正确的参数,使用
\pgfplotstablegetelem
设置变量(\a
和\b
)\pgfmathsetmacro
gnuplot
在命令中使用变量
代码:
\documentclass{standalone}
\usepackage{pgfplots,pgfplotstable,tikz}
\usepackage{filecontents}
\begin{filecontents}{data.dat}
a b
1 3
2 2
3 1
4 0
5 0.5
3 2
1 9
2 4
\end{filecontents}
\begin{document}
\pgfplotstableread{data.dat}\datafile
\pgfplotstablegetrowsof{\datafile}
\pgfmathsetmacro\adjrows{\pgfplotsretval -1}
\begin{tikzpicture}
\begin{axis}
\foreach \rownum in {0,...,\adjrows}
{
\pgfplotstablegetelem{\rownum}{a}\of{\datafile}
\pgfmathsetmacro{\a}{\pgfplotsretval}
\pgfplotstablegetelem{\rownum}{b}\of{\datafile}
\pgfmathsetmacro{\b}{\pgfplotsretval}
\addplot[raw gnuplot] gnuplot{
set xrange [0:10];
set samples 100;
f(x) = \a*x+\b*x*x;
plot f(x);
};
}
\end{axis}
\end{tikzpicture}
\end{document}