我有两个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.dat
和file2.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
,以获取有关我在这里使用的不同命令的更多信息。