创建曲线族表

创建曲线族表

关注该问题利用曲线系列进行色彩管理 我找不到创建曲线族关联表的适当方法。

我尝试根据参数\y(指数)创建新列,但是使用\foreach或没有成功\pgfplotsinvokeforeach(参见注释行)。

以下是代码:

\documentclass[border=1mm]{standalone}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.8}

\pgfplotstableread{
1   1
2   4
3   9
4   16
5   25
}\dataQuad

\begin{document}
    \begin{minipage}[c]{0.75\textwidth}
        \begin{tikzpicture}
            \begin{axis}[%
                legend pos=north west,
                domain=0:5,
                cycle list name=color,
                xlabel=${x}$,
                ylabel=${y}$]
            \addplot [smooth] table[x index=0, y index=1] {\dataQuad};
            \legend{$y=x^2$}
            \foreach \y/\c in {3/green,4/red,5/brown}{%
                \edef\temp{\noexpand\addplot [color=\c,smooth] table[x index=0, y expr=\noexpand\thisrowno{0}^\y] {\noexpand\dataQuad};}
            \temp
            \addlegendentryexpanded{$y=x^\y$}
            }
            \end{axis}
        \end{tikzpicture}
    \end{minipage}
%
    \begin{minipage}[c]{0.75\textwidth}
        \pgfplotstablecreatecol[
            create col/assign/.code={%
                \foreach \y in {3,4,5} {%
%                   \pgfplotsinvokeforeach{3,4,5} {%
                    \pgfmathparse{\thisrow{1}*\y}
%                   \thisrow{1}*#1
                }
            \pgfkeyslet{/pgfplots/table/create col/next content}\pgfmathresult
            }
        ]{exp}\dataQuad
        \pgfplotstabletypeset[columns={[index]0,[index]1,exp}]\dataQuad
    \end{minipage}
\end{document}

这里出了什么问题?此外,如果每列都有一个标题,并引用“{3,4,5}”中的每个列表条目,那就太好了。

再次感谢,保罗


好的,当使用 定义列表时,会出现上面的错误 '!程序包 PGF 数学错误:抱歉,浮点单元的内部例程',\newcommand{\param}{2,3,4,5}请参阅以下 MWE:

\documentclass[border=1mm]{standalone}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.8}

\pgfplotstableread{
1
2
3
4
5
}\dataQuad

\newcommand{\param}{2,3,4,5}

\pgfplotsforeachungrouped \y in \param {%
    \pgfplotstablecreatecol[
        create col/expr={\thisrow{0}^\y}
    ]{\y}\dataQuad
}

\begin{document}
    \begin{minipage}[c]{0.75\textwidth}
        \begin{tikzpicture}
            \begin{axis}[%
                legend pos=north west,
                domain=0:5,
                cycle list={green, red, black, purple, orange},
                xlabel=${x}$,
                ylabel=${y}$]
            \pgfplotsinvokeforeach{2,...,5}{
                    \addplot +[smooth] table [x index=0, y=#1] \dataQuad;
            }
            \end{axis}
        \end{tikzpicture}
    \end{minipage}

    \begin{minipage}[c]{0.75\textwidth}
        \pgfplotstabletypeset\dataQuad
    \end{minipage}
\end{document}

我是否必须使用另一种方法来预定义列表?

谢谢,保罗

答案1

如果我正确理解了您的问题,您想为每个指数创建一列,并且在该列中,表中第一列的内容应提升为当前列索引的幂。

为此,您可以循环遍历所需的指数,然后每次都运行。请注意,它比\pgfplotstablecreatecol使用起来更容易(后者是一种非常强大的通用方法,但如果您想要的只是一个数学表达式,那么这是可行的方法)。create col/exprcreate col/assignexpr

\documentclass[border=1mm]{standalone}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.8}

\pgfplotstableread{
1
2
3
4
5
}\dataQuad

\pgfplotsforeachungrouped \y in {2,...,5}{
    \pgfplotstablecreatecol[
        create col/expr={\thisrow{0}^\y}
    ]{\y}\dataQuad
}

\begin{document}
    \begin{minipage}[c]{0.75\textwidth}
        \begin{tikzpicture}
            \begin{axis}[%
                legend pos=north west,
                domain=0:5,
                cycle list={green, red, black, purple, orange},
                xlabel=${x}$,
                ylabel=${y}$]
            \pgfplotsinvokeforeach{2,...,5}{
                    \addplot +[smooth] table [x index=0, y=#1] \dataQuad;
            }
            \end{axis}
        \end{tikzpicture}
    \end{minipage}

    \begin{minipage}[c]{0.75\textwidth}
        \pgfplotstabletypeset\dataQuad
    \end{minipage}
\end{document}

相关内容