关注该问题利用曲线系列进行色彩管理 我找不到创建曲线族关联表的适当方法。
我尝试根据参数\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/expr
create col/assign
expr
\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}