我正在尝试使用 pgfplotstable 改进我在 LaTeX 中的工作流程,以包括自动错误计算。
现在,当我运行模拟时,我将输出保存到 csv 表中,然后使用 pgfplotstable 将其加载到 LaTeX 中,例如
\documentclass{standalone}
\usepackage{pgfplots,pgfplotstable}
\pgfplotsset{compat=newest}
\begin{document}
\pgfplotstableread{
x y
1 1.0
2 2.0
3 3.0
}\sim
\begin{tikzpicture}
\begin{axis}
\addplot table[x=x, y=y]\sim;
\end{axis}
\end{tikzpicture}
\end{document}
但是,现在我想将此模拟结果与某个参考解决方案(或其他方法)进行比较。那么,是否有可能找出两个不同表的 y 值之间的差异?
我想这样的事情应该是可能的
\documentclass{standalone}
\usepackage{pgfplots,pgfplotstable}
\pgfplotsset{compat=newest}
\begin{document}
\pgfplotstableread{
x y
1 1.0
2 2.0
3 3.0
}\sim
\pgfplotstableread{
x y
1 1.5
2 1.5
3 2.0
}\ref
\begin{tikzpicture}
\begin{axis}
\addplot table[x=x, y expr=\thisrow{y}{\sim}-\thisrow{y}{\ref}]; %Not working
\end{axis}
\end{tikzpicture}
\end{document}
但是请注意,y expr=\thisrow{y}{\sim}-\thisrow{y}{\ref}
由于的使用是错误的,所以不起作用\thisrow
,第二个输入用于输出而不是输入,这只是为了说明这个想法。
答案1
您可以将y
第二个表中的列添加到第一个表中,然后像往常一样对一个表进行操作。
\documentclass{standalone}
\usepackage{pgfplots,pgfplotstable}
\pgfplotsset{compat=newest}
\begin{document}
\pgfplotstableread{
x y
1 1.0
2 2.0
3 3.0
}\sim
\pgfplotstableread{
x y
1 1.5
2 1.5
3 2.0
}\ref
% https://tex.stackexchange.com/a/166691/121799
% add y column from ref to sim and call it y2
\pgfplotstablecreatecol[
copy column from table={\ref}{[index] 1},
]{y2}{\sim}
% uncomment this to see the table
%\pgfplotstabletypeset{\sim}
\begin{tikzpicture}
\begin{axis}
\addplot table[x index=0,
y expr=\thisrow{y}-\thisrow{y2}]{\sim}; %Now working
\end{axis}
\end{tikzpicture}
\end{document}