Pgfplots 轴环境,函数循环有效,但绘图选项无效

Pgfplots 轴环境,函数循环有效,但绘图选项无效

我的问题与此有关,\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}

在此处输入图片描述

相关内容