我迫切需要以下方面的帮助:在这个 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}