我有两个单列数据文件(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}