现在我被困在图形的下半部分,即地面上。我尝试使用 foreach \x 命令,但由于某种我不明白的原因,它不起作用。首先,我尝试在 draw 命令中使用 xshift 选项。
\documentclass{standalone}
\standaloneconfig{border=5mm 5mm 5mm 5mm}
\usepackage{units}
\usepackage{tikz,pgf,import,pgfplots}
\usetikzlibrary{calc, pgfplots.units,}
\pgfplotsset{compat=1.3}
\begin{document}
\centering
\begin{tikzpicture}
\begin{axis}[xmin=-5, xmax=5, ymin=-5, ymax=5,
xtick=\empty, ytick=\empty, axis lines=center]
%Sine wave
\addplot[blue, domain=-4:4] {sin(deg (x))};
% Ground
\draw(axis cs: -4,-4.5)--(axis cs: 4,-4.5);
\foreach \x in {0.2, 0.4, ..., 8} {%
\draw[xshift={axis cs: \x} ] (axis cs: -4.0 ,-5) -- (axis cs: -3.8,-4.5);
% \draw (axis cs: { -4.0 + \x },-5) -- (axis cs: { -3.8 + \x },-4.5);
}%
% \draw[hatch](axis cs: -4,-4.5)--(axis cs: 4,-4.5);
\end{axis}
\end{tikzpicture}
\结束{文档}
但它不起作用,我只得到第一条倾斜的线:
我也尝试在坐标上“手动”进行变换:
\foreach \x in {0.2cm, 0.4cm, ..., 8cm} {% I tried adding the units cm amd whitout
\draw (axis cs: { -4.0 + \x },-5) -- (axis cs: { -3.8 + \x },-4.5);
}%
但在这种情况下,该文件甚至无法编译。
寻找解决方案,我发现了这一点例子使用路径装饰的选项。
所以我添加了一种新风格:
\begin{tikzpicture}[hatch/.style={postaction={line cap=round,draw,decorate,decoration={border,angle=-120, amplitude=0.4cm,segment length=2mm}}}]%
\begin{axis}[xmin=-5, xmax=5, ymin=-5, ymax=5,
xtick=\empty, ytick=\empty, axis lines=center]
%Sine wave
\addplot[blue, domain=-4:4] {sin(deg (x))};
% Ground
\draw[hatch](axis cs: -4,-4.5)--(axis cs: 4,-4.5);
\end{axis}
\end{tikzpicture}
在这种情况下,我得到了阴影,但它并没有填满整个路径。
有什么想法可以解决这个问题(无论哪种解决方案)。
提前致谢!
干杯!
答案1
看这个问题以及相关答案,解释了为什么不能\foreach
在axis
环境中使用。或者实际上,你可以,但你需要用它制作一个宏来确保扩展和计算正常工作。
应用于您的问题,您可以这样做:
\documentclass{standalone}
\standaloneconfig{border=5mm 5mm 5mm 5mm}
\usepackage{tikz, pgfplots}
\usetikzlibrary{calc}
\pgfplotsset{compat=1.3}
\begin{document}
\centering
\begin{tikzpicture}
\begin{axis}[xmin=-5, xmax=5, ymin=-5, ymax=5,
xtick=\empty, ytick=\empty, axis lines=center]
% Sine wave
\addplot[blue, domain=-4:4] {sin(deg (x))};
% Ground
\draw(axis cs: -4,-4.5)--(axis cs: 4,-4.5);
\foreach \x in {0.2, 0.4, ..., 8} {%
\edef\temp{\noexpand\draw (axis cs: { -4.0 + \x }, -5) -- (axis cs: { -3.8 + \x }, -4.5);}
\temp
}%
\end{axis}
\end{tikzpicture}
\end{document}
或者:
\documentclass{standalone}
\standaloneconfig{border=5mm 5mm 5mm 5mm}
\usepackage{tikz, pgfplots}
\usetikzlibrary{calc}
\pgfplotsset{compat=1.3}
\begin{document}
\centering
\begin{tikzpicture}
\begin{axis}[xmin=-5, xmax=5, ymin=-5, ymax=5,
xtick=\empty, ytick=\empty, axis lines=center]
% Sine wave
\addplot[blue, domain=-4:4] {sin(deg (x))};
% Ground
\draw(axis cs: -4,-4.5)--(axis cs: 4,-4.5);
\pgfplotsinvokeforeach{0.2, 0.4, ..., 8} {%
\draw (axis cs: { -4.0 + #1 }, -5) -- (axis cs: { -3.8 + #1 }, -4.5);
}%
\end{axis}
\end{tikzpicture}
\end{document}