Pgfplotstable:从两个不同的表中减去两列

Pgfplotstable:从两个不同的表中减去两列

我正在尝试使用 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}

在此处输入图片描述

相关内容