向 pgfplots 表中添加列时的行为不明显

向 pgfplots 表中添加列时的行为不明显

我注意到pgfplots/table软件包中有一个异常。我不知道这是错误还是功能。

错误代码

\documentclass[]{standalone}
\usepackage{pgfplots, pgfplotstable}

\begin{document}

\begin{tikzpicture}
    \begin{axis}
        \addplot table[x=X,
        y={create col/expr={\thisrow{X}^2}}] {
        X Y
        1 1
        2 2
        3 3
        4 4
        5 5
        };
    \end{axis}
\end{tikzpicture}

\end{document}

! 未定义控制序列。.../table/create on use/create col/expr={\thisrow {X}^2}/.@cmd l.16 };

当我遇到这个错误时,我很长时间都无法理解其原因。

这种代码有效:

\documentclass[]{standalone}
\usepackage{pgfplots, pgfplotstable}

\begin{document}

\begin{tikzpicture}
\pgfplotstableread {
        X Y
        1 1
        2 2
        3 3
        4 4
        5 5
        }\data
    \begin{axis}
        \addplot table[x=X,
        y={create col/expr={\thisrow{X}^2}}] \data;
    \end{axis}
\end{tikzpicture}

\end{document}

就是说我一开始公布表的话,是没有错误的。

这个也有效:

\documentclass[]{standalone}
\usepackage{pgfplots, pgfplotstable}

\begin{document}

\begin{tikzpicture}
    \begin{axis}
        \addplot table[x=X,
        create on use/Z/.style={create col/expr={\thisrow{X}^2}}, 
        y=Z] {
        X Y
        1 1
        2 2
        3 3
        4 4
        5 5
        };
    \end{axis}
\end{tikzpicture}

\end{document}

在最后一个示例中,我们通过样式添加列。奇怪的是,这是通过样式完成的,尽管它与样式无关。

这里的实现本身是否存在不一致之处?为什么第一个例子不起作用,给出一个不明显的错误?

答案1

PGFPlots 需要读取整个表来创建新列:

read completely

此键只有一个用途,即动态创建后处理列,然后绘制这些列。

默认情况下,只有当有时才将表读入内存create on use

\documentclass[tikz, border=1cm]{standalone}
\usepackage{pgfplots, pgfplotstable}
\pgfplotsset{compat=1.18}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot table[read completely, x=X, y={create col/expr={\thisrow{X}^2}}] {
X Y
1 1
2 2
3 3
4 4
5 5
};
\end{axis}
\end{tikzpicture}
\end{document}

带抛物线的图形

当然,更好的方法是使用\addplot table [x=X, y expr={\thisrow{X}^2}]

相关内容