11

I'm having a pretty weird issue with TikZ and pgfplots. I want to have a legend driven by a \foreach variable, but TikZ won't let me do that. I tried a couple of different stuff and realized that \foreach doesn't seem to work inside the axis environment.

For instance the following code compiles

    \documentclass{article}
    \usepackage{tikz}
    \usepackage{pgfplots}
    \begin{document}

    \begin{tikzpicture}
    \foreach \x/\y in {1/A,2/C,3/D} 
{
\draw (\x,-4pt) -- (\x,4pt) node [below,yshift=-2ex] {\y};
}
    \begin{axis}
    \addplot   {sin(deg(x))};
    \addlegendentry{2}
    \end{axis}
    \end{tikzpicture}

    \end{document}

And this code doesn't

 \documentclass{article}
    \usepackage{tikz}
    \usepackage{pgfplots}
    \begin{document}

    \begin{tikzpicture}
    \begin{axis}
    \foreach \x/\y in {1/A,2/C,3/D} 
{
\draw (\x,-4pt) -- (\x,4pt) node [below,yshift=-2ex] {\y};
}
    \addplot   {sin(deg(x))};
    \addlegendentry{2}
    \end{axis}
    \end{tikzpicture}

    \end{document}

1 Answer 1

10

You could modify the way of expansion in the axis environment like described here by Christian. This compiles:

\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}

\begin{tikzpicture}
\begin{axis}
\foreach \x/\y in {100/A,200/C,300/D} 
{
  \edef\temp{\noexpand\draw (\x,-4pt) -- (\x,4pt) node [below,yshift=-2ex] {\y};}
  \temp
}
\addplot   {sin(deg(x))};
\addlegendentry{2}
\end{axis}
\end{tikzpicture}

\end{document}

There's still some fine tuning of values required. Though I recommend using pgfplot's features instead of \foreach, such as \pgfplotsforeachungrouped for example.

2

You must log in to answer this question.

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