# modifying calculated nodes in \foreach loop

Using the following code from the answer to this question, how can the 0sigma node be replaced by \mu and how can the nodes 1sigma 2sigma 3sigma be replaced by +1sigma +2sigma +3sigma?

\documentclass{beamer}
\usepackage{verbatim}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\tikzset{pics/.cd,
curvea/.style n args={2}{code={
\node [red] at (#1,#2) (begin){}
([shift={(0.:.2cm)}]begin.center) node (beginr){}
([shift={(30:4.cm)}]beginr.center) node (midtop){}
([shift={(-30:4.cm)}]midtop.center) node (end){}
([shift={(0.:.2cm)}]end.center) node (endr){}
;
}}}
\begin{frame}[t]
\frametitle{mu +sigma}
\vspace {.6cm}
\begin{tikzpicture}[scale=.86, transform shape]
\draw [thick,-latex](0,0) -- (8.4,0) node [black, xshift=.3cm, yshift=0cm] {Z};
\draw [thick,-latex](0,-2.) -- (8.4,-2.) node [black, xshift=.3cm, yshift=0cm] {Z};
\draw [thick,-latex](0,-2.5) -- (0,4);
\pic at (0,0) {curvea={.246}{.2}};
\draw[blue, very thick] ([shift={(-150.:.14cm)}]begin.center) to [out=10, in=10, looseness=.68] (beginr.center) to [out=10, in=180, looseness=.6] ([shift={(90:1.2cm)}]midtop.center) node (midtopnew){} to [out=0, in=170, looseness=.6] (end.center) to [out=170, in=170, looseness=.68] ([shift={(-30.:.14cm)}]endr.center) ([shift={(180:1.2cm)}]midtopnew.center) node (ml){} ([shift={(0:1.22cm)}]midtopnew.center) node (mr){};
\draw [very thick, black] (midtopnew.center) -- (midtopnew.center|-0,0);
\begin{scope}[xshift=-1.cm, yshift=-2.cm]
\foreach[count=\j] \i in {-3,...,3}
\draw[very thick] (\j*1.227,.2) -- ++(0,-.4) node[yshift=-.35cm]{\i$\sigma$}coordinate(\i);
\end{scope}
\end{tikzpicture}
\end{frame}
\end{document}


If you do not want to delve into the depths of \pgfmathprintnumber, you could just use some \ifnum statements.

\documentclass{beamer}
\usepackage{verbatim}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\tikzset{pics/.cd,
curvea/.style n args={2}{code={
\node [red] at (#1,#2) (begin){}
([shift={(0.:.2cm)}]begin.center) node (beginr){}
([shift={(30:4.cm)}]beginr.center) node (midtop){}
([shift={(-30:4.cm)}]midtop.center) node (end){}
([shift={(0.:.2cm)}]end.center) node (endr){}
;
}}}
\begin{frame}[t]
\frametitle{mu +sigma}
\vspace {.6cm}
\begin{tikzpicture}[scale=.86, transform shape]
\draw [thick,-latex](0,0) -- (8.4,0) node [black, xshift=.3cm, yshift=0cm] {Z};
\draw [thick,-latex](0,-2.) -- (8.4,-2.) node [black, xshift=.3cm, yshift=0cm] {Z};
\draw [thick,-latex](0,-2.5) -- (0,4);
\pic at (0,0) {curvea={.246}{.2}};
\draw[blue, very thick] ([shift={(-150.:.14cm)}]begin.center) to [out=10, in=10, looseness=.68] (beginr.center) to [out=10, in=180, looseness=.6] ([shift={(90:1.2cm)}]midtop.center) node (midtopnew){} to [out=0, in=170, looseness=.6] (end.center) to [out=170, in=170, looseness=.68] ([shift={(-30.:.14cm)}]endr.center) ([shift={(180:1.2cm)}]midtopnew.center) node (ml){} ([shift={(0:1.22cm)}]midtopnew.center) node (mr){};
\draw [very thick, black] (midtopnew.center) -- (midtopnew.center|-0,0);
\begin{scope}[xshift=-1.cm, yshift=-2.cm]
\foreach[count=\j] \i in {-3,...,3}
{\ifnum\i=0
\draw[very thick] (\j*1.227,.2) -- ++(0,-.4) node[yshift=-.35cm]{$\mu$}coordinate(\i);
\else
\ifnum\i>0
\def\mysign{+}
\else
\def\mysign{}
\fi
\draw[very thick] (\j*1.227,.2) -- ++(0,-.4) node[yshift=-.35cm]{$\mysign\i\sigma$}coordinate(\i);
\fi
}
\end{scope}
\end{tikzpicture}
\end{frame}
\end{document}


– Hany
Commented Dec 9, 2018 at 14:52
• @Hany As always, you're very welcome!
– user121799
Commented Dec 9, 2018 at 14:52

Just use the pgf key \pgfkeys{/pgf/number format/showpos} and display the number with \pgfmathprintnumber{\i} (see page 952 of the 3.0.1a manual).

### Update:

To have a symbol \mu instead of the 0sigma, we can simply rewrite over the one that was written in the loop.

\draw (4*1.227,-.2)node[yshift=-.35cm,fill=white,minimum width=7mm]{$\mu$};


Foreach code:

 \begin{scope}[xshift=-1.cm, yshift=-2.cm]
\pgfkeys{/pgf/number format/showpos}
\foreach[count=\j] \i in {-3,...,3}
\draw[very thick] (\j*1.227,.2) -- ++(0,-.4) node[yshift=-.35cm]{\pgfmathprintnumber{\i}$\sigma$}coordinate(\i);
\draw (4*1.227,-.2)node[yshift=-.35cm,fill=white,minimum width=7mm]{$\mu$};
\end{scope}


\documentclass{beamer}
\usepackage{verbatim}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\tikzset{pics/.cd,
curvea/.style n args={2}{code={
\node [red] at (#1,#2) (begin){}
([shift={(0.:.2cm)}]begin.center) node (beginr){}
([shift={(30:4.cm)}]beginr.center) node (midtop){}
([shift={(-30:4.cm)}]midtop.center) node (end){}
([shift={(0.:.2cm)}]end.center) node (endr){}
;
}}}
\begin{frame}[t]
\frametitle{mu +sigma}
\vspace {.6cm}
\begin{tikzpicture}[scale=.86, transform shape]
\draw [thick,-latex](0,0) -- (8.4,0) node [black, xshift=.3cm, yshift=0cm] {Z};
\draw [thick,-latex](0,-2.) -- (8.4,-2.) node [black, xshift=.3cm, yshift=0cm] {Z};
\draw [thick,-latex](0,-2.5) -- (0,4);
\pic at (0,0) {curvea={.246}{.2}};
\draw[blue, very thick] ([shift={(-150.:.14cm)}]begin.center) to [out=10, in=10, looseness=.68] (beginr.center) to [out=10, in=180, looseness=.6] ([shift={(90:1.2cm)}]midtop.center) node (midtopnew){} to [out=0, in=170, looseness=.6] (end.center) to [out=170, in=170, looseness=.68] ([shift={(-30.:.14cm)}]endr.center) ([shift={(180:1.2cm)}]midtopnew.center) node (ml){} ([shift={(0:1.22cm)}]midtopnew.center) node (mr){};
\draw [very thick, black] (midtopnew.center) -- (midtopnew.center|-0,0);
\begin{scope}[xshift=-1.cm, yshift=-2.cm]
\pgfkeys{/pgf/number format/showpos}
\foreach[count=\j] \i in {-3,...,3}
\draw[very thick] (\j*1.227,.2) -- ++(0,-.4) node[yshift=-.35cm]{\pgfmathprintnumber{\i}$\sigma$}coordinate(\i);
\end{scope}
\end{tikzpicture}
\end{frame}
\end{document}

• Note that the OP wants a \mu instead of 0\sigma. This is why I used an \ifnum statement in my answer....
– user121799
Commented Dec 9, 2018 at 14:41