如何使用 PGFPlots 添加两个表格?

如何使用 PGFPlots 添加两个表格?

我有两个file1.dat文件file2.dat使用 PGFPlots 生成两条曲线(这两个文件共享相同的X值)。我只想绘制与file1.dat以及其曲线值等于file1.dat和 的值file2.dat

我怎样才能做到这一点?

目前,我有这样的代码:

\begin{tikzpicture}
\begin{axis}[
 axis x line=bottom,
 axis y line=left,
 xlabel={Number of elements.},
 ylabel={Errors.},
 xmin=1,
 xmax=4]
 \addplot+ [name path=A] table {file1.dat};
 \addplot+ [name path=B] table {file2.dat};
 \end{axis}
\end{tikzpicture}

答案1

虽然我最初的反应是使用另一个程序或脚本将两个值简单地相加会更合适(也更容易),但事实证明该pgfplotstable软件包功能齐全,您可以做任何您想做的事情而无需离开 LaTeX。您没有提供任何数据,所以我创建了虚拟文件file1.datfile2.dat文件(使用该filecontents软件包,以便您可以在此处看到它们)。

\documentclass{article}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
% Dummy file data
\usepackage{filecontents}
\begin{filecontents*}{file1.dat}
x y
0 0
1 1
2 2
3 3
4 4
5 5
\end{filecontents*}
\begin{filecontents*}{file2.dat}
x y
0 0
1 1
2 4
3 9
4 16
5 25
\end{filecontents*}
\begin{document}
% Read data from files into two tables
\pgfplotstableread{file1.dat}{\tablea}
\pgfplotstableread{file2.dat}{\tableb}
% Define rules used to create columns in a new table
\pgfplotstableset{
     create on use/x/.style={create col/copy column from table={\tablea}{x}}, % Copy x values from first (or 2nd) table
     create on use/y1/.style={create col/copy column from table={\tablea}{y}}, % Copy y values from first table
     create on use/y2/.style={create col/copy column from table={\tableb}{y}}, % Copy y values from second table
     create on use/sum/.style={create col/expr={\thisrow{y1}+\thisrow{y2}}}     % Sum y values
}
% Create a new table with columns x,y1,y2,sum (according to above rules) 
% and with same number of rows as first (or 2nd) table)
\pgfplotstablenew[columns={x,y1,y2,sum}]{\pgfplotstablegetrowsof{\tablea}}\tablec
% Now plot all data in the usual way
\begin{minipage}{0.8\textwidth}
    \begin{tikzpicture}
        \begin{axis}[
          ymin=0, ymax=30,
          xmin=0, xmax=5,
          xlabel={$x$},
          ylabel={$y$},
          grid=major,
          legend entries={\(y_1\),\(y_2\),\(y_1+y_2\)},
          legend pos = north west
          ]
        % Select appropriate columns
        \addplot [blue, mark=*] table [x=x,y=y1] {\tablec};
        \addplot [green, mark=*] table [x=x,y=y2] {\tablec};
        \addplot [red, mark=*] table [x=x,y=sum] {\tablec};
        \end{axis}
    \end{tikzpicture}
\end{minipage}
\begin{minipage}{0.2\textwidth}
% Take a look at the new table so we can check things worked as expected
\pgfplotstabletypeset\tablec
\end{minipage}
\end{document}

输出: 输出

我绝对建议看一下文档pgfplotstable,以获取有关我在这里使用的不同命令的更多信息。

相关内容