编辑来自不同文件/表的 xy 数据

编辑来自不同文件/表的 xy 数据

我有两个单列数据文件(A.txt 和 B.txt)。为了将它们绘制在一起,我首先使用以下方法加载 dataA:

\pgfplotstableset{
create on use/dataA/.style={create col/copy column from table={A.txt}{0}}
}

然后我把它们放在一起

\begin{figure}[ht!]
\begin{tikzpicture}
\begin{axis}
    \addplot table [x =dataA,y index=0,y expr=\thisrowno{0}*-1] {B.txt};
\end{axis}
\end{tikzpicture}
\end{figure}

我可以毫无问题地更改 B.txt 中的数据符号,如上所示......但是:

如果我想从加载的表格数据A中更改符号,该怎么办?

有人有一个有用的想法或简单的例子吗?

编辑:一个最小的例子可能看起来像这样:

\documentclass{article}
\usepackage{pgfplots, pgfplotstable}
\usepackage{filecontents}
\begin{filecontents}{A.txt}
2
3
4
5
3
5
\end{filecontents}
\begin{filecontents}{B.txt}
5
4
3
2
5
5
\end{filecontents}

\pgfplotstableset{
    create on use/dataA/.style={create col/copy column from table={A.txt}{0}}
}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot table [x=dataA , y index=0 , y expr=\thisrowno{0}*-1] {B.txt};
\end{axis}
\end{tikzpicture}
\end{document}

任务是改变我的“dataA”图形环境中的符号。

答案1

通常,您可以使用 通过名称访问列x expr=\thisrow{dataA}*-1。但是,这仅当该列已存在于表中时才有效,而不是像这里的情况一样动态生成该列。

解决此问题的一种方法是使用 将第一个表读入表宏\pgfplotstableread{B.txt}{\datatable},然后使用 明确创建新列\pgfplotstablecreatecol[copy column from table={A.txt}{0}] {dataA} {\datatable}。然后\addplot table [x expr=\thisrow{dataA}*-1 , y index=0 , y expr=\thisrowno{0}*1] {\datatable};按预期工作。

或者,您可以使用 来x filter/.code修改 x 值。在 中x filter/.code,当前坐标可用作\pgfmathresult,并且相同的宏应在过滤器的末尾包含更改后的坐标。因此,您可以使用 来x filter/.code=\pgfmathparse{-1*\pgfmathresult}交换此处的符号。


使用明确创建的列的代码:

\documentclass{article}
\usepackage{pgfplots, pgfplotstable}
\usepackage{filecontents}
\begin{filecontents}{A.txt}
2
3
4
5
3
5
\end{filecontents}
\begin{filecontents}{B.txt}
5
4
3
2
5
5
\end{filecontents}

\pgfplotstableread{B.txt}{\datatable}
\pgfplotstablecreatecol[copy column from table={A.txt}{0}] {dataA} {\datatable}


\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot table [x=dataA , y index=0 , y expr=\thisrowno{0}*1] {\datatable};
\addplot table [x expr=\thisrow{dataA}*-1 , y index=0 , y expr=\thisrowno{0}*1] {\datatable};
\end{axis}
\end{tikzpicture}
\end{document}

代码使用x filter/.code

\documentclass{article}
\usepackage{pgfplots, pgfplotstable}
\usepackage{filecontents}
\begin{filecontents}{A.txt}
2
3
4
5
3
5
\end{filecontents}
\begin{filecontents}{B.txt}
5
4
3
2
5
5
\end{filecontents}
\pgfplotstableset{ create on use/dataA/.style={create col/copy column from table={A.txt}{0}} } 

\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot table [x=dataA , y index=0 , y expr=\thisrowno{0}*1] {B.txt};
\addplot +[x filter/.code=\pgfmathparse{-1*\pgfmathresult}]
    table [x=dataA , y index=0 , y expr=\thisrowno{0}*1] {B.txt};
\end{axis}
\end{tikzpicture}
\end{document}

相关内容