使用 foreach 绘制一条线

使用 foreach 绘制一条线

我迫切需要以下方面的帮助:在这个 MWE 中,我想在来自 foreach 命令的 x 值处绘制一个圆圈(理想情况下:一条垂直线)。

\documentclass{standalone}

\usepackage{pgfplots}
\pgfplotsset{compat=newest}

\begin{document}

\begin{tikzpicture}
\begin{axis}[
    width=10cm,
    height=10cm,
    grid=major,
    xlabel=$x$,
    ylabel=$f(x)$,
    xmin=-4,
    xmax=3,     
]

\addplot[domain=0:1] (x,x^2);

\foreach \xj in {
    {(-3,0)},
    {(-2,1)}
} {
    \draw \xj circle[radius=1em];
    %\draw \xj -- (0,0);
}

\foreach \xj in {-5,-4,...,5} {
    %\draw (-2.5,0.5) circle[radius=1em];
    \draw (\xj,0.5) circle[radius=1em];
    %\draw (\xj,0.5) -- (\xj, 1);
}

\end{axis}
\end{tikzpicture}

\end{document}

addplot 命令用于调整轴。出于某种原因,除非存在此 addplot,否则该命令不起作用。但这不是问题所在。问题是这样的:

第一个 foreach 命令给出了错误,但仍然编译成功。但是,绘制的圆圈位于绘图域的左边界。这里有些问题...

第二个 foreach 命令抛出了很多错误,导致文件无法再编译。我不知道为什么它不起作用,但这是因为 \x 在 draw 命令的定义中。如果将 \x 更改为 -2.5,文件就可以正常编译。

有什么想法可以解释为什么它没有像我希望的那样工作,以及有什么想法可以解决此问题?

答案1

您不必更改\foreach命令。如果您使用\edef\temp{\noexpand ...}技巧,您也可以使用标准\foreach命令。但还有一个更简单的选择:foreach在路径中使用。

\documentclass{standalone}

\usepackage{pgfplots}
\pgfplotsset{compat=newest}

\begin{document}

\begin{tikzpicture}
\begin{axis}[
    width=10cm,
    height=10cm,
    grid=major,
    xlabel=$x$,
    ylabel=$f(x)$,
    xmin=-4,
    xmax=3,     
]

\addplot[domain=0:1] (x,x^2);

\draw foreach \xj in {
    {(-3,0)},
    {(-2,1)}
} {
     \xj circle[radius=1em]
   
}
foreach \xj in {-5,-4,...,5} {(\xj,0.5) circle[radius=1em]};

\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

循环\foreach在 中不起作用pgfplots。在其中,您需要使用它的采用版本,如 和\pgfplotsforeachungrouped\pgfplotsinvokeforeach有关详细信息,请参阅 `pgfplots 的文档,第 544-545 页(第 8.1 节实用程序命令):

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}

\begin{document}
    \begin{tikzpicture}
\begin{axis}[
    width=10cm,
    height=10cm,
    grid=major,
    xlabel=$x$,
    ylabel=$f(x)$,
    xmin=-4,
    xmax=3,
]
\addplot[domain=0:1] (x,x^2);

\pgfplotsforeachungrouped \x/\y in {-3/0, -2/1}% 
{
    \edef\temp{\noexpand\draw[red] (\x,\y) circle[radius=1em];}
    \temp
}

\pgfplotsinvokeforeach{-5,-4,...,5}%
{
    \draw (#1,0.5) circle[radius=1em];
}
\end{axis}
    \end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容