2

Why is this not working properly:

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

Produces:

enter image description here

While it should produce:

enter image description here

I have tried to increase the samples in the addplot options to no avail.

3
  • 3
    you are using x and \x in the same equation which confuses it. change all instances of \x with something like \myvar and it works
    – ArTourter
    Commented Apr 14, 2015 at 17:22
  • @ArTourter Thanks, that works. But why so?
    – jak123
    Commented Apr 14, 2015 at 17:27
  • 2
    Just a suggestion - use parenthesis around every variable in an expression, as when the variable has a negative value, - sign may change the order of calculation. Example: \x^2 is not the same as `(\x)^2 when x is negative. Correct me if I am wrong, but that was my impression from playing with pgfplot. See this: tex.stackexchange.com/a/125896/37570
    – ajeh
    Commented Apr 14, 2015 at 18:31

1 Answer 1

5

pgfplots understands the macro and the character versions of the variables. From the manual

What really goes on is a loop which assigns the current sample coordinate to the macro \x.

pgfplots defines a math constant x which always has the same value as \x. In short: it is the same whether you write \x or just x inside of math expressions.

So that fixes the first problem but if you use this foreach loop for other variables in the options say to use as a color modifier etc. it still won't work. This is the common problem of having a macro within an \addplot command unexpanded such as this explanation : How to node foreach value in math equation?

Hence, it is a good practice to loop with pgfplots's own loop macro as below(I would also use sqrt(#1) instead):

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

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .