为什么它不能正常工作:
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xmin = 0,xmax= 1,ylabel = $C_A/C_A^*$,xlabel=$z$]
\foreach \x in {.01,.1,1,10}
\addplot[domain=0:1] {1/(1+exp(\x^.5))*(exp(\x^.5)*exp(\x^.5*-x)+exp(\x^.5*x))};
\end{axis}
\end{tikzpicture}
\end{document}
生成:
虽然它应该产生:
我尝试增加addplot
选项中的样本,但没有成功。
答案1
pgfplots 理解变量的宏和字符版本。来自手册
实际发生的是一个循环,将当前样本坐标分配给宏 \x。
pgfplots 定义了一个数学常数 x,其值始终与 \x 相同。简而言之:在数学表达式中,无论您写 \x 还是只写 x,结果都是一样的。
这样就解决了第一个问题,但是如果您将此foreach
循环用于选项中的其他变量,例如用作颜色修改器等,它仍然不起作用。这是命令中\addplot
未展开宏的常见问题,例如以下解释:如何在数学等式中对每个值进行节点排序?
pgfplots
因此,使用自己的循环宏进行循环是一种很好的做法,如下所示(我也会使用sqrt(#1)
):
\begin{tikzpicture}
\begin{axis}[xmin = 0,xmax= 1,ylabel = $C_A/C_A^*$,xlabel=$z$]
\pgfplotsinvokeforeach{.01,.1,1,10}{
\addplot[domain=0:1]{1/(1+exp(#1^.5))*(exp(#1^.5)*exp(#1^.5*(-x))+exp(#1^.5*(x)))};
}
\end{axis}
\end{tikzpicture}