我的问题与此有关,\foreach 在轴环境中不起作用,但那里的解决方案对我的情况不起作用,不像相关问题,循环在轴环境中运行良好直到我们尝试传递参数color=\c
。
另外,如果我从轴环境之外删除绘图并在 TikZ 中绘图,它可以正常工作(因此语法foreach
没有问题),但我无法将图片正确地拟合到其轴上(参见第二个源代码示例)。
这是 MWE(addplot 和 plot 产生相同的错误):
\documentclass[12pt]{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\begin{document}
\begin{tikzpicture}[
declare function={ kL(\x,\n)=5/max(5,6*\x*\n+\n-\n*\x);}]
\begin{axis}[
title=Test,
xlabel=$\frac{\alpha_L}{\alpha_H}$,
ylabel=$\kappa_{L}$]
\foreach \n/\c in {0/black,1/green,2/red,3/blue}
{\plot[color=\c,
domain=0.1:1,
samples=50,
]{kL(\x,\n)};
}
\end{axis}
\end{tikzpicture}
\end{document}
如果你将它带到轴环境之外并在 TikZ 中写入,将发生以下情况:
\documentclass[12pt]{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\begin{document
\begin{tikzpicture}[
declare function={kL(\x,\n)=5/max(5,6*\x*\n+\n-\n*\x);
\begin{axis}[
title= Test II,
xlabel=$\frac{\alpha_L}{\alpha_H}$,
ylabel=$\kappa_{L}$]
\end{axis}
\foreach \n/\d in {0/black,1/green,2/red,3/blue}
\draw [color=\d,
domain=0.1:1,
samples=50,
] plot (\x,{kL(\x,\n)});
\end{tikzpicture}
\end{document}
答案1
当变量没有及时扩展时,这种情况很常见,您可以人为地强制执行。因为 pgfplots 首先收集图表,然后一次性绘制所有图表。您需要提供扩展版本,否则变量稍后将不再具有循环中的含义。因此,\c
被视为文本 cedilla 命令而不是颜色变量。
\documentclass[12pt]{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\begin{document}
\begin{tikzpicture}[
declare function={ kL(\x,\n)=5/max(5,6*\x*\n+\n-\n*\x);}]
\begin{axis}[
title=Test,
xlabel=$\frac{\alpha_L}{\alpha_H}$,
ylabel=$\kappa_{L}$]
\foreach \n/\c in {0/black,1/green,2/red,3/blue}
{\edef\temp{\noexpand\addplot[color=\c,
domain=0.1:1,
samples=50,
]{kL(\noexpand\x,\n)};}\temp
}
\end{axis}
\end{tikzpicture}
\end{document}