如何在 pgfplots 的轴环境中使用 \foreach?

如何在 pgfplots 的轴环境中使用 \foreach?

我在使用 TikZ 和 pgfplots 时遇到了一个相当奇怪的问题。我想让图例由变量驱动\foreach,但 TikZ 不允许我这样做。我尝试了几种不同的方法,发现这\foreach似乎在环境中不起作用axis

例如以下代码编译

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

而这段代码没有

 \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

您可以按照描述修改轴环境中的扩展方式这里作者:Christian。本文编译如下:

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

仍需要对值进行一些微调。但我建议使用 pgfplot 的功能代替\foreach,例如\pgfplotsforeachungrouped

相关内容