pgfplots 产生错误的图

pgfplots 产生错误的图

为什么它不能正常工作:

\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}

相关内容